merge coreutils 7.6
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34041 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
bee93957e0
commit
356b0f18b9
|
@ -1,5 +1,577 @@
|
||||||
|
2009-09-11 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
version 7.6
|
||||||
|
* NEWS: Record release date.
|
||||||
|
|
||||||
|
2009-09-10 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
link,ln: use gnulib's link module to work around Solaris 10 deficiency
|
||||||
|
Before this change, :>f; ln -T f no-such/ would succeed on Solaris 10.
|
||||||
|
After it, ln fails, as it should: ln: accessing `z/': Not a directory
|
||||||
|
The command, link f no-such/, had the same problem on that system.
|
||||||
|
* bootstrap.conf (gnulib_modules): Add "link".
|
||||||
|
* tests/ln/slash-decorated-nonexistent-dest: New test.
|
||||||
|
* tests/Makefile.am (TESTS): Add it.
|
||||||
|
* NEWS (Portability): Mention the improvement.
|
||||||
|
|
||||||
|
build: update gnulib submodule to latest
|
||||||
|
|
||||||
|
2009-09-10 Ondřej Vašík <ovasik@redhat.com>
|
||||||
|
|
||||||
|
doc: improve various BLOCKSIZE and SIZE help
|
||||||
|
* doc/coreutils.texi (multiplierSuffixes): Mention that
|
||||||
|
the suffix can be specified without a leading number
|
||||||
|
* src/split.c (usage): Refactor SIZE help to within a function
|
||||||
|
* src/truncate.c (usage): Likewise
|
||||||
|
* src/ls.c (usage): Likewise
|
||||||
|
* src/df.c (usage): Likewise. Also add a function with BLOCKSIZE help
|
||||||
|
* src/du.c (usage): Likewise.
|
||||||
|
* src/system.h: Define 2 functions to emit common help text
|
||||||
|
This was prompted by https://bugzilla.redhat.com/show_bug.cgi?id=511188
|
||||||
|
|
||||||
|
2009-09-10 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
dd conv=unblock: print final newline consistently
|
||||||
|
* src/dd.c (dd_copy) [C_UNBLOCK]: Always print the final newline for
|
||||||
|
non-empty output, not just when output size is a multiple of cbs.
|
||||||
|
* doc/coreutils.texi (dd invocation) [conv=unblock]: Mention that dd
|
||||||
|
prints a newline after each output record, not just when replacing
|
||||||
|
trailing spaces.
|
||||||
|
Reported by Ulrich Drepper.
|
||||||
|
* tests/dd/unblock: New file. Test for this.
|
||||||
|
* tests/Makefile.am (TESTS): Add it.
|
||||||
|
* NEWS (Bug fixes): Mention it.
|
||||||
|
|
||||||
|
2009-09-09 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
maint: make cfg.mk slightly more generic
|
||||||
|
* cfg.mk (url_dir_list): Don't hard-code "coreutils". Use $(PACKAGE).
|
||||||
|
|
||||||
|
2009-09-08 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
* gnulib: Update submodule to latest.
|
||||||
|
|
||||||
|
tail: make the new piped-stdin test as portable as the old one
|
||||||
|
* src/tail.c (main): Adapt piped-stdin test to use the same isapipe,
|
||||||
|
test as was used in the preceding POSIXLY_CORRECT condition.
|
||||||
|
Remove the now-subsumed POSIXLY_CORRECT test.
|
||||||
|
Reported by Pádraig Brady.
|
||||||
|
* doc/coreutils.texi (tail invocation): Document this change.
|
||||||
|
* NEWS (Changes in behavior): Reclassify, clarify.
|
||||||
|
|
||||||
|
2009-09-08 Pádraig Brady <P@draigBrady.com>
|
||||||
|
|
||||||
|
tests: tail-2/assert: reduce risk of race condition
|
||||||
|
* tests/tail2/assert: This reverts commit be853120, 25-08-2009,
|
||||||
|
"tests: tail-2/assert: avoid risk of race condition"
|
||||||
|
kill -0 doesn't send a signal and so will only confirm that the
|
||||||
|
background process was forked, which we know already because
|
||||||
|
we have its pid.
|
||||||
|
|
||||||
|
tests: address a race condition in misc/cat-buf
|
||||||
|
* tests/misc/cat-buf: Increase the delay between writes
|
||||||
|
to decrease the chance that dd will read both at once.
|
||||||
|
Since the test is inherently racy, print a warning via
|
||||||
|
skip_test_ rather than failing outright.
|
||||||
|
Reported by Jim Meyering.
|
||||||
|
|
||||||
|
2009-09-07 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
tail: syntax-only: use "false", rather than equivalent, 0
|
||||||
|
* src/tail.c (record_open_fd): Initialize "->ignore" to false, not 0.
|
||||||
|
|
||||||
|
tail: ignore -f for piped-stdin, as POSIX requires
|
||||||
|
* src/tail.c (main): Tailing a pipe "forever" is not useful,
|
||||||
|
and POSIX specifies that tail ignore the -f when there is no
|
||||||
|
file argument and stdin is a FIFO or pipe. So we do that.
|
||||||
|
In addition, GNU tail excludes "-" arguments from the list of files
|
||||||
|
to tail forever, when the associated file descriptor is connected
|
||||||
|
to a FIFO or pipe. Before this change, ":|tail -f" would hang.
|
||||||
|
Reported by Ren Yang and Ulrich Drepper.
|
||||||
|
* tests/tail-2/pipe-f: Test for this.
|
||||||
|
* tests/tail-2/pipe-f2: Ensure tail doesn't exit early for a fifo.
|
||||||
|
* tests/Makefile.am (TESTS): Add these tests.
|
||||||
|
* NEWS (POSIX conformance): Mention it.
|
||||||
|
|
||||||
|
2009-09-07 Pádraig Brady <P@draigBrady.com>
|
||||||
|
|
||||||
|
tests: tail-2/flush-initial should not rely on stdbuf
|
||||||
|
* tests/tail-2/flush-initial: stdbuf is not built on all systems.
|
||||||
|
In any case it's redundant since stdout will automatically be buffered
|
||||||
|
since we're redirecting to file. So just call tail without using stdbuf.
|
||||||
|
|
||||||
|
2009-09-07 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
tail: don't give up on inotify mode for an already-ignored "-"
|
||||||
|
* src/tail.c (main): Adjust today's change to honor the
|
||||||
|
F[i].ignore flag that may have been set in tail_file.
|
||||||
|
|
||||||
|
tests: misc/cat-buf: clean up syntax
|
||||||
|
* tests/misc/cat-buf: Don't suppress dd's stderr.
|
||||||
|
Remove useless quotes.
|
||||||
|
|
||||||
|
tests: ls/color-clear-to-eol: append NL to accommodate old sed
|
||||||
|
* tests/ls/color-clear-to-eol: Some vendor sed programs fail
|
||||||
|
to operate on lines that are not NL-terminated.
|
||||||
|
This affects at least Solaris 10's /bin/sed.
|
||||||
|
Reported by Pádraig Brady.
|
||||||
|
|
||||||
|
tests: tail-2/infloop-1: avoid rare test failure on a busy system
|
||||||
|
* tests/tail-2/infloop-1: Sleep 3 seconds, not 1, but in increments
|
||||||
|
of 0.1 second. Before, this test would fail ~1 time in 20 via
|
||||||
|
"make -j9 check" on a quad-core system.
|
||||||
|
Correct comment.
|
||||||
|
|
||||||
|
build: update gnulib submodule to latest
|
||||||
|
|
||||||
|
doc: tweak NEWS
|
||||||
|
* NEWS (dd): Tweak wording.
|
||||||
|
Two blank lines between sections.
|
||||||
|
|
||||||
|
tail -f: handle "-"/stdin once again
|
||||||
|
* src/tail.c (main) [HAVE_INOTIFY]: When stdin (i.e., "-", or no args,
|
||||||
|
but not /dev/stdin) is specified on the command line, don't use inotify.
|
||||||
|
Reported by Bill Brelsford in <http://bugs.debian.org/545422>.
|
||||||
|
* tests/tail-2/follow-stdin: New file. Test for this.
|
||||||
|
* tests/Makefile.am (TESTS): Add the test.
|
||||||
|
* NEWS (Bug fixes): Mention it.
|
||||||
|
This bug was introduced in coreutils-7.5 via commit ae494d4b,
|
||||||
|
2009-06-02, "tail: use inotify if it is available".
|
||||||
|
|
||||||
|
2009-09-06 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
tests: tail-2/flush-initial: correct race avoidance code
|
||||||
|
* tests/tail-2/flush-initial: Wait for the file to be nonempty,
|
||||||
|
not for the process. Based on a suggestion from Pádraig Brady.
|
||||||
|
|
||||||
|
tests: ls-misc: don't let a bogus umask cause test failure
|
||||||
|
* tests/misc/ls-misc: Set umask to 022. A umask setting permitting
|
||||||
|
world-write access, e.g., umask o+w, would cause this test to fail.
|
||||||
|
Report by Mathias Brodala and analysis by Tom Fitzhenry in
|
||||||
|
<http://bugs.debian.org/544965>.
|
||||||
|
|
||||||
|
tail: flush initial output before possibly blocking
|
||||||
|
* src/tail.c (main): Flush any output from tail_file,
|
||||||
|
before calling tail_forever_inotify, which can block.
|
||||||
|
* tests/tail-2/flush-initial: New file. Test for the bug.
|
||||||
|
* tests/Makefile.am (TESTS): Add tail-2/flush-initial.
|
||||||
|
* NEWS (Bug fixes): Mention it.
|
||||||
|
This bug was introduced in coreutils-7.5 via commit ae494d4b,
|
||||||
|
2009-06-02, "tail: use inotify if it is available".
|
||||||
|
|
||||||
|
2009-09-05 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
maint: remove unused file: lib/fdopendir-glibc.c
|
||||||
|
* lib/fdopendir-glibc.c: Remove unused file.
|
||||||
|
|
||||||
|
2009-09-05 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
tests: ls/stat-vs-dirent: avoid spurious test failure
|
||||||
|
* tests/ls/stat-vs-dirent: Avoid test failure when run from a
|
||||||
|
directory whose name (or ancestor directory name) starts with ".".
|
||||||
|
|
||||||
|
2009-09-05 Pádraig Brady <P@draigBrady.com>
|
||||||
|
|
||||||
|
doc: make the tail --sleep-interval help less confusing
|
||||||
|
* src/tail.c (usage): I read "approximately S seconds"
|
||||||
|
as "approximately 5 seconds" for approximately 5 seconds.
|
||||||
|
|
||||||
|
maint: remove some tab indentation from copy.c
|
||||||
|
* src/copy.c (copy_internal): Remove tabs erroneously added
|
||||||
|
in commit 3346c0af.
|
||||||
|
|
||||||
|
tests: test old tail -f method even on systems with inotify
|
||||||
|
* src/tail.c (main): Add an undocumented ---disable-inotify option
|
||||||
|
to allow disabling inotify.
|
||||||
|
* tests/tail-2/pid: Run test in both normal and "disable_inotify" modes.
|
||||||
|
* tests/tail-2/tail-n0f: Likewise.
|
||||||
|
* tests/tail-2/wait: Likewise.
|
||||||
|
* tests/tail-2/append-only: Likewise.
|
||||||
|
|
||||||
|
2009-09-05 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
build: update gnulib submodule to latest
|
||||||
|
|
||||||
|
2009-09-05 Petr Salinger <Petr.Salinger@seznam.cz>
|
||||||
|
|
||||||
|
stty: use TAB0, TAB1, and TAB2 only if defined
|
||||||
|
* src/stty.c (mode_info) [TAB0, TAB1, TAB2]: Guard each
|
||||||
|
entry with #ifdef. Required for GNU/kFreeBSD.
|
||||||
|
Reported by Petr Salinger in http://bugs.debian.org/520368.
|
||||||
|
|
||||||
|
2009-09-05 Eric Blake <ebb9@byu.net>
|
||||||
|
|
||||||
|
build: update from gnulib
|
||||||
|
* gnulib: Update submodule to latest.
|
||||||
|
|
||||||
|
2009-09-04 Eric Blake <ebb9@byu.net>
|
||||||
|
|
||||||
|
ln: add comments related to POSIX 2008
|
||||||
|
* src/ln.c (ENABLE_HARD_LINK_TO_SYMLINK_WARNING): Delete.
|
||||||
|
(do_link): Update comments per POSIX; add FIXME for -L, -P.
|
||||||
|
|
||||||
|
mv, cp: tweak LINK_FOLLOWS_SYMLINKS logic
|
||||||
|
* gnulib: Update to latest gnulib.
|
||||||
|
* src/copy.c (copy_internal): Adjust comment in light of POSIX
|
||||||
|
2008, and deal with macro now being tri-state.
|
||||||
|
|
||||||
|
2009-09-04 Petr Salinger <Petr.Salinger@seznam.cz>
|
||||||
|
|
||||||
|
tests: fix a tail-2/pid failure on GNU/kFreeBSD
|
||||||
|
* tests/tail-2/wait: Increase the file name recheck frequency to
|
||||||
|
fix a failure on systems without inotify and a file timestamp precision
|
||||||
|
of 1 second (like GNU/kFreeBSD).
|
||||||
|
|
||||||
|
2009-09-04 Pádraig Brady <P@draigBrady.com>
|
||||||
|
|
||||||
|
tests: fix a failure when running tail-2/wait as root
|
||||||
|
* tests/tail-2/wait: Silently skip a portion of the test
|
||||||
|
when running as root, rather than failing the whole test.
|
||||||
|
This regression was introduced with commit 84b5844d, 2009-09-03,
|
||||||
|
"tests: simplify and fix a race in 2 tail --follow tests".
|
||||||
|
|
||||||
|
2009-09-04 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
|
build: fix libcap configure flag handling
|
||||||
|
* m4/jm-macros.m4 (coreutils_MACROS): The code to handle configure-time
|
||||||
|
enabling or disabling of libcap support was broken. It would treat any
|
||||||
|
libcap configure option as --disable-libcap because it doesn't check
|
||||||
|
$enableval at all. This change makes sure we do the sane thing:
|
||||||
|
--disable-libcap -> disable and don't run any tests
|
||||||
|
--enable-libcap -> run tests and fail if not found
|
||||||
|
default -> run tests and warn if not found
|
||||||
|
|
||||||
|
2009-09-03 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
df: don't fail due to an unreadable argument
|
||||||
|
* src/df.c (main): If open or fstat fails when we're trying to ensure
|
||||||
|
that all arg-partitions are automounted, fall back on using stat.
|
||||||
|
Inspired by the report and patch from Olivier Fourdan in
|
||||||
|
http://bugzilla.redhat.com/520630.
|
||||||
|
* NEWS (Bug fixes): Mention it.
|
||||||
|
* tests/df/unreadable: New test for the above.
|
||||||
|
* tests/Makefile.am (TESTS): Add df/unreadable.
|
||||||
|
The bug was introduced in coreutils-7.3 via commit dbd17157,
|
||||||
|
2009-04-28, "df: use open(2), not stat, to trigger automounting".
|
||||||
|
|
||||||
|
2009-09-03 Kamil Dudka <kdudka@redhat.com>
|
||||||
|
|
||||||
|
doc: install -C: fix bug in the texi documentation
|
||||||
|
* doc/coreutils.texi: Move the documentation for install --compare (-C)
|
||||||
|
from the section on fmt to that for install.
|
||||||
|
Reported by Florian Schlichting.
|
||||||
|
|
||||||
|
2009-09-03 Pádraig Brady <P@draigBrady.com>
|
||||||
|
|
||||||
|
tests: simplify and fix a race in 2 tail --follow tests
|
||||||
|
* tests/tail-2/pid: Use the timeout command to determine process
|
||||||
|
longevity, rather than querying /proc/$pid/status.
|
||||||
|
The latter was racy in any case when inotify is used, as then
|
||||||
|
tail wakes up periodically even for unchanging files therefore
|
||||||
|
causing the check for "S (sleeping)" state to fail intermittently.
|
||||||
|
* tests/tail-2/wait: Likewise.
|
||||||
|
|
||||||
|
2009-09-03 Ondřej Vašík <ovasik@redhat.com>
|
||||||
|
|
||||||
|
cp: don't leak resources for each xattr preservation failure
|
||||||
|
* src/copy.c (copy_reg): Don't return from the function after an
|
||||||
|
unsuccessful and required preservation of extended attributes.
|
||||||
|
This resulted in leaking the copy buffer and file descriptors.
|
||||||
|
* NEWS (Bug fixes): Mention the fix.
|
||||||
|
The bug was introduced in coreutils-7.1 via commit 0889381c, 2009-01-23,
|
||||||
|
"cp/mv: add xattr support".
|
||||||
|
|
||||||
|
2009-09-01 Pádraig Brady <P@draigBrady.com>
|
||||||
|
|
||||||
|
chcon, chmod, chgrp, chown, du: report fts_close failure
|
||||||
|
* src/du.c (du_files): Don't fail silently upon fts_close failure.
|
||||||
|
* src/chcon.c (process_files): Likewise.
|
||||||
|
* src/chmod.c (process_files): Likewise.
|
||||||
|
* src/chown-core.c (chown_files): Likewise.
|
||||||
|
|
||||||
|
2009-09-01 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
build: update from gnulib
|
||||||
|
* gnulib: Update submodule to latest.
|
||||||
|
|
||||||
|
chcon, chmod, chgrp, chown, du: do not ignore fts_close failure
|
||||||
|
This is probably never visible, but who knows...
|
||||||
|
* src/chcon.c (process_files): Don't ignore fts_close failure.
|
||||||
|
* src/chmod.c (process_files): Likewise.
|
||||||
|
* src/chown-core.c (chown_files): Likewise.
|
||||||
|
* src/du.c (du_files): Likewise.
|
||||||
|
|
||||||
|
maint: du: remove unnecessary initialization
|
||||||
|
* src/du.c (main): Don't set "skip_file" unnecessarily.
|
||||||
|
|
||||||
|
maint: chown, chgrp, chmod, chcon: remove unnecessary initialization
|
||||||
|
* src/chown-core.c: Include "ignore-value.h".
|
||||||
|
(change_file_owner): Don't set "ent" only to ignore it.
|
||||||
|
* src/chcon.c (process_file): Likewise.
|
||||||
|
* src/chmod.c: Include "ignore-value.h".
|
||||||
|
(process_file): Don't set "ent" only to ignore it.
|
||||||
|
After diagnosing root-dev/ino failure, return false immediately:
|
||||||
|
Now that we don't set "ent" we must be sure not to use it uninitialized,
|
||||||
|
and there's no point in issuing --verbose-related output in this case.
|
||||||
|
|
||||||
|
maint: shred: remove unnecessary initialization
|
||||||
|
* src/shred.c (genpattern): Value stored to "n" is never used.
|
||||||
|
|
||||||
|
maint: dd: remove unnecessary initialization
|
||||||
|
* src/dd.c (skip): Remove set-but-never-used variable, soffset.
|
||||||
|
|
||||||
|
maint: tail: remove unnecessary initialization
|
||||||
|
* src/tail.c (tail_bytes): Don't compute "diff" twice.
|
||||||
|
|
||||||
|
maint: mbsalign.c: remove unnecessary assignment
|
||||||
|
* gl/lib/mbsalign.c (mbsalign): Remove assignment, the result of which
|
||||||
|
is never used.
|
||||||
|
|
||||||
|
2009-09-01 Pádraig Brady <P@draigBrady.com>
|
||||||
|
|
||||||
|
timeout: remove a redundant assignment
|
||||||
|
* src/timeout.c (main): While keeping argc and argv in
|
||||||
|
sync may be marginally useful, it is redundant to update argc,
|
||||||
|
so just remove that to suppress the clang warning.
|
||||||
|
|
||||||
|
timeout: defensive handling of all wait() errors
|
||||||
|
* src/timeout.c (main): Handle all possible cases of unexpected
|
||||||
|
failures from wait(). This was prompted by the clang tool reporting
|
||||||
|
the possible non-initialization of the status variable.
|
||||||
|
|
||||||
|
2009-09-01 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
ls -i: print consistent inode numbers also for mount points
|
||||||
|
On most unix- and linux-based kernels, ls -i DIR_CONTAINING_MOUNT_POINT
|
||||||
|
would print the wrong inode number for any entry that is a mount point.
|
||||||
|
It would do that by relying on readdir's dirent.d_ino values, while
|
||||||
|
most readdir implementations return the inode number of the underlying,
|
||||||
|
inaccessible directory. Thus, it is not consistent with what you'd
|
||||||
|
get when applying stat to the same entry. This bug led to surprising
|
||||||
|
results like "ls -i" and "ls -i --color" printing different numbers (ls
|
||||||
|
must usually "stat" a file to colorize its name). This change makes it
|
||||||
|
so that on offending systems, ls must stat non-command-line-arguments
|
||||||
|
for which otherwise it would be able to use "for free" dirent.d_ino
|
||||||
|
values. Regardless of this change, ls is already required to stat every
|
||||||
|
command-line argument. Note: versions of GNU ls prior to coreutils-6.0
|
||||||
|
did not perform the invalid optimization, and hence always printed
|
||||||
|
correct inode numbers. Thus, for the sake of correctness, ls -i is
|
||||||
|
forgoing the readdir optimization, for any kernel (including linux!)
|
||||||
|
with POSIX-nonconforming readdir. Note that currently, only Cygwin has
|
||||||
|
been agile enough to conform.
|
||||||
|
|
||||||
|
* src/ls.c (RELIABLE_D_INO): Define.
|
||||||
|
(print_dir): Use it.
|
||||||
|
For plenty of discussion, see this long thread:
|
||||||
|
http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/14020
|
||||||
|
This bug was introduced by the 2006-02-26 commit, 33eb3efe:
|
||||||
|
"In ls, avoid calling stat for --inode (-i), when possible."
|
||||||
|
* tests/ls/readdir-mountpoint-inode: New test.
|
||||||
|
* tests/Makefile.am (TESTS): Add it.
|
||||||
|
* tests/ls/stat-vs-dirent: Don't suppress failure of this test,
|
||||||
|
now that ls -i is fixed. Though note that it doesn't test well,
|
||||||
|
since it compares only the always-stat'd command-line arguments.
|
||||||
|
* NEWS (Bug fixes): Mention it.
|
||||||
|
|
||||||
|
2009-08-31 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
maint: revert my stdbuf change: the result didn't even compile
|
||||||
|
This reverts commit c1e158489d88bad418d52ceadf37af0b6f5b2112.
|
||||||
|
|
||||||
|
2009-08-30 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
maint: stdbuf: move a declaration; no-semantic-change
|
||||||
|
* src/stdbuf.c (set_program_path): Move a declaration down into
|
||||||
|
the scope where it's used.
|
||||||
|
|
||||||
|
build: quiet "make check" in src/
|
||||||
|
* src/Makefile.am (check-duplicate-no-install): Use $(AM_V_GEN).
|
||||||
|
(check-README): Likewise. And $(AM_V_at).
|
||||||
|
|
||||||
|
doc: cp: update note on preserving symlink time stamps
|
||||||
|
* doc/coreutils.texi (cp invocation): Now, we *do* preserve time
|
||||||
|
stamps on symlinks, when possible.
|
||||||
|
|
||||||
|
build: update bootstrap from gnulib
|
||||||
|
* bootstrap: Merge from gnulib.
|
||||||
|
|
||||||
|
2009-08-30 Pádraig Brady <P@draigBrady.com>
|
||||||
|
|
||||||
|
tests: don't misbehave if $TMPDIR contains spaces
|
||||||
|
* tests/misc/xattr: Add quotes.
|
||||||
|
* tests/mv/acl: Likewise.
|
||||||
|
* tests/mv/backup-is-src: Likewise.
|
||||||
|
* tests/mv/hard-link-1: Likewise.
|
||||||
|
* tests/mv/leak-fd: Likewise.
|
||||||
|
* tests/mv/mv-special-1: Likewise.
|
||||||
|
* tests/mv/part-fail: Likewise.
|
||||||
|
* tests/mv/part-hardlink: Likewise.
|
||||||
|
* tests/mv/part-rename: Likewise.
|
||||||
|
* tests/mv/part-symlink: Likewise.
|
||||||
|
* tests/mv/partition-perm: Likewise.
|
||||||
|
* tests/mv/sticky-to-xpart: Likewise.
|
||||||
|
|
||||||
|
2009-08-29 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
tests: other-fs-tmpdir: don't misbehave for quote-unfriendly $TMPDIR
|
||||||
|
* tests/other-fs-tmpdir: Quote uses of variables that might expand
|
||||||
|
to strings containing e.g., whitespace.
|
||||||
|
|
||||||
|
build: update from gnulib
|
||||||
|
* gnulib: Update submodule to latest.
|
||||||
|
|
||||||
|
tests: move a coreutils-specific test from maint.mk to Makefile.am
|
||||||
|
* Makefile.am (distcheck-hook): Make taint-distcheck here, since it's
|
||||||
|
no longer done via maint.mk.
|
||||||
|
|
||||||
|
tests: cp/reflink-auto guard against a pathological $TMPDIR
|
||||||
|
* tests/cp/reflink-auto: Add quotes.
|
||||||
|
|
||||||
|
2009-08-29 Pádraig Brady <P@draigBrady.com>
|
||||||
|
|
||||||
|
cp --reflink: preserve attributes on cloned files if asked
|
||||||
|
* src/copy.c (copy_reg): When cloning only skip the data copying
|
||||||
|
* tests/cp/reflink-perm: New test to check times and modes copied
|
||||||
|
* tests/Makefile.am: Reference the new test
|
||||||
|
* NEWS: Mention the fix
|
||||||
|
|
||||||
|
cp --reflink: add an "auto" parameter to fall back to a normal copy
|
||||||
|
* doc/coreutils.texi (cp invocation): Document the new
|
||||||
|
"auto" and "always" options to --reflink.
|
||||||
|
* src/copy.c (copy_reg): Fall back to a standard copy
|
||||||
|
when reflink() is not supported and --reflink=auto specified.
|
||||||
|
* src/copy.h [struct cp_options] (reflink): Change type s/bool/enum/.
|
||||||
|
* src/cp.c (usage): Describe the --reflink={always,auto} options
|
||||||
|
and expand a little on what --reflink does.
|
||||||
|
(main): parse the new parameters to --reflink and allow all
|
||||||
|
--sparse options with --reflink=auto.
|
||||||
|
* src/install.c (cp_option_init): Init the enum instead of bool.
|
||||||
|
* src/mv.c (cp_option_init): Likewise.
|
||||||
|
* tests/cp/reflink-auto: A new test for falling back to normal copy.
|
||||||
|
* tests/Makefile.am: Reference the new test.
|
||||||
|
* NEWS: Mention the new feature.
|
||||||
|
|
||||||
|
stdbuf: fix a small typo in --help output
|
||||||
|
* src/stdbuf.c (usage): s/then/the/
|
||||||
|
|
||||||
|
2009-08-28 Eric Blake <ebb9@byu.net>
|
||||||
|
|
||||||
|
build: avoid unused variable warnings on cygwin
|
||||||
|
* src/copy.c (clone_file, copy_attr_by_fd, copy_attr_by_name):
|
||||||
|
Mark up unused variables.
|
||||||
|
* src/remove.c (dirent_inode_sort_may_be_useful): Likewise.
|
||||||
|
|
||||||
|
dd: detect closed stderr
|
||||||
|
* src/dd.c (maybe_close_stdout): Always flush stderr; regression
|
||||||
|
introduced in commit 381e69ea.
|
||||||
|
* tests/misc/close-stdout (p): Use consistent style.
|
||||||
|
* tests/dd/stderr: New test, borrowing from misc/close-stdout.
|
||||||
|
* tests/Makefile.am (TESTS): Run it.
|
||||||
|
* NEWS: Mention this.
|
||||||
|
|
||||||
|
2009-08-28 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
maint: ignore only man/*.1, not all *.1 files
|
||||||
|
* .gitignore: Ignore *.1 only in man/
|
||||||
|
|
||||||
|
2009-08-27 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
build: prefix a few rules with $(AM_V_GEN)
|
||||||
|
* Makefile.am (.version, dist-hook, gen-ChangeLog): Use $(AM_V_GEN)
|
||||||
|
and $(AM_V_at), so that automake's silent-rules option (make V=1/V=0)
|
||||||
|
now controls whether the commands are printed at build time.
|
||||||
|
(THANKS-to-translators, check-ls-dircolors): Likewise.
|
||||||
|
|
||||||
|
2009-08-26 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
build: stop earlier if touching ChangeLog fails
|
||||||
|
* bootstrap.conf: Exit right away if touching ChangeLog fails.
|
||||||
|
Otherwise, the touch failure message is buried under configure output.
|
||||||
|
|
||||||
|
tests: mkdir/selinux: avoid spurious failure on some SELinux systems
|
||||||
|
* tests/test-lib.sh (require_selinux_enforcing_): New function.
|
||||||
|
* tests/mkdir/selinux: Use it.
|
||||||
|
Otherwise, this test would fail on Rawhide with SELinux disabled.
|
||||||
|
|
||||||
|
tests: tail-2/assert: avoid risk of race condition
|
||||||
|
* tests/tail-2/assert: Avoid spurious failure due to race condition.
|
||||||
|
Rather than sleeping for 1 second and crossing fingers,
|
||||||
|
wait explicitly for backgrounded tail process to start.
|
||||||
|
Otherwise, this test would fail under heavy load.
|
||||||
|
|
||||||
|
2009-08-25 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
maint: ensure we don't embed Emacs indent-tabs-mode setting lines
|
||||||
|
Now that we prohibit indentation via TABs, there's no need for
|
||||||
|
Emacs indent-tabs-mode setting lines, so prohibit those, too.
|
||||||
|
* cfg.mk (sc_prohibit_emacs__indent_tabs_mode__setting): New rule.
|
||||||
|
|
||||||
|
maint: remove Local Variables: indent-tabs-mode: nil from all sources
|
||||||
|
* src/getlimits.c: Likewise.
|
||||||
|
* src/group-list.c: Likewise.
|
||||||
|
* src/groups.c: Likewise.
|
||||||
|
* src/mktemp.c: Likewise.
|
||||||
|
* src/setuidgid.c: Likewise.
|
||||||
|
* src/stdbuf.c: Likewise.
|
||||||
|
* src/timeout.c: Likewise.
|
||||||
|
* src/truncate.c: Likewise.
|
||||||
|
* gl/lib/mbsalign.c: Likewise.
|
||||||
|
* tests/test-lib.sh: Likewise.
|
||||||
|
* bootstrap: Likewise.
|
||||||
|
* README-hacking: Likewise.
|
||||||
|
|
||||||
|
doc: HACKING: mention the new space-only indentation policy
|
||||||
|
|
||||||
|
maint: teach "make syntax-check" the space-only indentation rule
|
||||||
|
* cfg.mk (sc_prohibit_tab_based_indentation): New rule.
|
||||||
|
* .x-sc_prohibit_tab_based_indentation: New file.
|
||||||
|
* Makefile.am (syntax_check_exceptions): Add file,
|
||||||
|
.x-sc_prohibit_tab_based_indentation.
|
||||||
|
|
||||||
|
global: convert indentation-TABs to spaces
|
||||||
|
Transformed via this shell code:
|
||||||
|
t=$'\t'
|
||||||
|
git ls-files \
|
||||||
|
| grep -vE '(^|/)((GNU)?[Mm]akefile|ChangeLog)|\.(am|mk)$' \
|
||||||
|
| grep -vE 'tests/pr/|help2man' \
|
||||||
|
| xargs grep -lE "^ *$t" \
|
||||||
|
| xargs perl -MText::Tabs -ni -le \
|
||||||
|
'$m=/^( *\t[ \t]*)(.*)/; print $m ? expand($1) . $2 : $_'
|
||||||
|
|
||||||
|
2009-08-24 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
cp: ignore obscure failure to preserve symlink time stamps,
|
||||||
|
...when run on a kernel older than what was implied by headers and
|
||||||
|
libraries tested at configure time.
|
||||||
|
* src/copy.c (utimens_symlink): Ignore failure when errno == ENOSYS.
|
||||||
|
* NEWS (Bug fixes): Mention it.
|
||||||
|
Reported by Todd Zullinger and Kamil Dudka.
|
||||||
|
Details in this thread:
|
||||||
|
http://thread.gmane.org/gmane.linux.redhat.fedora.devel/119834
|
||||||
|
|
||||||
|
2009-08-23 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
tests: skip (don't fail) a cp test, upon mount-related failure
|
||||||
|
* tests/cp/cp-mv-enotsup-xattr: Upon a set-up failiure, rather than
|
||||||
|
failing the test with a "framework failure" diagnostic, just skip it.
|
||||||
|
Russell Whitaker reported that this test failed on slackware.
|
||||||
|
|
||||||
|
build: update from *public* gnulib
|
||||||
|
* gnulib: Update submodule to latest.
|
||||||
|
Kamil Dudka reported that bootstrap was broken.
|
||||||
|
|
||||||
|
2009-08-22 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
build: update from gnulib
|
||||||
|
* gnulib: Update submodule to latest.
|
||||||
|
|
||||||
2009-08-20 Jim Meyering <meyering@redhat.com>
|
2009-08-20 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
post-release administrivia
|
||||||
|
* NEWS: Add header line for next release.
|
||||||
|
* .prev-version: Record previous version.
|
||||||
|
* cfg.mk (old_NEWS_hash): Auto-update.
|
||||||
|
|
||||||
version 7.5
|
version 7.5
|
||||||
* NEWS: Record release date.
|
* NEWS: Record release date.
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ syntax_check_exceptions = \
|
||||||
.x-sc_prohibit_atoi_atof \
|
.x-sc_prohibit_atoi_atof \
|
||||||
.x-sc_prohibit_stat_st_blocks \
|
.x-sc_prohibit_stat_st_blocks \
|
||||||
.x-sc_prohibit_strcmp \
|
.x-sc_prohibit_strcmp \
|
||||||
|
.x-sc_prohibit_tab_based_indentation \
|
||||||
.x-sc_require_config_h \
|
.x-sc_require_config_h \
|
||||||
.x-sc_require_config_h_first \
|
.x-sc_require_config_h_first \
|
||||||
.x-sc_space_tab \
|
.x-sc_space_tab \
|
||||||
|
@ -97,20 +98,20 @@ rm_subst = \
|
||||||
|
|
||||||
BUILT_SOURCES = .version
|
BUILT_SOURCES = .version
|
||||||
.version:
|
.version:
|
||||||
echo $(VERSION) > $@-t && mv $@-t $@
|
$(AM_V_GEN)echo $(VERSION) > $@-t && mv $@-t $@
|
||||||
|
|
||||||
# Arrange so that .tarball-version appears only in the distribution
|
# Arrange so that .tarball-version appears only in the distribution
|
||||||
# tarball, and never in a checked-out repository.
|
# tarball, and never in a checked-out repository.
|
||||||
# The perl substitution is to change some key uses of "rm" to "/bin/rm".
|
# The perl substitution is to change some key uses of "rm" to "/bin/rm".
|
||||||
# See the rm_subst comment for details.
|
# See the rm_subst comment for details.
|
||||||
dist-hook: gen-ChangeLog
|
dist-hook: gen-ChangeLog
|
||||||
echo $(VERSION) > $(distdir)/.tarball-version
|
$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
|
||||||
perl -pi -e '$(rm_subst)' $(distdir)/src/Makefile.in
|
$(AM_V_at)perl -pi -e '$(rm_subst)' $(distdir)/src/Makefile.in
|
||||||
|
|
||||||
gen_start_date = 2008-02-08
|
gen_start_date = 2008-02-08
|
||||||
.PHONY: gen-ChangeLog
|
.PHONY: gen-ChangeLog
|
||||||
gen-ChangeLog:
|
gen-ChangeLog:
|
||||||
if test -d .git; then \
|
$(AM_V_GEN)if test -d .git; then \
|
||||||
$(top_srcdir)/build-aux/gitlog-to-changelog \
|
$(top_srcdir)/build-aux/gitlog-to-changelog \
|
||||||
--since=$(gen_start_date) > $(distdir)/cl-t; \
|
--since=$(gen_start_date) > $(distdir)/cl-t; \
|
||||||
rm -f $(distdir)/ChangeLog; \
|
rm -f $(distdir)/ChangeLog; \
|
||||||
|
@ -120,11 +121,12 @@ gen-ChangeLog:
|
||||||
ALL_RECURSIVE_TARGETS += distcheck-hook
|
ALL_RECURSIVE_TARGETS += distcheck-hook
|
||||||
distcheck-hook: check-ls-dircolors
|
distcheck-hook: check-ls-dircolors
|
||||||
$(MAKE) my-distcheck
|
$(MAKE) my-distcheck
|
||||||
|
$(MAKE) taint-distcheck
|
||||||
|
|
||||||
DISTCLEANFILES = VERSION
|
DISTCLEANFILES = VERSION
|
||||||
MAINTAINERCLEANFILES = THANKS-to-translators
|
MAINTAINERCLEANFILES = THANKS-to-translators
|
||||||
THANKS-to-translators: po/LINGUAS THANKStt.in
|
THANKS-to-translators: po/LINGUAS THANKStt.in
|
||||||
( \
|
$(AM_V_GEN)( \
|
||||||
cat $(srcdir)/THANKStt.in; \
|
cat $(srcdir)/THANKStt.in; \
|
||||||
for lang in `cat $(srcdir)/po/LINGUAS`; do \
|
for lang in `cat $(srcdir)/po/LINGUAS`; do \
|
||||||
echo http://translationproject.org/team/$$lang.html; \
|
echo http://translationproject.org/team/$$lang.html; \
|
||||||
|
@ -135,7 +137,7 @@ THANKS-to-translators: po/LINGUAS THANKStt.in
|
||||||
# remain in sync.
|
# remain in sync.
|
||||||
.PHONY: check-ls-dircolors
|
.PHONY: check-ls-dircolors
|
||||||
check-ls-dircolors:
|
check-ls-dircolors:
|
||||||
dc=$$(sed -n '/static.*ls_codes\[/,/};'/p \
|
$(AM_V_GEN)dc=$$(sed -n '/static.*ls_codes\[/,/};'/p \
|
||||||
$(srcdir)/src/dircolors.c \
|
$(srcdir)/src/dircolors.c \
|
||||||
|sed -n '/^ *"/p'|tr , '\n'|sed 's/^ *//' \
|
|sed -n '/^ *"/p'|tr , '\n'|sed 's/^ *//' \
|
||||||
|sed -n 's/^"\(..\)"/\1/p'|sort -u); \
|
|sed -n 's/^"\(..\)"/\1/p'|sort -u); \
|
||||||
|
|
|
@ -76,22 +76,23 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
|
||||||
$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
|
$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
|
||||||
$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/cycle-check.m4 \
|
$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/cycle-check.m4 \
|
||||||
$(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/d-type.m4 \
|
$(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/d-type.m4 \
|
||||||
$(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \
|
$(top_srcdir)/m4/dirent-safer.m4 $(top_srcdir)/m4/dirent_h.m4 \
|
||||||
$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dos.m4 \
|
$(top_srcdir)/m4/dirfd.m4 $(top_srcdir)/m4/dirname.m4 \
|
||||||
$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
|
$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \
|
||||||
$(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
|
$(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eealloc.m4 \
|
||||||
$(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
|
$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
|
||||||
$(top_srcdir)/m4/euidaccess-stat.m4 \
|
$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/euidaccess-stat.m4 \
|
||||||
$(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/exclude.m4 \
|
$(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/exclude.m4 \
|
||||||
$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/exponentd.m4 \
|
$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/exponentd.m4 \
|
||||||
$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
|
$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
|
||||||
$(top_srcdir)/m4/extensions.m4 $(top_srcdir)/m4/fchdir.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/fclose.m4 $(top_srcdir)/m4/fcntl-safer.m4 \
|
||||||
$(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fd-reopen.m4 \
|
$(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fd-reopen.m4 \
|
||||||
$(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/file-type.m4 \
|
$(top_srcdir)/m4/fdopendir.m4 $(top_srcdir)/m4/fflush.m4 \
|
||||||
$(top_srcdir)/m4/fileblocks.m4 $(top_srcdir)/m4/filemode.m4 \
|
$(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fileblocks.m4 \
|
||||||
$(top_srcdir)/m4/filenamecat.m4 $(top_srcdir)/m4/flexmember.m4 \
|
$(top_srcdir)/m4/filemode.m4 $(top_srcdir)/m4/filenamecat.m4 \
|
||||||
$(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fnmatch.m4 \
|
$(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \
|
||||||
|
$(top_srcdir)/m4/fnmatch.m4 $(top_srcdir)/m4/fopen.m4 \
|
||||||
$(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \
|
$(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \
|
||||||
$(top_srcdir)/m4/fprintftime.m4 $(top_srcdir)/m4/fpurge.m4 \
|
$(top_srcdir)/m4/fprintftime.m4 $(top_srcdir)/m4/fpurge.m4 \
|
||||||
$(top_srcdir)/m4/freading.m4 $(top_srcdir)/m4/frexp.m4 \
|
$(top_srcdir)/m4/freading.m4 $(top_srcdir)/m4/frexp.m4 \
|
||||||
|
@ -133,37 +134,38 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
|
||||||
$(top_srcdir)/m4/lib-check.m4 $(top_srcdir)/m4/lib-ignore.m4 \
|
$(top_srcdir)/m4/lib-check.m4 $(top_srcdir)/m4/lib-ignore.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/link-follow.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/link-follow.m4 \
|
||||||
$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
|
$(top_srcdir)/m4/link.m4 $(top_srcdir)/m4/localcharset.m4 \
|
||||||
$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-tr.m4 \
|
$(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
|
||||||
$(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/long-options.m4 \
|
$(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
|
||||||
$(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ls-mntd-fs.m4 \
|
$(top_srcdir)/m4/long-options.m4 $(top_srcdir)/m4/longlong.m4 \
|
||||||
$(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
|
$(top_srcdir)/m4/ls-mntd-fs.m4 $(top_srcdir)/m4/lseek.m4 \
|
||||||
$(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
|
$(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \
|
||||||
$(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/math_h.m4 \
|
$(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \
|
||||||
$(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \
|
$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
|
||||||
$(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \
|
$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrlen.m4 \
|
||||||
$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbsrtowcs.m4 \
|
$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \
|
||||||
$(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbswidth.m4 \
|
$(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \
|
||||||
$(top_srcdir)/m4/md5.m4 $(top_srcdir)/m4/memcasecmp.m4 \
|
$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/md5.m4 \
|
||||||
$(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/memcmp.m4 \
|
$(top_srcdir)/m4/memcasecmp.m4 $(top_srcdir)/m4/memchr.m4 \
|
||||||
$(top_srcdir)/m4/memcoll.m4 $(top_srcdir)/m4/memcpy.m4 \
|
$(top_srcdir)/m4/memcmp.m4 $(top_srcdir)/m4/memcoll.m4 \
|
||||||
$(top_srcdir)/m4/memmove.m4 $(top_srcdir)/m4/mempcpy.m4 \
|
$(top_srcdir)/m4/memcpy.m4 $(top_srcdir)/m4/memmove.m4 \
|
||||||
$(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/memset.m4 \
|
$(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/memrchr.m4 \
|
||||||
$(top_srcdir)/m4/memxfrm.m4 $(top_srcdir)/m4/mgetgroups.m4 \
|
$(top_srcdir)/m4/memset.m4 $(top_srcdir)/m4/memxfrm.m4 \
|
||||||
$(top_srcdir)/m4/mkancesdirs.m4 $(top_srcdir)/m4/mkdir-p.m4 \
|
$(top_srcdir)/m4/mgetgroups.m4 $(top_srcdir)/m4/mkancesdirs.m4 \
|
||||||
$(top_srcdir)/m4/mkdir-slash.m4 $(top_srcdir)/m4/mkstemp.m4 \
|
$(top_srcdir)/m4/mkdir-p.m4 $(top_srcdir)/m4/mkdir-slash.m4 \
|
||||||
$(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \
|
$(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \
|
||||||
$(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/modechange.m4 \
|
$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
|
||||||
$(top_srcdir)/m4/mountlist.m4 $(top_srcdir)/m4/mpsort.m4 \
|
$(top_srcdir)/m4/modechange.m4 $(top_srcdir)/m4/mountlist.m4 \
|
||||||
$(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nanosleep.m4 \
|
$(top_srcdir)/m4/mpsort.m4 $(top_srcdir)/m4/multiarch.m4 \
|
||||||
$(top_srcdir)/m4/netdb_h.m4 $(top_srcdir)/m4/netinet_in_h.m4 \
|
$(top_srcdir)/m4/nanosleep.m4 $(top_srcdir)/m4/netdb_h.m4 \
|
||||||
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
|
$(top_srcdir)/m4/netinet_in_h.m4 $(top_srcdir)/m4/nls.m4 \
|
||||||
$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/openat.m4 \
|
$(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/open.m4 \
|
||||||
$(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perl.m4 \
|
$(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/pathmax.m4 \
|
||||||
$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/physmem.m4 \
|
$(top_srcdir)/m4/perl.m4 $(top_srcdir)/m4/perror.m4 \
|
||||||
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \
|
$(top_srcdir)/m4/physmem.m4 $(top_srcdir)/m4/po.m4 \
|
||||||
$(top_srcdir)/m4/posixtm.m4 $(top_srcdir)/m4/posixver.m4 \
|
$(top_srcdir)/m4/posix-shell.m4 $(top_srcdir)/m4/posixtm.m4 \
|
||||||
$(top_srcdir)/m4/prereq.m4 $(top_srcdir)/m4/printf-frexp.m4 \
|
$(top_srcdir)/m4/posixver.m4 $(top_srcdir)/m4/prereq.m4 \
|
||||||
|
$(top_srcdir)/m4/printf-frexp.m4 \
|
||||||
$(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \
|
$(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \
|
||||||
$(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
|
$(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
|
||||||
$(top_srcdir)/m4/putenv.m4 $(top_srcdir)/m4/quote.m4 \
|
$(top_srcdir)/m4/putenv.m4 $(top_srcdir)/m4/quote.m4 \
|
||||||
|
@ -352,6 +354,7 @@ GLIBC21 = @GLIBC21@
|
||||||
GMSGFMT = @GMSGFMT@
|
GMSGFMT = @GMSGFMT@
|
||||||
GMSGFMT_015 = @GMSGFMT_015@
|
GMSGFMT_015 = @GMSGFMT_015@
|
||||||
GNULIB_ACCEPT = @GNULIB_ACCEPT@
|
GNULIB_ACCEPT = @GNULIB_ACCEPT@
|
||||||
|
GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@
|
||||||
GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
|
GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
|
||||||
GNULIB_ATOLL = @GNULIB_ATOLL@
|
GNULIB_ATOLL = @GNULIB_ATOLL@
|
||||||
GNULIB_BIND = @GNULIB_BIND@
|
GNULIB_BIND = @GNULIB_BIND@
|
||||||
|
@ -365,10 +368,15 @@ GNULIB_CONNECT = @GNULIB_CONNECT@
|
||||||
GNULIB_DIRFD = @GNULIB_DIRFD@
|
GNULIB_DIRFD = @GNULIB_DIRFD@
|
||||||
GNULIB_DPRINTF = @GNULIB_DPRINTF@
|
GNULIB_DPRINTF = @GNULIB_DPRINTF@
|
||||||
GNULIB_DUP2 = @GNULIB_DUP2@
|
GNULIB_DUP2 = @GNULIB_DUP2@
|
||||||
|
GNULIB_DUP3 = @GNULIB_DUP3@
|
||||||
GNULIB_ENVIRON = @GNULIB_ENVIRON@
|
GNULIB_ENVIRON = @GNULIB_ENVIRON@
|
||||||
GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
|
GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
|
||||||
|
GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
|
||||||
GNULIB_FCHDIR = @GNULIB_FCHDIR@
|
GNULIB_FCHDIR = @GNULIB_FCHDIR@
|
||||||
|
GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
|
||||||
|
GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
|
||||||
GNULIB_FCLOSE = @GNULIB_FCLOSE@
|
GNULIB_FCLOSE = @GNULIB_FCLOSE@
|
||||||
|
GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
|
||||||
GNULIB_FFLUSH = @GNULIB_FFLUSH@
|
GNULIB_FFLUSH = @GNULIB_FFLUSH@
|
||||||
GNULIB_FLOORF = @GNULIB_FLOORF@
|
GNULIB_FLOORF = @GNULIB_FLOORF@
|
||||||
GNULIB_FLOORL = @GNULIB_FLOORL@
|
GNULIB_FLOORL = @GNULIB_FLOORL@
|
||||||
|
@ -383,6 +391,7 @@ GNULIB_FREXP = @GNULIB_FREXP@
|
||||||
GNULIB_FREXPL = @GNULIB_FREXPL@
|
GNULIB_FREXPL = @GNULIB_FREXPL@
|
||||||
GNULIB_FSEEK = @GNULIB_FSEEK@
|
GNULIB_FSEEK = @GNULIB_FSEEK@
|
||||||
GNULIB_FSEEKO = @GNULIB_FSEEKO@
|
GNULIB_FSEEKO = @GNULIB_FSEEKO@
|
||||||
|
GNULIB_FSTATAT = @GNULIB_FSTATAT@
|
||||||
GNULIB_FSYNC = @GNULIB_FSYNC@
|
GNULIB_FSYNC = @GNULIB_FSYNC@
|
||||||
GNULIB_FTELL = @GNULIB_FTELL@
|
GNULIB_FTELL = @GNULIB_FTELL@
|
||||||
GNULIB_FTELLO = @GNULIB_FTELLO@
|
GNULIB_FTELLO = @GNULIB_FTELLO@
|
||||||
|
@ -446,12 +455,19 @@ GNULIB_MEMCHR = @GNULIB_MEMCHR@
|
||||||
GNULIB_MEMMEM = @GNULIB_MEMMEM@
|
GNULIB_MEMMEM = @GNULIB_MEMMEM@
|
||||||
GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
|
GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
|
||||||
GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
|
GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
|
||||||
|
GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
|
||||||
GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
|
GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
|
||||||
|
GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
|
||||||
|
GNULIB_MKNODAT = @GNULIB_MKNODAT@
|
||||||
|
GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
|
||||||
GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
|
GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
|
||||||
GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
|
GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
|
||||||
GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
|
GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
|
||||||
GNULIB_OPEN = @GNULIB_OPEN@
|
GNULIB_OPEN = @GNULIB_OPEN@
|
||||||
|
GNULIB_OPENAT = @GNULIB_OPENAT@
|
||||||
GNULIB_PERROR = @GNULIB_PERROR@
|
GNULIB_PERROR = @GNULIB_PERROR@
|
||||||
|
GNULIB_PIPE2 = @GNULIB_PIPE2@
|
||||||
|
GNULIB_POPEN = @GNULIB_POPEN@
|
||||||
GNULIB_PRINTF = @GNULIB_PRINTF@
|
GNULIB_PRINTF = @GNULIB_PRINTF@
|
||||||
GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
|
GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
|
||||||
GNULIB_PUTC = @GNULIB_PUTC@
|
GNULIB_PUTC = @GNULIB_PUTC@
|
||||||
|
@ -461,9 +477,11 @@ GNULIB_PUTS = @GNULIB_PUTS@
|
||||||
GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
|
GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
|
||||||
GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
|
GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
|
||||||
GNULIB_READLINK = @GNULIB_READLINK@
|
GNULIB_READLINK = @GNULIB_READLINK@
|
||||||
|
GNULIB_READLINKAT = @GNULIB_READLINKAT@
|
||||||
GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
|
GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
|
||||||
GNULIB_RECV = @GNULIB_RECV@
|
GNULIB_RECV = @GNULIB_RECV@
|
||||||
GNULIB_RECVFROM = @GNULIB_RECVFROM@
|
GNULIB_RECVFROM = @GNULIB_RECVFROM@
|
||||||
|
GNULIB_RENAME = @GNULIB_RENAME@
|
||||||
GNULIB_ROUND = @GNULIB_ROUND@
|
GNULIB_ROUND = @GNULIB_ROUND@
|
||||||
GNULIB_ROUNDF = @GNULIB_ROUNDF@
|
GNULIB_ROUNDF = @GNULIB_ROUNDF@
|
||||||
GNULIB_ROUNDL = @GNULIB_ROUNDL@
|
GNULIB_ROUNDL = @GNULIB_ROUNDL@
|
||||||
|
@ -503,11 +521,13 @@ GNULIB_STRTOLL = @GNULIB_STRTOLL@
|
||||||
GNULIB_STRTOULL = @GNULIB_STRTOULL@
|
GNULIB_STRTOULL = @GNULIB_STRTOULL@
|
||||||
GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
|
GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
|
||||||
GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
|
GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
|
||||||
|
GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
|
||||||
GNULIB_TRUNC = @GNULIB_TRUNC@
|
GNULIB_TRUNC = @GNULIB_TRUNC@
|
||||||
GNULIB_TRUNCF = @GNULIB_TRUNCF@
|
GNULIB_TRUNCF = @GNULIB_TRUNCF@
|
||||||
GNULIB_TRUNCL = @GNULIB_TRUNCL@
|
GNULIB_TRUNCL = @GNULIB_TRUNCL@
|
||||||
GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
|
GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
|
||||||
GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
|
GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
|
||||||
|
GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
|
||||||
GNULIB_UNSETENV = @GNULIB_UNSETENV@
|
GNULIB_UNSETENV = @GNULIB_UNSETENV@
|
||||||
GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
|
GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
|
||||||
GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
|
GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
|
||||||
|
@ -524,6 +544,7 @@ GNULIB_WCTOB = @GNULIB_WCTOB@
|
||||||
GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
|
GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
|
||||||
GNULIB_WRITE = @GNULIB_WRITE@
|
GNULIB_WRITE = @GNULIB_WRITE@
|
||||||
GREP = @GREP@
|
GREP = @GREP@
|
||||||
|
HAVE_ACCEPT4 = @HAVE_ACCEPT4@
|
||||||
HAVE_ALPHASORT = @HAVE_ALPHASORT@
|
HAVE_ALPHASORT = @HAVE_ALPHASORT@
|
||||||
HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
|
HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
|
||||||
HAVE_ATOLL = @HAVE_ATOLL@
|
HAVE_ATOLL = @HAVE_ATOLL@
|
||||||
|
@ -574,8 +595,14 @@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
|
||||||
HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
|
HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
|
||||||
HAVE_DPRINTF = @HAVE_DPRINTF@
|
HAVE_DPRINTF = @HAVE_DPRINTF@
|
||||||
HAVE_DUP2 = @HAVE_DUP2@
|
HAVE_DUP2 = @HAVE_DUP2@
|
||||||
|
HAVE_DUP3 = @HAVE_DUP3@
|
||||||
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
|
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
|
||||||
|
HAVE_FACCESSAT = @HAVE_FACCESSAT@
|
||||||
|
HAVE_FCHMODAT = @HAVE_FCHMODAT@
|
||||||
|
HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
|
||||||
|
HAVE_FDOPENDIR = @HAVE_FDOPENDIR@
|
||||||
HAVE_FSEEKO = @HAVE_FSEEKO@
|
HAVE_FSEEKO = @HAVE_FSEEKO@
|
||||||
|
HAVE_FSTATAT = @HAVE_FSTATAT@
|
||||||
HAVE_FSYNC = @HAVE_FSYNC@
|
HAVE_FSYNC = @HAVE_FSYNC@
|
||||||
HAVE_FTELLO = @HAVE_FTELLO@
|
HAVE_FTELLO = @HAVE_FTELLO@
|
||||||
HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
|
HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
|
||||||
|
@ -601,15 +628,22 @@ HAVE_MBSINIT = @HAVE_MBSINIT@
|
||||||
HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
|
HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
|
||||||
HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
|
HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
|
||||||
HAVE_MEMPCPY = @HAVE_MEMPCPY@
|
HAVE_MEMPCPY = @HAVE_MEMPCPY@
|
||||||
|
HAVE_MKDIRAT = @HAVE_MKDIRAT@
|
||||||
HAVE_MKDTEMP = @HAVE_MKDTEMP@
|
HAVE_MKDTEMP = @HAVE_MKDTEMP@
|
||||||
|
HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
|
||||||
|
HAVE_MKNODAT = @HAVE_MKNODAT@
|
||||||
|
HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
|
||||||
HAVE_NETDB_H = @HAVE_NETDB_H@
|
HAVE_NETDB_H = @HAVE_NETDB_H@
|
||||||
HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
|
HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
|
||||||
|
HAVE_OPENAT = @HAVE_OPENAT@
|
||||||
HAVE_OS_H = @HAVE_OS_H@
|
HAVE_OS_H = @HAVE_OS_H@
|
||||||
|
HAVE_PIPE2 = @HAVE_PIPE2@
|
||||||
HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
|
HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
|
||||||
HAVE_RANDOM_H = @HAVE_RANDOM_H@
|
HAVE_RANDOM_H = @HAVE_RANDOM_H@
|
||||||
HAVE_RANDOM_R = @HAVE_RANDOM_R@
|
HAVE_RANDOM_R = @HAVE_RANDOM_R@
|
||||||
HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
|
HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
|
||||||
HAVE_READLINK = @HAVE_READLINK@
|
HAVE_READLINK = @HAVE_READLINK@
|
||||||
|
HAVE_READLINKAT = @HAVE_READLINKAT@
|
||||||
HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
|
HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
|
||||||
HAVE_RPMATCH = @HAVE_RPMATCH@
|
HAVE_RPMATCH = @HAVE_RPMATCH@
|
||||||
HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
|
HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
|
||||||
|
@ -627,7 +661,6 @@ HAVE_STPCPY = @HAVE_STPCPY@
|
||||||
HAVE_STPNCPY = @HAVE_STPNCPY@
|
HAVE_STPNCPY = @HAVE_STPNCPY@
|
||||||
HAVE_STRCASESTR = @HAVE_STRCASESTR@
|
HAVE_STRCASESTR = @HAVE_STRCASESTR@
|
||||||
HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
|
HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
|
||||||
HAVE_STRNDUP = @HAVE_STRNDUP@
|
|
||||||
HAVE_STRPBRK = @HAVE_STRPBRK@
|
HAVE_STRPBRK = @HAVE_STRPBRK@
|
||||||
HAVE_STRSEP = @HAVE_STRSEP@
|
HAVE_STRSEP = @HAVE_STRSEP@
|
||||||
HAVE_STRTOD = @HAVE_STRTOD@
|
HAVE_STRTOD = @HAVE_STRTOD@
|
||||||
|
@ -639,6 +672,8 @@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
|
||||||
HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
|
HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
|
||||||
HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
|
HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
|
||||||
HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
|
HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
|
||||||
|
HAVE_SYMLINK = @HAVE_SYMLINK@
|
||||||
|
HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
|
||||||
HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
|
HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
|
||||||
HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
|
HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
|
||||||
HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
|
HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
|
||||||
|
@ -650,6 +685,7 @@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
|
||||||
HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
|
HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
|
||||||
HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
|
HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
|
||||||
HAVE_UNISTD_H = @HAVE_UNISTD_H@
|
HAVE_UNISTD_H = @HAVE_UNISTD_H@
|
||||||
|
HAVE_UNLINKAT = @HAVE_UNLINKAT@
|
||||||
HAVE_UNSETENV = @HAVE_UNSETENV@
|
HAVE_UNSETENV = @HAVE_UNSETENV@
|
||||||
HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
|
HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
|
||||||
HAVE_VASPRINTF = @HAVE_VASPRINTF@
|
HAVE_VASPRINTF = @HAVE_VASPRINTF@
|
||||||
|
@ -802,6 +838,7 @@ REPLACE_CLOSE = @REPLACE_CLOSE@
|
||||||
REPLACE_DPRINTF = @REPLACE_DPRINTF@
|
REPLACE_DPRINTF = @REPLACE_DPRINTF@
|
||||||
REPLACE_DUP2 = @REPLACE_DUP2@
|
REPLACE_DUP2 = @REPLACE_DUP2@
|
||||||
REPLACE_FCHDIR = @REPLACE_FCHDIR@
|
REPLACE_FCHDIR = @REPLACE_FCHDIR@
|
||||||
|
REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
|
||||||
REPLACE_FCLOSE = @REPLACE_FCLOSE@
|
REPLACE_FCLOSE = @REPLACE_FCLOSE@
|
||||||
REPLACE_FFLUSH = @REPLACE_FFLUSH@
|
REPLACE_FFLUSH = @REPLACE_FFLUSH@
|
||||||
REPLACE_FLOORF = @REPLACE_FLOORF@
|
REPLACE_FLOORF = @REPLACE_FLOORF@
|
||||||
|
@ -814,6 +851,7 @@ REPLACE_FREXP = @REPLACE_FREXP@
|
||||||
REPLACE_FREXPL = @REPLACE_FREXPL@
|
REPLACE_FREXPL = @REPLACE_FREXPL@
|
||||||
REPLACE_FSEEK = @REPLACE_FSEEK@
|
REPLACE_FSEEK = @REPLACE_FSEEK@
|
||||||
REPLACE_FSEEKO = @REPLACE_FSEEKO@
|
REPLACE_FSEEKO = @REPLACE_FSEEKO@
|
||||||
|
REPLACE_FSTATAT = @REPLACE_FSTATAT@
|
||||||
REPLACE_FTELL = @REPLACE_FTELL@
|
REPLACE_FTELL = @REPLACE_FTELL@
|
||||||
REPLACE_FTELLO = @REPLACE_FTELLO@
|
REPLACE_FTELLO = @REPLACE_FTELLO@
|
||||||
REPLACE_GETCWD = @REPLACE_GETCWD@
|
REPLACE_GETCWD = @REPLACE_GETCWD@
|
||||||
|
@ -830,6 +868,7 @@ REPLACE_ISNAN = @REPLACE_ISNAN@
|
||||||
REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
|
REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
|
||||||
REPLACE_LCHOWN = @REPLACE_LCHOWN@
|
REPLACE_LCHOWN = @REPLACE_LCHOWN@
|
||||||
REPLACE_LDEXPL = @REPLACE_LDEXPL@
|
REPLACE_LDEXPL = @REPLACE_LDEXPL@
|
||||||
|
REPLACE_LINK = @REPLACE_LINK@
|
||||||
REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
|
REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
|
||||||
REPLACE_LSEEK = @REPLACE_LSEEK@
|
REPLACE_LSEEK = @REPLACE_LSEEK@
|
||||||
REPLACE_LSTAT = @REPLACE_LSTAT@
|
REPLACE_LSTAT = @REPLACE_LSTAT@
|
||||||
|
@ -850,8 +889,10 @@ REPLACE_NULL = @REPLACE_NULL@
|
||||||
REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
|
REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
|
||||||
REPLACE_OPEN = @REPLACE_OPEN@
|
REPLACE_OPEN = @REPLACE_OPEN@
|
||||||
REPLACE_PERROR = @REPLACE_PERROR@
|
REPLACE_PERROR = @REPLACE_PERROR@
|
||||||
|
REPLACE_POPEN = @REPLACE_POPEN@
|
||||||
REPLACE_PRINTF = @REPLACE_PRINTF@
|
REPLACE_PRINTF = @REPLACE_PRINTF@
|
||||||
REPLACE_PUTENV = @REPLACE_PUTENV@
|
REPLACE_PUTENV = @REPLACE_PUTENV@
|
||||||
|
REPLACE_RENAME = @REPLACE_RENAME@
|
||||||
REPLACE_ROUND = @REPLACE_ROUND@
|
REPLACE_ROUND = @REPLACE_ROUND@
|
||||||
REPLACE_ROUNDF = @REPLACE_ROUNDF@
|
REPLACE_ROUNDF = @REPLACE_ROUNDF@
|
||||||
REPLACE_ROUNDL = @REPLACE_ROUNDL@
|
REPLACE_ROUNDL = @REPLACE_ROUNDL@
|
||||||
|
@ -864,10 +905,12 @@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
|
||||||
REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
|
REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
|
||||||
REPLACE_STRDUP = @REPLACE_STRDUP@
|
REPLACE_STRDUP = @REPLACE_STRDUP@
|
||||||
REPLACE_STRERROR = @REPLACE_STRERROR@
|
REPLACE_STRERROR = @REPLACE_STRERROR@
|
||||||
|
REPLACE_STRNDUP = @REPLACE_STRNDUP@
|
||||||
REPLACE_STRPTIME = @REPLACE_STRPTIME@
|
REPLACE_STRPTIME = @REPLACE_STRPTIME@
|
||||||
REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
|
REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
|
||||||
REPLACE_STRSTR = @REPLACE_STRSTR@
|
REPLACE_STRSTR = @REPLACE_STRSTR@
|
||||||
REPLACE_STRTOD = @REPLACE_STRTOD@
|
REPLACE_STRTOD = @REPLACE_STRTOD@
|
||||||
|
REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
|
||||||
REPLACE_TIMEGM = @REPLACE_TIMEGM@
|
REPLACE_TIMEGM = @REPLACE_TIMEGM@
|
||||||
REPLACE_TRUNCL = @REPLACE_TRUNCL@
|
REPLACE_TRUNCL = @REPLACE_TRUNCL@
|
||||||
REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
|
REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
|
||||||
|
@ -900,13 +943,13 @@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
|
||||||
SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
|
SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
|
||||||
SYS_SELECT_H = @SYS_SELECT_H@
|
SYS_SELECT_H = @SYS_SELECT_H@
|
||||||
SYS_SOCKET_H = @SYS_SOCKET_H@
|
SYS_SOCKET_H = @SYS_SOCKET_H@
|
||||||
SYS_STAT_H = @SYS_STAT_H@
|
|
||||||
SYS_TIME_H = @SYS_TIME_H@
|
SYS_TIME_H = @SYS_TIME_H@
|
||||||
SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
|
SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
|
||||||
TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
|
TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
|
||||||
U = @U@
|
U = @U@
|
||||||
UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
|
UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
|
||||||
UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_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 = @UNISTD_H_HAVE_WINSOCK2_H@
|
||||||
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
|
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
|
||||||
USE_ACL = @USE_ACL@
|
USE_ACL = @USE_ACL@
|
||||||
|
@ -1013,6 +1056,7 @@ syntax_check_exceptions = \
|
||||||
.x-sc_prohibit_atoi_atof \
|
.x-sc_prohibit_atoi_atof \
|
||||||
.x-sc_prohibit_stat_st_blocks \
|
.x-sc_prohibit_stat_st_blocks \
|
||||||
.x-sc_prohibit_strcmp \
|
.x-sc_prohibit_strcmp \
|
||||||
|
.x-sc_prohibit_tab_based_indentation \
|
||||||
.x-sc_require_config_h \
|
.x-sc_require_config_h \
|
||||||
.x-sc_require_config_h_first \
|
.x-sc_require_config_h_first \
|
||||||
.x-sc_space_tab \
|
.x-sc_space_tab \
|
||||||
|
@ -1534,18 +1578,18 @@ install-root:
|
||||||
check-root:
|
check-root:
|
||||||
cd tests && $(MAKE) $@ SUBDIRS=
|
cd tests && $(MAKE) $@ SUBDIRS=
|
||||||
.version:
|
.version:
|
||||||
echo $(VERSION) > $@-t && mv $@-t $@
|
$(AM_V_GEN)echo $(VERSION) > $@-t && mv $@-t $@
|
||||||
|
|
||||||
# Arrange so that .tarball-version appears only in the distribution
|
# Arrange so that .tarball-version appears only in the distribution
|
||||||
# tarball, and never in a checked-out repository.
|
# tarball, and never in a checked-out repository.
|
||||||
# The perl substitution is to change some key uses of "rm" to "/bin/rm".
|
# The perl substitution is to change some key uses of "rm" to "/bin/rm".
|
||||||
# See the rm_subst comment for details.
|
# See the rm_subst comment for details.
|
||||||
dist-hook: gen-ChangeLog
|
dist-hook: gen-ChangeLog
|
||||||
echo $(VERSION) > $(distdir)/.tarball-version
|
$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
|
||||||
perl -pi -e '$(rm_subst)' $(distdir)/src/Makefile.in
|
$(AM_V_at)perl -pi -e '$(rm_subst)' $(distdir)/src/Makefile.in
|
||||||
.PHONY: gen-ChangeLog
|
.PHONY: gen-ChangeLog
|
||||||
gen-ChangeLog:
|
gen-ChangeLog:
|
||||||
if test -d .git; then \
|
$(AM_V_GEN)if test -d .git; then \
|
||||||
$(top_srcdir)/build-aux/gitlog-to-changelog \
|
$(top_srcdir)/build-aux/gitlog-to-changelog \
|
||||||
--since=$(gen_start_date) > $(distdir)/cl-t; \
|
--since=$(gen_start_date) > $(distdir)/cl-t; \
|
||||||
rm -f $(distdir)/ChangeLog; \
|
rm -f $(distdir)/ChangeLog; \
|
||||||
|
@ -1553,8 +1597,9 @@ gen-ChangeLog:
|
||||||
fi
|
fi
|
||||||
distcheck-hook: check-ls-dircolors
|
distcheck-hook: check-ls-dircolors
|
||||||
$(MAKE) my-distcheck
|
$(MAKE) my-distcheck
|
||||||
|
$(MAKE) taint-distcheck
|
||||||
THANKS-to-translators: po/LINGUAS THANKStt.in
|
THANKS-to-translators: po/LINGUAS THANKStt.in
|
||||||
( \
|
$(AM_V_GEN)( \
|
||||||
cat $(srcdir)/THANKStt.in; \
|
cat $(srcdir)/THANKStt.in; \
|
||||||
for lang in `cat $(srcdir)/po/LINGUAS`; do \
|
for lang in `cat $(srcdir)/po/LINGUAS`; do \
|
||||||
echo http://translationproject.org/team/$$lang.html; \
|
echo http://translationproject.org/team/$$lang.html; \
|
||||||
|
@ -1565,7 +1610,7 @@ THANKS-to-translators: po/LINGUAS THANKStt.in
|
||||||
# remain in sync.
|
# remain in sync.
|
||||||
.PHONY: check-ls-dircolors
|
.PHONY: check-ls-dircolors
|
||||||
check-ls-dircolors:
|
check-ls-dircolors:
|
||||||
dc=$$(sed -n '/static.*ls_codes\[/,/};'/p \
|
$(AM_V_GEN)dc=$$(sed -n '/static.*ls_codes\[/,/};'/p \
|
||||||
$(srcdir)/src/dircolors.c \
|
$(srcdir)/src/dircolors.c \
|
||||||
|sed -n '/^ *"/p'|tr , '\n'|sed 's/^ *//' \
|
|sed -n '/^ *"/p'|tr , '\n'|sed 's/^ *//' \
|
||||||
|sed -n 's/^"\(..\)"/\1/p'|sort -u); \
|
|sed -n 's/^"\(..\)"/\1/p'|sort -u); \
|
||||||
|
|
|
@ -1,5 +1,72 @@
|
||||||
GNU coreutils NEWS -*- outline -*-
|
GNU coreutils NEWS -*- outline -*-
|
||||||
|
|
||||||
|
* Noteworthy changes in release 7.6 (2009-09-11) [stable]
|
||||||
|
|
||||||
|
** Bug fixes
|
||||||
|
|
||||||
|
cp, mv now ignore failure to preserve a symlink time stamp, when it is
|
||||||
|
due to their running on a kernel older than what was implied by headers
|
||||||
|
and libraries tested at configure time.
|
||||||
|
[bug introduced in coreutils-7.5]
|
||||||
|
|
||||||
|
cp --reflink --preserve now preserves attributes when cloning a file.
|
||||||
|
[bug introduced in coreutils-7.5]
|
||||||
|
|
||||||
|
cp --preserve=xattr no longer leaks resources on each preservation failure.
|
||||||
|
[bug introduced in coreutils-7.1]
|
||||||
|
|
||||||
|
dd now exits with non-zero status when it encounters a write error while
|
||||||
|
printing a summary to stderr.
|
||||||
|
[bug introduced in coreutils-6.11]
|
||||||
|
|
||||||
|
dd cbs=N conv=unblock would fail to print a final newline when the size
|
||||||
|
of the input was not a multiple of N bytes.
|
||||||
|
[the non-conforming behavior dates back to the initial implementation]
|
||||||
|
|
||||||
|
df no longer requires that each command-line argument be readable
|
||||||
|
[bug introduced in coreutils-7.3]
|
||||||
|
|
||||||
|
ls -i now prints consistent inode numbers also for mount points.
|
||||||
|
This makes ls -i DIR less efficient on systems with dysfunctional readdir,
|
||||||
|
because ls must stat every file in order to obtain a guaranteed-valid
|
||||||
|
inode number. [bug introduced in coreutils-6.0]
|
||||||
|
|
||||||
|
tail -f (inotify-enabled) now flushes any initial output before blocking.
|
||||||
|
Before, this would print nothing and wait: stdbuf -o 4K tail -f /etc/passwd
|
||||||
|
Note that this bug affects tail -f only when its standard output is buffered,
|
||||||
|
which is relatively unusual.
|
||||||
|
[bug introduced in coreutils-7.5]
|
||||||
|
|
||||||
|
tail -f once again works with standard input. inotify-enabled tail -f
|
||||||
|
would fail when operating on a nameless stdin. I.e., tail -f < /etc/passwd
|
||||||
|
would say "tail: cannot watch `-': No such file or directory", yet the
|
||||||
|
relatively baroque tail -f /dev/stdin < /etc/passwd would work. Now, the
|
||||||
|
offending usage causes tail to revert to its conventional sleep-based
|
||||||
|
(i.e., not inotify-based) implementation.
|
||||||
|
[bug introduced in coreutils-7.5]
|
||||||
|
|
||||||
|
** Portability
|
||||||
|
|
||||||
|
ln, link: link f z/ would mistakenly succeed on Solaris 10, given an
|
||||||
|
existing file, f, and nothing named "z". ln -T f z/ has the same problem.
|
||||||
|
Each would mistakenly create "z" as a link to "f". Now, even on such a
|
||||||
|
system, each command reports the error, e.g.,
|
||||||
|
link: cannot create link `z/' to `f': Not a directory
|
||||||
|
|
||||||
|
** New features
|
||||||
|
|
||||||
|
cp --reflink accepts a new "auto" parameter which falls back to
|
||||||
|
a standard copy if creating a copy-on-write clone is not possible.
|
||||||
|
|
||||||
|
** Changes in behavior
|
||||||
|
|
||||||
|
tail -f now ignores "-" when stdin is a pipe or FIFO.
|
||||||
|
tail-with-no-args now ignores -f unconditionally when stdin is a pipe or FIFO.
|
||||||
|
Before, it would ignore -f only when no file argument was specified,
|
||||||
|
and then only when POSIXLY_CORRECT was set. Now, :|tail -f - terminates
|
||||||
|
immediately. Before, it would block indefinitely.
|
||||||
|
|
||||||
|
|
||||||
* Noteworthy changes in release 7.5 (2009-08-20) [stable]
|
* Noteworthy changes in release 7.5 (2009-08-20) [stable]
|
||||||
|
|
||||||
** Bug fixes
|
** Bug fixes
|
||||||
|
|
|
@ -78,6 +78,7 @@ Bernhard Rosenkraenzer bero@redhat.de
|
||||||
Bernhard Voelker bernhard.voelker@siemens-enterprise.com
|
Bernhard Voelker bernhard.voelker@siemens-enterprise.com
|
||||||
Bert Deknuydt Bert.Deknuydt@esat.kuleuven.ac.be
|
Bert Deknuydt Bert.Deknuydt@esat.kuleuven.ac.be
|
||||||
Bert Wesarg bert.wesarg@googlemail.com
|
Bert Wesarg bert.wesarg@googlemail.com
|
||||||
|
Bill Brelsford wb@k2di.net
|
||||||
Bill Peters peters@gaffel.as.arizona.edu
|
Bill Peters peters@gaffel.as.arizona.edu
|
||||||
Bjorn Helgaas helgaas@rsn.hp.com
|
Bjorn Helgaas helgaas@rsn.hp.com
|
||||||
Bob McCracken kerouac@ravenet.com
|
Bob McCracken kerouac@ravenet.com
|
||||||
|
@ -185,6 +186,7 @@ Felix Rauch Valenti frauch@cse.unsw.edu.au
|
||||||
Ferdinand fw@scenic.mine.nu
|
Ferdinand fw@scenic.mine.nu
|
||||||
Fletcher Mattox fletcher@cs.utexas.edu
|
Fletcher Mattox fletcher@cs.utexas.edu
|
||||||
Florent Bayle florent@sarcelle.net
|
Florent Bayle florent@sarcelle.net
|
||||||
|
Florian Schlichting fschlich@cis.fu-berlin.de
|
||||||
Florin Iucha fiucha@hsys.mic.ro
|
Florin Iucha fiucha@hsys.mic.ro
|
||||||
Francesco Montorsi fr_m@hotmail.com
|
Francesco Montorsi fr_m@hotmail.com
|
||||||
François Pinard pinard@iro.umontreal.ca
|
François Pinard pinard@iro.umontreal.ca
|
||||||
|
@ -385,6 +387,7 @@ Matthew Swift swift@alum.mit.edu
|
||||||
Matthew Woehlke mw_triad@users.sourceforge.net
|
Matthew Woehlke mw_triad@users.sourceforge.net
|
||||||
Matthias Urlichs smurf@noris.de
|
Matthias Urlichs smurf@noris.de
|
||||||
Matti Aarnio matti.aarnio@zmailer.org
|
Matti Aarnio matti.aarnio@zmailer.org
|
||||||
|
Mathias Brodala info@noctus.net
|
||||||
Mattias Wadenstein maswan@acc.umu.se
|
Mattias Wadenstein maswan@acc.umu.se
|
||||||
Max Chang maxchang@ucla.edu
|
Max Chang maxchang@ucla.edu
|
||||||
Meelis Roos mroos@tartu.cyber.ee
|
Meelis Roos mroos@tartu.cyber.ee
|
||||||
|
@ -439,6 +442,7 @@ Olatunji Oluwabukunmi Ruwase tjruwase@stanford.edu
|
||||||
Olav Morkrid olav@funcom.com
|
Olav Morkrid olav@funcom.com
|
||||||
Ole Laursen olau@hardworking.dk
|
Ole Laursen olau@hardworking.dk
|
||||||
Oliver Kiddle okiddle@yahoo.co.uk
|
Oliver Kiddle okiddle@yahoo.co.uk
|
||||||
|
Olivier Fourdan ofourdan@redhat.com
|
||||||
Ørn E. Hansen oehansen@daimi.aau.dk
|
Ørn E. Hansen oehansen@daimi.aau.dk
|
||||||
Oskar Liljeblad osk@hem.passagen.se
|
Oskar Liljeblad osk@hem.passagen.se
|
||||||
Otavio Salvador otavio@ossystems.com.br
|
Otavio Salvador otavio@ossystems.com.br
|
||||||
|
@ -486,6 +490,7 @@ Ralph Loader loader@maths.ox.ac.uk
|
||||||
Raul Miller moth@magenta.com
|
Raul Miller moth@magenta.com
|
||||||
Raúl Núñez de Arenas Coronado raul@pleyades.net
|
Raúl Núñez de Arenas Coronado raul@pleyades.net
|
||||||
Reuben Thomas rrt@sc3d.org
|
Reuben Thomas rrt@sc3d.org
|
||||||
|
Ren Yang ryang@redhat.com
|
||||||
Richard A Downing richard.downing@bcs.org.uk
|
Richard A Downing richard.downing@bcs.org.uk
|
||||||
Richard Braakman dark@xs4all.nl
|
Richard Braakman dark@xs4all.nl
|
||||||
Richard Dawe rich@phekda.freeserve.co.uk
|
Richard Dawe rich@phekda.freeserve.co.uk
|
||||||
|
@ -560,6 +565,7 @@ Tim Waugh twaugh@redhat
|
||||||
Tobias Stoeckmann tobias@bugol.de
|
Tobias Stoeckmann tobias@bugol.de
|
||||||
Toby Peterson toby@opendarwin.org
|
Toby Peterson toby@opendarwin.org
|
||||||
Todd A. Jacobs tjacobs@codegnome.org
|
Todd A. Jacobs tjacobs@codegnome.org
|
||||||
|
Tom Fitzhenry tom@tom-fitzhenry.me.uk
|
||||||
Tom Haynes thomas@netapp.com
|
Tom Haynes thomas@netapp.com
|
||||||
Tom Quinn trq@dionysos.thphys.ox.ac.uk
|
Tom Quinn trq@dionysos.thphys.ox.ac.uk
|
||||||
Tomas Pospisek tpo@sourcepole.ch
|
Tomas Pospisek tpo@sourcepole.ch
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
|
|
||||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||||
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64.16-4cdf58],,
|
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64.27-5b5d],,
|
||||||
[m4_warning([this file was generated for autoconf 2.64.16-4cdf58.
|
[m4_warning([this file was generated for autoconf 2.64.27-5b5d.
|
||||||
You have another version of autoconf. It may work, but is not guaranteed to.
|
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.
|
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'.])])
|
To do so, use the procedure documented by the package, typically `autoreconf'.])])
|
||||||
|
@ -804,22 +804,19 @@ AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES])
|
||||||
|
|
||||||
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
|
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008, 2009
|
||||||
# Free Software Foundation, Inc.
|
# Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
# with or without modifications, as long as this notice is preserved.
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
# serial 5
|
# serial 6
|
||||||
|
|
||||||
# AM_SANITY_CHECK
|
# AM_SANITY_CHECK
|
||||||
# ---------------
|
# ---------------
|
||||||
AC_DEFUN([AM_SANITY_CHECK],
|
AC_DEFUN([AM_SANITY_CHECK],
|
||||||
[AC_MSG_CHECKING([whether build environment is sane])
|
[AC_MSG_CHECKING([whether build environment is sane])
|
||||||
# Just in case
|
|
||||||
sleep 1
|
|
||||||
echo timestamp > conftest.file
|
|
||||||
# Reject unsafe characters in $srcdir or the absolute working directory
|
# Reject unsafe characters in $srcdir or the absolute working directory
|
||||||
# name. Accept space and tab only in the latter.
|
# name. Accept space and tab only in the latter.
|
||||||
am_lf='
|
am_lf='
|
||||||
|
@ -839,23 +836,30 @@ esac
|
||||||
# (eg FreeBSD returns the mod time of the symlink's containing
|
# (eg FreeBSD returns the mod time of the symlink's containing
|
||||||
# directory).
|
# directory).
|
||||||
if (
|
if (
|
||||||
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
|
for am_try in 1 2; do
|
||||||
if test "$[*]" = "X"; then
|
echo timestamp > conftest.file
|
||||||
# -L didn't work.
|
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
|
||||||
set X `ls -t "$srcdir/configure" conftest.file`
|
if test "$[*]" = "X"; then
|
||||||
fi
|
# -L didn't work.
|
||||||
rm -f conftest.file
|
set X `ls -t "$srcdir/configure" conftest.file`
|
||||||
if test "$[*]" != "X $srcdir/configure conftest.file" \
|
fi
|
||||||
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
|
rm -f conftest.file
|
||||||
|
if test "$[*]" != "X $srcdir/configure conftest.file" \
|
||||||
# If neither matched, then we have a broken ls. This can happen
|
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
|
||||||
# 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".
|
|
||||||
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
|
||||||
alias in your environment])
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
# If neither matched, then we have a broken ls. This can happen
|
||||||
|
# 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".
|
||||||
|
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||||
|
alias in your environment])
|
||||||
|
fi
|
||||||
|
if test "$[2]" = conftest.file || test $am_try -eq 2; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
# Just in case.
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
test "$[2]" = conftest.file
|
test "$[2]" = conftest.file
|
||||||
)
|
)
|
||||||
then
|
then
|
||||||
|
@ -1068,6 +1072,7 @@ m4_include([m4/config-h.m4])
|
||||||
m4_include([m4/cycle-check.m4])
|
m4_include([m4/cycle-check.m4])
|
||||||
m4_include([m4/d-ino.m4])
|
m4_include([m4/d-ino.m4])
|
||||||
m4_include([m4/d-type.m4])
|
m4_include([m4/d-type.m4])
|
||||||
|
m4_include([m4/dirent-safer.m4])
|
||||||
m4_include([m4/dirent_h.m4])
|
m4_include([m4/dirent_h.m4])
|
||||||
m4_include([m4/dirfd.m4])
|
m4_include([m4/dirfd.m4])
|
||||||
m4_include([m4/dirname.m4])
|
m4_include([m4/dirname.m4])
|
||||||
|
@ -1091,6 +1096,7 @@ m4_include([m4/fclose.m4])
|
||||||
m4_include([m4/fcntl-safer.m4])
|
m4_include([m4/fcntl-safer.m4])
|
||||||
m4_include([m4/fcntl_h.m4])
|
m4_include([m4/fcntl_h.m4])
|
||||||
m4_include([m4/fd-reopen.m4])
|
m4_include([m4/fd-reopen.m4])
|
||||||
|
m4_include([m4/fdopendir.m4])
|
||||||
m4_include([m4/fflush.m4])
|
m4_include([m4/fflush.m4])
|
||||||
m4_include([m4/file-type.m4])
|
m4_include([m4/file-type.m4])
|
||||||
m4_include([m4/fileblocks.m4])
|
m4_include([m4/fileblocks.m4])
|
||||||
|
@ -1099,6 +1105,7 @@ m4_include([m4/filenamecat.m4])
|
||||||
m4_include([m4/flexmember.m4])
|
m4_include([m4/flexmember.m4])
|
||||||
m4_include([m4/float_h.m4])
|
m4_include([m4/float_h.m4])
|
||||||
m4_include([m4/fnmatch.m4])
|
m4_include([m4/fnmatch.m4])
|
||||||
|
m4_include([m4/fopen.m4])
|
||||||
m4_include([m4/fpending.m4])
|
m4_include([m4/fpending.m4])
|
||||||
m4_include([m4/fpieee.m4])
|
m4_include([m4/fpieee.m4])
|
||||||
m4_include([m4/fprintftime.m4])
|
m4_include([m4/fprintftime.m4])
|
||||||
|
@ -1175,6 +1182,7 @@ m4_include([m4/lib-ld.m4])
|
||||||
m4_include([m4/lib-link.m4])
|
m4_include([m4/lib-link.m4])
|
||||||
m4_include([m4/lib-prefix.m4])
|
m4_include([m4/lib-prefix.m4])
|
||||||
m4_include([m4/link-follow.m4])
|
m4_include([m4/link-follow.m4])
|
||||||
|
m4_include([m4/link.m4])
|
||||||
m4_include([m4/localcharset.m4])
|
m4_include([m4/localcharset.m4])
|
||||||
m4_include([m4/locale-fr.m4])
|
m4_include([m4/locale-fr.m4])
|
||||||
m4_include([m4/locale-ja.m4])
|
m4_include([m4/locale-ja.m4])
|
||||||
|
|
|
@ -34,7 +34,7 @@ bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
|
||||||
bt2=${bt}2
|
bt2=${bt}2
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo >&2 "\
|
cat <<EOF
|
||||||
Usage: $0 [OPTION]...
|
Usage: $0 [OPTION]...
|
||||||
Bootstrap this package from the checked-out sources.
|
Bootstrap this package from the checked-out sources.
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
|
||||||
are honored.
|
are honored.
|
||||||
|
|
||||||
Running without arguments will suffice in most cases.
|
Running without arguments will suffice in most cases.
|
||||||
"
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
# Configuration.
|
# Configuration.
|
||||||
|
@ -148,6 +148,37 @@ copy=false
|
||||||
# on which version control system (if any) is used in the source directory.
|
# on which version control system (if any) is used in the source directory.
|
||||||
vc_ignore=auto
|
vc_ignore=auto
|
||||||
|
|
||||||
|
# find_tool ENVVAR NAMES...
|
||||||
|
# -------------------------
|
||||||
|
find_tool ()
|
||||||
|
{
|
||||||
|
# Find sha1sum, named gsha1sum on MacPorts.
|
||||||
|
find_tool_envvar=$1
|
||||||
|
shift
|
||||||
|
if eval test x"\$$find_tool_envvar" = x; then
|
||||||
|
for i
|
||||||
|
do
|
||||||
|
if ($i --version </dev/null) >/dev/null 2>&1; then
|
||||||
|
find_tool_res=$i
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if test x"$find_tool_res" = x; then
|
||||||
|
echo >&2 "$0: $find_tool_name is required"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
|
||||||
|
echo >&2 "$0: cannot run $find_tool_res --version"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
eval "$find_tool_envvar=\"$find_tool_res\""
|
||||||
|
eval "export $find_tool_envvar"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Find sha1sum, named gsha1sum on MacPorts.
|
||||||
|
find_tool SHA1SUM sha1sum gsha1sum
|
||||||
|
|
||||||
# Override the default configuration, if necessary.
|
# Override the default configuration, if necessary.
|
||||||
# Make sure that bootstrap.conf is sourced from the current directory
|
# Make sure that bootstrap.conf is sourced from the current directory
|
||||||
# if we were invoked as "sh bootstrap".
|
# if we were invoked as "sh bootstrap".
|
||||||
|
@ -420,11 +451,11 @@ update_po_files() {
|
||||||
cksum_file="$ref_po_dir/$po.s1"
|
cksum_file="$ref_po_dir/$po.s1"
|
||||||
if ! test -f "$cksum_file" ||
|
if ! test -f "$cksum_file" ||
|
||||||
! test -f "$po_dir/$po.po" ||
|
! test -f "$po_dir/$po.po" ||
|
||||||
! ${SHA1SUM-sha1sum} -c --status "$cksum_file" \
|
! $SHA1SUM -c --status "$cksum_file" \
|
||||||
< "$new_po" > /dev/null; then
|
< "$new_po" > /dev/null; then
|
||||||
echo "updated $po_dir/$po.po..."
|
echo "updated $po_dir/$po.po..."
|
||||||
cp "$new_po" "$po_dir/$po.po" \
|
cp "$new_po" "$po_dir/$po.po" \
|
||||||
&& ${SHA1SUM-sha1sum} < "$new_po" > "$cksum_file"
|
&& $SHA1SUM < "$new_po" > "$cksum_file"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
@ -765,7 +796,3 @@ sed 's,\.\./\.\.,..,g' $m > $m-t
|
||||||
mv -f $m-t $m
|
mv -f $m-t $m
|
||||||
|
|
||||||
echo "$0: done. Now you can run './configure'."
|
echo "$0: done. Now you can run './configure'."
|
||||||
|
|
||||||
# Local Variables:
|
|
||||||
# indent-tabs-mode: nil
|
|
||||||
# End:
|
|
||||||
|
|
|
@ -130,6 +130,7 @@ gnulib_modules="
|
||||||
lchown
|
lchown
|
||||||
lib-ignore
|
lib-ignore
|
||||||
linebuffer
|
linebuffer
|
||||||
|
link
|
||||||
link-follow
|
link-follow
|
||||||
long-options
|
long-options
|
||||||
lstat
|
lstat
|
||||||
|
@ -316,4 +317,4 @@ tar -
|
||||||
"
|
"
|
||||||
|
|
||||||
# Automake requires that ChangeLog exist.
|
# Automake requires that ChangeLog exist.
|
||||||
touch ChangeLog
|
touch ChangeLog || exit 1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -24,8 +24,8 @@ AC_PREREQ([2.61])
|
||||||
# indicates that it is built from the 219th delta (in _some_ repository)
|
# indicates that it is built from the 219th delta (in _some_ repository)
|
||||||
# following the v6.9 tag, and that 58ddd is a prefix of the commit SHA1.
|
# following the v6.9 tag, and that 58ddd is a prefix of the commit SHA1.
|
||||||
AC_INIT([GNU coreutils],
|
AC_INIT([GNU coreutils],
|
||||||
m4_esyscmd([build-aux/git-version-gen .tarball-version]),
|
m4_esyscmd([build-aux/git-version-gen .tarball-version]),
|
||||||
[bug-coreutils@gnu.org])
|
[bug-coreutils@gnu.org])
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([src/ls.c])
|
AC_CONFIG_SRCDIR([src/ls.c])
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ coreutils_MACROS
|
||||||
|
|
||||||
AC_ARG_ENABLE([gcc-warnings],
|
AC_ARG_ENABLE([gcc-warnings],
|
||||||
[AS_HELP_STRING([--enable-gcc-warnings],
|
[AS_HELP_STRING([--enable-gcc-warnings],
|
||||||
[turn on lots of GCC warnings (for developers)])],
|
[turn on lots of GCC warnings (for developers)])],
|
||||||
[case $enableval in
|
[case $enableval in
|
||||||
yes|no) ;;
|
yes|no) ;;
|
||||||
*) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
|
*) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
|
||||||
|
@ -122,11 +122,11 @@ AC_FUNC_FORK
|
||||||
|
|
||||||
optional_bin_progs=
|
optional_bin_progs=
|
||||||
AC_CHECK_FUNCS([uname],
|
AC_CHECK_FUNCS([uname],
|
||||||
gl_ADD_PROG([optional_bin_progs], [uname]))
|
gl_ADD_PROG([optional_bin_progs], [uname]))
|
||||||
AC_CHECK_FUNCS([chroot],
|
AC_CHECK_FUNCS([chroot],
|
||||||
gl_ADD_PROG([optional_bin_progs], [chroot]))
|
gl_ADD_PROG([optional_bin_progs], [chroot]))
|
||||||
AC_CHECK_FUNCS([gethostid],
|
AC_CHECK_FUNCS([gethostid],
|
||||||
gl_ADD_PROG([optional_bin_progs], [hostid]))
|
gl_ADD_PROG([optional_bin_progs], [hostid]))
|
||||||
|
|
||||||
gl_WINSIZE_IN_PTEM
|
gl_WINSIZE_IN_PTEM
|
||||||
|
|
||||||
|
@ -168,9 +168,9 @@ int main()
|
||||||
[# If we have tzset, assume the worst when cross-compiling.
|
[# If we have tzset, assume the worst when cross-compiling.
|
||||||
utils_cv_localtime_cache=yes])
|
utils_cv_localtime_cache=yes])
|
||||||
else
|
else
|
||||||
# If we lack tzset, report that localtime does not cache TZ,
|
# If we lack tzset, report that localtime does not cache TZ,
|
||||||
# since we can't invalidate the cache if we don't have tzset.
|
# since we can't invalidate the cache if we don't have tzset.
|
||||||
utils_cv_localtime_cache=no
|
utils_cv_localtime_cache=no
|
||||||
fi])dnl
|
fi])dnl
|
||||||
AC_MSG_RESULT([$utils_cv_localtime_cache])
|
AC_MSG_RESULT([$utils_cv_localtime_cache])
|
||||||
if test $utils_cv_localtime_cache = yes; then
|
if test $utils_cv_localtime_cache = yes; then
|
||||||
|
@ -197,7 +197,7 @@ AC_CACHE_CHECK([for 3-argument setpriority function],
|
||||||
[AC_LINK_IFELSE(
|
[AC_LINK_IFELSE(
|
||||||
[AC_LANG_PROGRAM(
|
[AC_LANG_PROGRAM(
|
||||||
[[#include <sys/time.h>
|
[[#include <sys/time.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
]],
|
]],
|
||||||
[[setpriority (0, 0, 0);]])],
|
[[setpriority (0, 0, 0);]])],
|
||||||
[utils_cv_func_setpriority=yes],
|
[utils_cv_func_setpriority=yes],
|
||||||
|
@ -374,8 +374,8 @@ case $t in
|
||||||
$no_install_progs_default) ;;
|
$no_install_progs_default) ;;
|
||||||
*) AC_MSG_ERROR([[internal error: g'l_INCLUDE_EXCLUDE_PROG's 2nd arg, $t,
|
*) AC_MSG_ERROR([[internal error: g'l_INCLUDE_EXCLUDE_PROG's 2nd arg, $t,
|
||||||
does not match the list of default-not-installed programs
|
does not match the list of default-not-installed programs
|
||||||
($no_install_progs_default) also recorded in $mk]],
|
($no_install_progs_default) also recorded in $mk]],
|
||||||
1) ;;
|
1) ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Given the name of a variable containing a space-separated list of
|
# Given the name of a variable containing a space-separated list of
|
||||||
|
|
|
@ -71,22 +71,23 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
|
||||||
$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
|
$(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
|
||||||
$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/cycle-check.m4 \
|
$(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/cycle-check.m4 \
|
||||||
$(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/d-type.m4 \
|
$(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/d-type.m4 \
|
||||||
$(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \
|
$(top_srcdir)/m4/dirent-safer.m4 $(top_srcdir)/m4/dirent_h.m4 \
|
||||||
$(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dos.m4 \
|
$(top_srcdir)/m4/dirfd.m4 $(top_srcdir)/m4/dirname.m4 \
|
||||||
$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
|
$(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \
|
||||||
$(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
|
$(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eealloc.m4 \
|
||||||
$(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
|
$(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
|
||||||
$(top_srcdir)/m4/euidaccess-stat.m4 \
|
$(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/euidaccess-stat.m4 \
|
||||||
$(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/exclude.m4 \
|
$(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/exclude.m4 \
|
||||||
$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/exponentd.m4 \
|
$(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/exponentd.m4 \
|
||||||
$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
|
$(top_srcdir)/m4/exponentf.m4 $(top_srcdir)/m4/exponentl.m4 \
|
||||||
$(top_srcdir)/m4/extensions.m4 $(top_srcdir)/m4/fchdir.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/fclose.m4 $(top_srcdir)/m4/fcntl-safer.m4 \
|
||||||
$(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fd-reopen.m4 \
|
$(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fd-reopen.m4 \
|
||||||
$(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/file-type.m4 \
|
$(top_srcdir)/m4/fdopendir.m4 $(top_srcdir)/m4/fflush.m4 \
|
||||||
$(top_srcdir)/m4/fileblocks.m4 $(top_srcdir)/m4/filemode.m4 \
|
$(top_srcdir)/m4/file-type.m4 $(top_srcdir)/m4/fileblocks.m4 \
|
||||||
$(top_srcdir)/m4/filenamecat.m4 $(top_srcdir)/m4/flexmember.m4 \
|
$(top_srcdir)/m4/filemode.m4 $(top_srcdir)/m4/filenamecat.m4 \
|
||||||
$(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fnmatch.m4 \
|
$(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \
|
||||||
|
$(top_srcdir)/m4/fnmatch.m4 $(top_srcdir)/m4/fopen.m4 \
|
||||||
$(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \
|
$(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \
|
||||||
$(top_srcdir)/m4/fprintftime.m4 $(top_srcdir)/m4/fpurge.m4 \
|
$(top_srcdir)/m4/fprintftime.m4 $(top_srcdir)/m4/fpurge.m4 \
|
||||||
$(top_srcdir)/m4/freading.m4 $(top_srcdir)/m4/frexp.m4 \
|
$(top_srcdir)/m4/freading.m4 $(top_srcdir)/m4/frexp.m4 \
|
||||||
|
@ -128,37 +129,38 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
|
||||||
$(top_srcdir)/m4/lib-check.m4 $(top_srcdir)/m4/lib-ignore.m4 \
|
$(top_srcdir)/m4/lib-check.m4 $(top_srcdir)/m4/lib-ignore.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/link-follow.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/link-follow.m4 \
|
||||||
$(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
|
$(top_srcdir)/m4/link.m4 $(top_srcdir)/m4/localcharset.m4 \
|
||||||
$(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-tr.m4 \
|
$(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
|
||||||
$(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/long-options.m4 \
|
$(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
|
||||||
$(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ls-mntd-fs.m4 \
|
$(top_srcdir)/m4/long-options.m4 $(top_srcdir)/m4/longlong.m4 \
|
||||||
$(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
|
$(top_srcdir)/m4/ls-mntd-fs.m4 $(top_srcdir)/m4/lseek.m4 \
|
||||||
$(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
|
$(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \
|
||||||
$(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/math_h.m4 \
|
$(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \
|
||||||
$(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbiter.m4 \
|
$(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbchar.m4 \
|
||||||
$(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \
|
$(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrlen.m4 \
|
||||||
$(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbsrtowcs.m4 \
|
$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \
|
||||||
$(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbswidth.m4 \
|
$(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \
|
||||||
$(top_srcdir)/m4/md5.m4 $(top_srcdir)/m4/memcasecmp.m4 \
|
$(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/md5.m4 \
|
||||||
$(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/memcmp.m4 \
|
$(top_srcdir)/m4/memcasecmp.m4 $(top_srcdir)/m4/memchr.m4 \
|
||||||
$(top_srcdir)/m4/memcoll.m4 $(top_srcdir)/m4/memcpy.m4 \
|
$(top_srcdir)/m4/memcmp.m4 $(top_srcdir)/m4/memcoll.m4 \
|
||||||
$(top_srcdir)/m4/memmove.m4 $(top_srcdir)/m4/mempcpy.m4 \
|
$(top_srcdir)/m4/memcpy.m4 $(top_srcdir)/m4/memmove.m4 \
|
||||||
$(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/memset.m4 \
|
$(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/memrchr.m4 \
|
||||||
$(top_srcdir)/m4/memxfrm.m4 $(top_srcdir)/m4/mgetgroups.m4 \
|
$(top_srcdir)/m4/memset.m4 $(top_srcdir)/m4/memxfrm.m4 \
|
||||||
$(top_srcdir)/m4/mkancesdirs.m4 $(top_srcdir)/m4/mkdir-p.m4 \
|
$(top_srcdir)/m4/mgetgroups.m4 $(top_srcdir)/m4/mkancesdirs.m4 \
|
||||||
$(top_srcdir)/m4/mkdir-slash.m4 $(top_srcdir)/m4/mkstemp.m4 \
|
$(top_srcdir)/m4/mkdir-p.m4 $(top_srcdir)/m4/mkdir-slash.m4 \
|
||||||
$(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \
|
$(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \
|
||||||
$(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/modechange.m4 \
|
$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
|
||||||
$(top_srcdir)/m4/mountlist.m4 $(top_srcdir)/m4/mpsort.m4 \
|
$(top_srcdir)/m4/modechange.m4 $(top_srcdir)/m4/mountlist.m4 \
|
||||||
$(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nanosleep.m4 \
|
$(top_srcdir)/m4/mpsort.m4 $(top_srcdir)/m4/multiarch.m4 \
|
||||||
$(top_srcdir)/m4/netdb_h.m4 $(top_srcdir)/m4/netinet_in_h.m4 \
|
$(top_srcdir)/m4/nanosleep.m4 $(top_srcdir)/m4/netdb_h.m4 \
|
||||||
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
|
$(top_srcdir)/m4/netinet_in_h.m4 $(top_srcdir)/m4/nls.m4 \
|
||||||
$(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/openat.m4 \
|
$(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/open.m4 \
|
||||||
$(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perl.m4 \
|
$(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/pathmax.m4 \
|
||||||
$(top_srcdir)/m4/perror.m4 $(top_srcdir)/m4/physmem.m4 \
|
$(top_srcdir)/m4/perl.m4 $(top_srcdir)/m4/perror.m4 \
|
||||||
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \
|
$(top_srcdir)/m4/physmem.m4 $(top_srcdir)/m4/po.m4 \
|
||||||
$(top_srcdir)/m4/posixtm.m4 $(top_srcdir)/m4/posixver.m4 \
|
$(top_srcdir)/m4/posix-shell.m4 $(top_srcdir)/m4/posixtm.m4 \
|
||||||
$(top_srcdir)/m4/prereq.m4 $(top_srcdir)/m4/printf-frexp.m4 \
|
$(top_srcdir)/m4/posixver.m4 $(top_srcdir)/m4/prereq.m4 \
|
||||||
|
$(top_srcdir)/m4/printf-frexp.m4 \
|
||||||
$(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \
|
$(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \
|
||||||
$(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
|
$(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
|
||||||
$(top_srcdir)/m4/putenv.m4 $(top_srcdir)/m4/quote.m4 \
|
$(top_srcdir)/m4/putenv.m4 $(top_srcdir)/m4/quote.m4 \
|
||||||
|
@ -330,6 +332,7 @@ GLIBC21 = @GLIBC21@
|
||||||
GMSGFMT = @GMSGFMT@
|
GMSGFMT = @GMSGFMT@
|
||||||
GMSGFMT_015 = @GMSGFMT_015@
|
GMSGFMT_015 = @GMSGFMT_015@
|
||||||
GNULIB_ACCEPT = @GNULIB_ACCEPT@
|
GNULIB_ACCEPT = @GNULIB_ACCEPT@
|
||||||
|
GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@
|
||||||
GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
|
GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
|
||||||
GNULIB_ATOLL = @GNULIB_ATOLL@
|
GNULIB_ATOLL = @GNULIB_ATOLL@
|
||||||
GNULIB_BIND = @GNULIB_BIND@
|
GNULIB_BIND = @GNULIB_BIND@
|
||||||
|
@ -343,10 +346,15 @@ GNULIB_CONNECT = @GNULIB_CONNECT@
|
||||||
GNULIB_DIRFD = @GNULIB_DIRFD@
|
GNULIB_DIRFD = @GNULIB_DIRFD@
|
||||||
GNULIB_DPRINTF = @GNULIB_DPRINTF@
|
GNULIB_DPRINTF = @GNULIB_DPRINTF@
|
||||||
GNULIB_DUP2 = @GNULIB_DUP2@
|
GNULIB_DUP2 = @GNULIB_DUP2@
|
||||||
|
GNULIB_DUP3 = @GNULIB_DUP3@
|
||||||
GNULIB_ENVIRON = @GNULIB_ENVIRON@
|
GNULIB_ENVIRON = @GNULIB_ENVIRON@
|
||||||
GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
|
GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
|
||||||
|
GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
|
||||||
GNULIB_FCHDIR = @GNULIB_FCHDIR@
|
GNULIB_FCHDIR = @GNULIB_FCHDIR@
|
||||||
|
GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
|
||||||
|
GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
|
||||||
GNULIB_FCLOSE = @GNULIB_FCLOSE@
|
GNULIB_FCLOSE = @GNULIB_FCLOSE@
|
||||||
|
GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
|
||||||
GNULIB_FFLUSH = @GNULIB_FFLUSH@
|
GNULIB_FFLUSH = @GNULIB_FFLUSH@
|
||||||
GNULIB_FLOORF = @GNULIB_FLOORF@
|
GNULIB_FLOORF = @GNULIB_FLOORF@
|
||||||
GNULIB_FLOORL = @GNULIB_FLOORL@
|
GNULIB_FLOORL = @GNULIB_FLOORL@
|
||||||
|
@ -361,6 +369,7 @@ GNULIB_FREXP = @GNULIB_FREXP@
|
||||||
GNULIB_FREXPL = @GNULIB_FREXPL@
|
GNULIB_FREXPL = @GNULIB_FREXPL@
|
||||||
GNULIB_FSEEK = @GNULIB_FSEEK@
|
GNULIB_FSEEK = @GNULIB_FSEEK@
|
||||||
GNULIB_FSEEKO = @GNULIB_FSEEKO@
|
GNULIB_FSEEKO = @GNULIB_FSEEKO@
|
||||||
|
GNULIB_FSTATAT = @GNULIB_FSTATAT@
|
||||||
GNULIB_FSYNC = @GNULIB_FSYNC@
|
GNULIB_FSYNC = @GNULIB_FSYNC@
|
||||||
GNULIB_FTELL = @GNULIB_FTELL@
|
GNULIB_FTELL = @GNULIB_FTELL@
|
||||||
GNULIB_FTELLO = @GNULIB_FTELLO@
|
GNULIB_FTELLO = @GNULIB_FTELLO@
|
||||||
|
@ -424,12 +433,19 @@ GNULIB_MEMCHR = @GNULIB_MEMCHR@
|
||||||
GNULIB_MEMMEM = @GNULIB_MEMMEM@
|
GNULIB_MEMMEM = @GNULIB_MEMMEM@
|
||||||
GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
|
GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
|
||||||
GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
|
GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
|
||||||
|
GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
|
||||||
GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
|
GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
|
||||||
|
GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
|
||||||
|
GNULIB_MKNODAT = @GNULIB_MKNODAT@
|
||||||
|
GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
|
||||||
GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
|
GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
|
||||||
GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
|
GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
|
||||||
GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
|
GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
|
||||||
GNULIB_OPEN = @GNULIB_OPEN@
|
GNULIB_OPEN = @GNULIB_OPEN@
|
||||||
|
GNULIB_OPENAT = @GNULIB_OPENAT@
|
||||||
GNULIB_PERROR = @GNULIB_PERROR@
|
GNULIB_PERROR = @GNULIB_PERROR@
|
||||||
|
GNULIB_PIPE2 = @GNULIB_PIPE2@
|
||||||
|
GNULIB_POPEN = @GNULIB_POPEN@
|
||||||
GNULIB_PRINTF = @GNULIB_PRINTF@
|
GNULIB_PRINTF = @GNULIB_PRINTF@
|
||||||
GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
|
GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
|
||||||
GNULIB_PUTC = @GNULIB_PUTC@
|
GNULIB_PUTC = @GNULIB_PUTC@
|
||||||
|
@ -439,9 +455,11 @@ GNULIB_PUTS = @GNULIB_PUTS@
|
||||||
GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
|
GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
|
||||||
GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
|
GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
|
||||||
GNULIB_READLINK = @GNULIB_READLINK@
|
GNULIB_READLINK = @GNULIB_READLINK@
|
||||||
|
GNULIB_READLINKAT = @GNULIB_READLINKAT@
|
||||||
GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
|
GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
|
||||||
GNULIB_RECV = @GNULIB_RECV@
|
GNULIB_RECV = @GNULIB_RECV@
|
||||||
GNULIB_RECVFROM = @GNULIB_RECVFROM@
|
GNULIB_RECVFROM = @GNULIB_RECVFROM@
|
||||||
|
GNULIB_RENAME = @GNULIB_RENAME@
|
||||||
GNULIB_ROUND = @GNULIB_ROUND@
|
GNULIB_ROUND = @GNULIB_ROUND@
|
||||||
GNULIB_ROUNDF = @GNULIB_ROUNDF@
|
GNULIB_ROUNDF = @GNULIB_ROUNDF@
|
||||||
GNULIB_ROUNDL = @GNULIB_ROUNDL@
|
GNULIB_ROUNDL = @GNULIB_ROUNDL@
|
||||||
|
@ -481,11 +499,13 @@ GNULIB_STRTOLL = @GNULIB_STRTOLL@
|
||||||
GNULIB_STRTOULL = @GNULIB_STRTOULL@
|
GNULIB_STRTOULL = @GNULIB_STRTOULL@
|
||||||
GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
|
GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
|
||||||
GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
|
GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
|
||||||
|
GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
|
||||||
GNULIB_TRUNC = @GNULIB_TRUNC@
|
GNULIB_TRUNC = @GNULIB_TRUNC@
|
||||||
GNULIB_TRUNCF = @GNULIB_TRUNCF@
|
GNULIB_TRUNCF = @GNULIB_TRUNCF@
|
||||||
GNULIB_TRUNCL = @GNULIB_TRUNCL@
|
GNULIB_TRUNCL = @GNULIB_TRUNCL@
|
||||||
GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
|
GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
|
||||||
GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
|
GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
|
||||||
|
GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
|
||||||
GNULIB_UNSETENV = @GNULIB_UNSETENV@
|
GNULIB_UNSETENV = @GNULIB_UNSETENV@
|
||||||
GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
|
GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
|
||||||
GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
|
GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
|
||||||
|
@ -502,6 +522,7 @@ GNULIB_WCTOB = @GNULIB_WCTOB@
|
||||||
GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
|
GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
|
||||||
GNULIB_WRITE = @GNULIB_WRITE@
|
GNULIB_WRITE = @GNULIB_WRITE@
|
||||||
GREP = @GREP@
|
GREP = @GREP@
|
||||||
|
HAVE_ACCEPT4 = @HAVE_ACCEPT4@
|
||||||
HAVE_ALPHASORT = @HAVE_ALPHASORT@
|
HAVE_ALPHASORT = @HAVE_ALPHASORT@
|
||||||
HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
|
HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
|
||||||
HAVE_ATOLL = @HAVE_ATOLL@
|
HAVE_ATOLL = @HAVE_ATOLL@
|
||||||
|
@ -552,8 +573,14 @@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
|
||||||
HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
|
HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
|
||||||
HAVE_DPRINTF = @HAVE_DPRINTF@
|
HAVE_DPRINTF = @HAVE_DPRINTF@
|
||||||
HAVE_DUP2 = @HAVE_DUP2@
|
HAVE_DUP2 = @HAVE_DUP2@
|
||||||
|
HAVE_DUP3 = @HAVE_DUP3@
|
||||||
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
|
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
|
||||||
|
HAVE_FACCESSAT = @HAVE_FACCESSAT@
|
||||||
|
HAVE_FCHMODAT = @HAVE_FCHMODAT@
|
||||||
|
HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
|
||||||
|
HAVE_FDOPENDIR = @HAVE_FDOPENDIR@
|
||||||
HAVE_FSEEKO = @HAVE_FSEEKO@
|
HAVE_FSEEKO = @HAVE_FSEEKO@
|
||||||
|
HAVE_FSTATAT = @HAVE_FSTATAT@
|
||||||
HAVE_FSYNC = @HAVE_FSYNC@
|
HAVE_FSYNC = @HAVE_FSYNC@
|
||||||
HAVE_FTELLO = @HAVE_FTELLO@
|
HAVE_FTELLO = @HAVE_FTELLO@
|
||||||
HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
|
HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
|
||||||
|
@ -579,15 +606,22 @@ HAVE_MBSINIT = @HAVE_MBSINIT@
|
||||||
HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
|
HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
|
||||||
HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
|
HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
|
||||||
HAVE_MEMPCPY = @HAVE_MEMPCPY@
|
HAVE_MEMPCPY = @HAVE_MEMPCPY@
|
||||||
|
HAVE_MKDIRAT = @HAVE_MKDIRAT@
|
||||||
HAVE_MKDTEMP = @HAVE_MKDTEMP@
|
HAVE_MKDTEMP = @HAVE_MKDTEMP@
|
||||||
|
HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
|
||||||
|
HAVE_MKNODAT = @HAVE_MKNODAT@
|
||||||
|
HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
|
||||||
HAVE_NETDB_H = @HAVE_NETDB_H@
|
HAVE_NETDB_H = @HAVE_NETDB_H@
|
||||||
HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
|
HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
|
||||||
|
HAVE_OPENAT = @HAVE_OPENAT@
|
||||||
HAVE_OS_H = @HAVE_OS_H@
|
HAVE_OS_H = @HAVE_OS_H@
|
||||||
|
HAVE_PIPE2 = @HAVE_PIPE2@
|
||||||
HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
|
HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
|
||||||
HAVE_RANDOM_H = @HAVE_RANDOM_H@
|
HAVE_RANDOM_H = @HAVE_RANDOM_H@
|
||||||
HAVE_RANDOM_R = @HAVE_RANDOM_R@
|
HAVE_RANDOM_R = @HAVE_RANDOM_R@
|
||||||
HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
|
HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
|
||||||
HAVE_READLINK = @HAVE_READLINK@
|
HAVE_READLINK = @HAVE_READLINK@
|
||||||
|
HAVE_READLINKAT = @HAVE_READLINKAT@
|
||||||
HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
|
HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
|
||||||
HAVE_RPMATCH = @HAVE_RPMATCH@
|
HAVE_RPMATCH = @HAVE_RPMATCH@
|
||||||
HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
|
HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
|
||||||
|
@ -605,7 +639,6 @@ HAVE_STPCPY = @HAVE_STPCPY@
|
||||||
HAVE_STPNCPY = @HAVE_STPNCPY@
|
HAVE_STPNCPY = @HAVE_STPNCPY@
|
||||||
HAVE_STRCASESTR = @HAVE_STRCASESTR@
|
HAVE_STRCASESTR = @HAVE_STRCASESTR@
|
||||||
HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
|
HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
|
||||||
HAVE_STRNDUP = @HAVE_STRNDUP@
|
|
||||||
HAVE_STRPBRK = @HAVE_STRPBRK@
|
HAVE_STRPBRK = @HAVE_STRPBRK@
|
||||||
HAVE_STRSEP = @HAVE_STRSEP@
|
HAVE_STRSEP = @HAVE_STRSEP@
|
||||||
HAVE_STRTOD = @HAVE_STRTOD@
|
HAVE_STRTOD = @HAVE_STRTOD@
|
||||||
|
@ -617,6 +650,8 @@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
|
||||||
HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
|
HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
|
||||||
HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
|
HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
|
||||||
HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
|
HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
|
||||||
|
HAVE_SYMLINK = @HAVE_SYMLINK@
|
||||||
|
HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
|
||||||
HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
|
HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
|
||||||
HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
|
HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
|
||||||
HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
|
HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
|
||||||
|
@ -628,6 +663,7 @@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
|
||||||
HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
|
HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
|
||||||
HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
|
HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
|
||||||
HAVE_UNISTD_H = @HAVE_UNISTD_H@
|
HAVE_UNISTD_H = @HAVE_UNISTD_H@
|
||||||
|
HAVE_UNLINKAT = @HAVE_UNLINKAT@
|
||||||
HAVE_UNSETENV = @HAVE_UNSETENV@
|
HAVE_UNSETENV = @HAVE_UNSETENV@
|
||||||
HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
|
HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
|
||||||
HAVE_VASPRINTF = @HAVE_VASPRINTF@
|
HAVE_VASPRINTF = @HAVE_VASPRINTF@
|
||||||
|
@ -780,6 +816,7 @@ REPLACE_CLOSE = @REPLACE_CLOSE@
|
||||||
REPLACE_DPRINTF = @REPLACE_DPRINTF@
|
REPLACE_DPRINTF = @REPLACE_DPRINTF@
|
||||||
REPLACE_DUP2 = @REPLACE_DUP2@
|
REPLACE_DUP2 = @REPLACE_DUP2@
|
||||||
REPLACE_FCHDIR = @REPLACE_FCHDIR@
|
REPLACE_FCHDIR = @REPLACE_FCHDIR@
|
||||||
|
REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
|
||||||
REPLACE_FCLOSE = @REPLACE_FCLOSE@
|
REPLACE_FCLOSE = @REPLACE_FCLOSE@
|
||||||
REPLACE_FFLUSH = @REPLACE_FFLUSH@
|
REPLACE_FFLUSH = @REPLACE_FFLUSH@
|
||||||
REPLACE_FLOORF = @REPLACE_FLOORF@
|
REPLACE_FLOORF = @REPLACE_FLOORF@
|
||||||
|
@ -792,6 +829,7 @@ REPLACE_FREXP = @REPLACE_FREXP@
|
||||||
REPLACE_FREXPL = @REPLACE_FREXPL@
|
REPLACE_FREXPL = @REPLACE_FREXPL@
|
||||||
REPLACE_FSEEK = @REPLACE_FSEEK@
|
REPLACE_FSEEK = @REPLACE_FSEEK@
|
||||||
REPLACE_FSEEKO = @REPLACE_FSEEKO@
|
REPLACE_FSEEKO = @REPLACE_FSEEKO@
|
||||||
|
REPLACE_FSTATAT = @REPLACE_FSTATAT@
|
||||||
REPLACE_FTELL = @REPLACE_FTELL@
|
REPLACE_FTELL = @REPLACE_FTELL@
|
||||||
REPLACE_FTELLO = @REPLACE_FTELLO@
|
REPLACE_FTELLO = @REPLACE_FTELLO@
|
||||||
REPLACE_GETCWD = @REPLACE_GETCWD@
|
REPLACE_GETCWD = @REPLACE_GETCWD@
|
||||||
|
@ -808,6 +846,7 @@ REPLACE_ISNAN = @REPLACE_ISNAN@
|
||||||
REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
|
REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
|
||||||
REPLACE_LCHOWN = @REPLACE_LCHOWN@
|
REPLACE_LCHOWN = @REPLACE_LCHOWN@
|
||||||
REPLACE_LDEXPL = @REPLACE_LDEXPL@
|
REPLACE_LDEXPL = @REPLACE_LDEXPL@
|
||||||
|
REPLACE_LINK = @REPLACE_LINK@
|
||||||
REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
|
REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
|
||||||
REPLACE_LSEEK = @REPLACE_LSEEK@
|
REPLACE_LSEEK = @REPLACE_LSEEK@
|
||||||
REPLACE_LSTAT = @REPLACE_LSTAT@
|
REPLACE_LSTAT = @REPLACE_LSTAT@
|
||||||
|
@ -828,8 +867,10 @@ REPLACE_NULL = @REPLACE_NULL@
|
||||||
REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
|
REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
|
||||||
REPLACE_OPEN = @REPLACE_OPEN@
|
REPLACE_OPEN = @REPLACE_OPEN@
|
||||||
REPLACE_PERROR = @REPLACE_PERROR@
|
REPLACE_PERROR = @REPLACE_PERROR@
|
||||||
|
REPLACE_POPEN = @REPLACE_POPEN@
|
||||||
REPLACE_PRINTF = @REPLACE_PRINTF@
|
REPLACE_PRINTF = @REPLACE_PRINTF@
|
||||||
REPLACE_PUTENV = @REPLACE_PUTENV@
|
REPLACE_PUTENV = @REPLACE_PUTENV@
|
||||||
|
REPLACE_RENAME = @REPLACE_RENAME@
|
||||||
REPLACE_ROUND = @REPLACE_ROUND@
|
REPLACE_ROUND = @REPLACE_ROUND@
|
||||||
REPLACE_ROUNDF = @REPLACE_ROUNDF@
|
REPLACE_ROUNDF = @REPLACE_ROUNDF@
|
||||||
REPLACE_ROUNDL = @REPLACE_ROUNDL@
|
REPLACE_ROUNDL = @REPLACE_ROUNDL@
|
||||||
|
@ -842,10 +883,12 @@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
|
||||||
REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
|
REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
|
||||||
REPLACE_STRDUP = @REPLACE_STRDUP@
|
REPLACE_STRDUP = @REPLACE_STRDUP@
|
||||||
REPLACE_STRERROR = @REPLACE_STRERROR@
|
REPLACE_STRERROR = @REPLACE_STRERROR@
|
||||||
|
REPLACE_STRNDUP = @REPLACE_STRNDUP@
|
||||||
REPLACE_STRPTIME = @REPLACE_STRPTIME@
|
REPLACE_STRPTIME = @REPLACE_STRPTIME@
|
||||||
REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
|
REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
|
||||||
REPLACE_STRSTR = @REPLACE_STRSTR@
|
REPLACE_STRSTR = @REPLACE_STRSTR@
|
||||||
REPLACE_STRTOD = @REPLACE_STRTOD@
|
REPLACE_STRTOD = @REPLACE_STRTOD@
|
||||||
|
REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
|
||||||
REPLACE_TIMEGM = @REPLACE_TIMEGM@
|
REPLACE_TIMEGM = @REPLACE_TIMEGM@
|
||||||
REPLACE_TRUNCL = @REPLACE_TRUNCL@
|
REPLACE_TRUNCL = @REPLACE_TRUNCL@
|
||||||
REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
|
REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
|
||||||
|
@ -878,13 +921,13 @@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
|
||||||
SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
|
SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
|
||||||
SYS_SELECT_H = @SYS_SELECT_H@
|
SYS_SELECT_H = @SYS_SELECT_H@
|
||||||
SYS_SOCKET_H = @SYS_SOCKET_H@
|
SYS_SOCKET_H = @SYS_SOCKET_H@
|
||||||
SYS_STAT_H = @SYS_STAT_H@
|
|
||||||
SYS_TIME_H = @SYS_TIME_H@
|
SYS_TIME_H = @SYS_TIME_H@
|
||||||
SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
|
SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
|
||||||
TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
|
TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
|
||||||
U = @U@
|
U = @U@
|
||||||
UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
|
UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
|
||||||
UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_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 = @UNISTD_H_HAVE_WINSOCK2_H@
|
||||||
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
|
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
|
||||||
USE_ACL = @USE_ACL@
|
USE_ACL = @USE_ACL@
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -618,15 +618,8 @@ from the shell.
|
||||||
@end macro
|
@end macro
|
||||||
|
|
||||||
@macro multiplierSuffixes{varName}
|
@macro multiplierSuffixes{varName}
|
||||||
@ignore
|
@var{\varName\} may be, or may be an integer optionally followed by,
|
||||||
Appending @samp{b} multiplies @var{\varName\} by 512,
|
one of the following multiplicative suffixes:
|
||||||
@samp{kB} by 1000, @samp{K} by 1024,
|
|
||||||
@samp{MB} by 1000*1000, @samp{M} by 1024*1024,
|
|
||||||
@samp{GB} by 1000*1000*1000, @samp{G} by 1024*1024*1024,
|
|
||||||
and so on for @samp{T}, @samp{P}, @samp{E}, @samp{Z}, and @samp{Y}.
|
|
||||||
@end ignore
|
|
||||||
@var{\varName\} is a number which may have one of the following
|
|
||||||
multiplicative suffixes:
|
|
||||||
@example
|
@example
|
||||||
@samp{b} => 512 ("blocks")
|
@samp{b} => 512 ("blocks")
|
||||||
@samp{KB} => 1000 (KiloBytes)
|
@samp{KB} => 1000 (KiloBytes)
|
||||||
|
@ -641,8 +634,8 @@ and so on for @samp{T}, @samp{P}, @samp{E}, @samp{Z}, and @samp{Y}.
|
||||||
|
|
||||||
@c FIXME: same as above, but no ``blocks'' line.
|
@c FIXME: same as above, but no ``blocks'' line.
|
||||||
@macro multiplierSuffixesNoBlocks{varName}
|
@macro multiplierSuffixesNoBlocks{varName}
|
||||||
@var{\varName\} is a number which may have one of the following
|
@var{\varName\} may be, or may be an integer optionally followed by,
|
||||||
multiplicative suffixes:
|
one of the following multiplicative suffixes:
|
||||||
@example
|
@example
|
||||||
@samp{KB} => 1000 (KiloBytes)
|
@samp{KB} => 1000 (KiloBytes)
|
||||||
@samp{K} => 1024 (KibiBytes)
|
@samp{K} => 1024 (KibiBytes)
|
||||||
|
@ -2122,14 +2115,6 @@ The program accepts the following options. Also see @ref{Common options}.
|
||||||
|
|
||||||
@table @samp
|
@table @samp
|
||||||
|
|
||||||
@item -C
|
|
||||||
@itemx --compare
|
|
||||||
@opindex -C
|
|
||||||
@opindex --compare
|
|
||||||
Compare each pair of source and destination files, and if the destination has
|
|
||||||
identical content and any specified owner, group, permissions, and possibly
|
|
||||||
SELinux context, then do not modify the destination at all.
|
|
||||||
|
|
||||||
@item -c
|
@item -c
|
||||||
@itemx --crown-margin
|
@itemx --crown-margin
|
||||||
@opindex -c
|
@opindex -c
|
||||||
|
@ -2790,9 +2775,10 @@ growing.
|
||||||
The option values @samp{descriptor} and @samp{name} may be specified only
|
The option values @samp{descriptor} and @samp{name} may be specified only
|
||||||
with the long form of the option, not with @option{-f}.
|
with the long form of the option, not with @option{-f}.
|
||||||
|
|
||||||
@vindex POSIXLY_CORRECT
|
The @option{-f} option is ignored if
|
||||||
If @env{POSIXLY_CORRECT} is set, the @option{-f} option is ignored if
|
|
||||||
no @var{file} operand is specified and standard input is a FIFO or a pipe.
|
no @var{file} operand is specified and standard input is a FIFO or a pipe.
|
||||||
|
Likewise, the @option{-f} option has no effect for any
|
||||||
|
operand specified as @samp{-}, when standard input is a FIFO or a pipe.
|
||||||
|
|
||||||
@item -F
|
@item -F
|
||||||
@opindex -F
|
@opindex -F
|
||||||
|
@ -7445,12 +7431,10 @@ may preserve the group ownership of a file only if they happen to be
|
||||||
a member of the desired group.
|
a member of the desired group.
|
||||||
@itemx timestamps
|
@itemx timestamps
|
||||||
Preserve the times of last access and last modification, when possible.
|
Preserve the times of last access and last modification, when possible.
|
||||||
In general, it is not possible to preserve these attributes
|
On older systems, it is not possible to preserve these attributes
|
||||||
when the affected file is a symbolic link.
|
when the affected file is a symbolic link.
|
||||||
However, FreeBSD now provides the @code{lutimes} function, which makes
|
However, many systems now provide the @code{utimensat} function,
|
||||||
it possible even for symbolic links. However, this implementation does
|
which makes it possible even for symbolic links.
|
||||||
not yet take advantage of that.
|
|
||||||
@c FIXME: once we provide lutimes support, update the above.
|
|
||||||
@itemx links
|
@itemx links
|
||||||
Preserve in the destination files
|
Preserve in the destination files
|
||||||
any links between corresponding source files.
|
any links between corresponding source files.
|
||||||
|
@ -7543,15 +7527,31 @@ Also, it is not portable to use @option{-R} to copy symbolic links
|
||||||
unless you also specify @option{-P}, as @acronym{POSIX} allows
|
unless you also specify @option{-P}, as @acronym{POSIX} allows
|
||||||
implementations that dereference symbolic links by default.
|
implementations that dereference symbolic links by default.
|
||||||
|
|
||||||
@item --reflink
|
@item --reflink[=@var{when}]
|
||||||
@opindex --reflink
|
@opindex --reflink[=@var{when}]
|
||||||
|
@cindex COW
|
||||||
|
@cindex clone
|
||||||
|
@cindex copy on write
|
||||||
Perform a lightweight, copy-on-write (COW) copy.
|
Perform a lightweight, copy-on-write (COW) copy.
|
||||||
Copying with this option can succeed only on some relatively new file systems.
|
Copying with this option can succeed only on some file systems.
|
||||||
Once it has succeeded, beware that the source and destination files
|
Once it has succeeded, beware that the source and destination files
|
||||||
share the same disk data blocks as long as they remain unmodified.
|
share the same disk data blocks as long as they remain unmodified.
|
||||||
Thus, if a disk I/O error affects data blocks of one of the files,
|
Thus, if a disk I/O error affects data blocks of one of the files,
|
||||||
the other suffers the exact same fate.
|
the other suffers the exact same fate.
|
||||||
|
|
||||||
|
The @var{when} value can be one of the following:
|
||||||
|
|
||||||
|
@table @samp
|
||||||
|
@item always
|
||||||
|
The default behavior: if the copy-on-write operation is not supported
|
||||||
|
then report the failure for each file and exit with a failure status.
|
||||||
|
|
||||||
|
@item auto
|
||||||
|
If the copy-on-write operation is not supported then fall back
|
||||||
|
to the standard copy behaviour.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
|
||||||
@item --remove-destination
|
@item --remove-destination
|
||||||
@opindex --remove-destination
|
@opindex --remove-destination
|
||||||
Remove each existing destination file before attempting to open it
|
Remove each existing destination file before attempting to open it
|
||||||
|
@ -7768,8 +7768,8 @@ input newline with a space and padding with spaces as necessary.
|
||||||
|
|
||||||
@item unblock
|
@item unblock
|
||||||
@opindex unblock
|
@opindex unblock
|
||||||
Replace trailing spaces in each @samp{cbs}-sized input block with a
|
Remove any trailing spaces in each @samp{cbs}-sized input block,
|
||||||
newline.
|
and append a newline.
|
||||||
|
|
||||||
The @samp{block} and @samp{unblock} conversions are mutually exclusive.
|
The @samp{block} and @samp{unblock} conversions are mutually exclusive.
|
||||||
|
|
||||||
|
@ -8058,6 +8058,14 @@ The program accepts the following options. Also see @ref{Common options}.
|
||||||
|
|
||||||
@optBackup
|
@optBackup
|
||||||
|
|
||||||
|
@item -C
|
||||||
|
@itemx --compare
|
||||||
|
@opindex -C
|
||||||
|
@opindex --compare
|
||||||
|
Compare each pair of source and destination files, and if the destination has
|
||||||
|
identical content and any specified owner, group, permissions, and possibly
|
||||||
|
SELinux context, then do not modify the destination at all.
|
||||||
|
|
||||||
@item -c
|
@item -c
|
||||||
@opindex -c
|
@opindex -c
|
||||||
Ignored; for compatibility with old Unix versions of @command{install}.
|
Ignored; for compatibility with old Unix versions of @command{install}.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
@set UPDATED 18 August 2009
|
@set UPDATED 10 September 2009
|
||||||
@set UPDATED-MONTH August 2009
|
@set UPDATED-MONTH September 2009
|
||||||
@set EDITION 7.5
|
@set EDITION 7.6
|
||||||
@set VERSION 7.5
|
@set VERSION 7.6
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
@set UPDATED 18 August 2009
|
@set UPDATED 10 September 2009
|
||||||
@set UPDATED-MONTH August 2009
|
@set UPDATED-MONTH September 2009
|
||||||
@set EDITION 7.5
|
@set EDITION 7.6
|
||||||
@set VERSION 7.5
|
@set VERSION 7.6
|
||||||
|
|
|
@ -4,7 +4,7 @@ SubDir HAIKU_TOP src bin coreutils lib ;
|
||||||
TARGET_WARNING_CCFLAGS = [ FFilter $(TARGET_WARNING_CCFLAGS)
|
TARGET_WARNING_CCFLAGS = [ FFilter $(TARGET_WARNING_CCFLAGS)
|
||||||
: -Wall -Wmissing-prototypes -Wsign-compare ] ;
|
: -Wall -Wmissing-prototypes -Wsign-compare ] ;
|
||||||
|
|
||||||
SubDirCcFlags -DHAVE_CONFIG_H ;
|
SubDirCcFlags -DHAVE_CONFIG_H -DB_ENABLE_INCOMPLETE_POSIX_AT_SUPPORT ;
|
||||||
|
|
||||||
SubDirSysHdrs $(SUBDIR) ;
|
SubDirSysHdrs $(SUBDIR) ;
|
||||||
#SubDirSysHdrs $(SUBDIR) $(DOTDOT) ;
|
#SubDirSysHdrs $(SUBDIR) $(DOTDOT) ;
|
||||||
|
@ -139,6 +139,7 @@ StaticLibrary libfetish.a :
|
||||||
openat-die.c
|
openat-die.c
|
||||||
openat-proc.c
|
openat-proc.c
|
||||||
openat.c
|
openat.c
|
||||||
|
opendir-safer.c
|
||||||
physmem.c
|
physmem.c
|
||||||
posixtm.c
|
posixtm.c
|
||||||
posixver.c
|
posixver.c
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
||||||
/* Define an at-style functions like fstatat, unlinkat, fchownat, etc.
|
/* Define an at-style functions like fstatat, unlinkat, fchownat, etc.
|
||||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
Copyright (C) 2006, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -16,35 +16,58 @@
|
||||||
|
|
||||||
/* written by Jim Meyering */
|
/* written by Jim Meyering */
|
||||||
|
|
||||||
#define CALL_FUNC(F) \
|
#ifdef AT_FUNC_USE_F1_COND
|
||||||
(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_F1 (F AT_FUNC_POST_FILE_ARGS) \
|
||||||
: AT_FUNC_F2 (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 -1; \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
# define CALL_FUNC(F) (AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS))
|
||||||
|
# define VALIDATE_FLAG(F) /* empty */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Call AT_FUNC_F1 or AT_FUNC_F2 (testing AT_FUNC_USE_F1_COND to
|
#ifdef AT_FUNC_RESULT
|
||||||
determine which) to operate on FILE, which is in the directory
|
# define FUNC_RESULT AT_FUNC_RESULT
|
||||||
open on descriptor FD. If possible, do it without changing the
|
#else
|
||||||
|
# define FUNC_RESULT int
|
||||||
|
#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. If possible, do it without changing the
|
||||||
working directory. Otherwise, resort to using save_cwd/fchdir,
|
working directory. Otherwise, resort to using save_cwd/fchdir,
|
||||||
then AT_FUNC_F?/restore_cwd. If either the save_cwd or the restore_cwd
|
then AT_FUNC_F?/restore_cwd. If either the save_cwd or the restore_cwd
|
||||||
fails, then give a diagnostic and exit nonzero. */
|
fails, then give a diagnostic and exit nonzero. */
|
||||||
int
|
FUNC_RESULT
|
||||||
AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS)
|
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;
|
struct saved_cwd saved_cwd;
|
||||||
int saved_errno;
|
int saved_errno;
|
||||||
int err;
|
FUNC_RESULT err;
|
||||||
|
|
||||||
|
VALIDATE_FLAG (flag);
|
||||||
|
|
||||||
if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file))
|
if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file))
|
||||||
return CALL_FUNC (file);
|
return CALL_FUNC (file);
|
||||||
|
|
||||||
{
|
{
|
||||||
char buf[OPENAT_BUFFER_SIZE];
|
char proc_buf[OPENAT_BUFFER_SIZE];
|
||||||
char *proc_file = openat_proc_name (buf, fd, file);
|
char *proc_file = openat_proc_name (proc_buf, fd, file);
|
||||||
if (proc_file)
|
if (proc_file)
|
||||||
{
|
{
|
||||||
int proc_result = CALL_FUNC (proc_file);
|
FUNC_RESULT proc_result = CALL_FUNC (proc_file);
|
||||||
int proc_errno = errno;
|
int proc_errno = errno;
|
||||||
if (proc_file != buf)
|
if (proc_file != proc_buf)
|
||||||
free (proc_file);
|
free (proc_file);
|
||||||
/* If the syscall succeeds, or if it fails with an unexpected
|
/* If the syscall succeeds, or if it fails with an unexpected
|
||||||
errno value, then return right away. Otherwise, fall through
|
errno value, then return right away. Otherwise, fall through
|
||||||
|
@ -83,3 +106,4 @@ AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
#undef CALL_FUNC
|
#undef CALL_FUNC
|
||||||
|
#undef FUNC_RESULT
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* backupfile.c -- make Emacs style backup file names
|
/* backupfile.c -- make Emacs style backup file names
|
||||||
|
|
||||||
Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
|
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 Free Software
|
||||||
Foundation, Inc.
|
Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <dirent.h>
|
#include "dirent--.h"
|
||||||
#ifndef _D_EXACT_NAMLEN
|
#ifndef _D_EXACT_NAMLEN
|
||||||
# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name)
|
# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name)
|
||||||
#endif
|
#endif
|
||||||
|
@ -80,11 +80,6 @@
|
||||||
of `digit' even when the host does not conform to POSIX. */
|
of `digit' even when the host does not conform to POSIX. */
|
||||||
#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
|
#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
|
/* The extension added to file names to produce a simple (as opposed
|
||||||
to numbered) backup file name. */
|
to numbered) backup file name. */
|
||||||
char const *simple_backup_suffix = "~";
|
char const *simple_backup_suffix = "~";
|
||||||
|
|
|
@ -34,22 +34,22 @@ buffer_lcm (size_t a, size_t b, size_t lcm_max)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (b)
|
if (b)
|
||||||
{
|
{
|
||||||
/* Return lcm (A, B) if it is in range; otherwise, fall back
|
/* Return lcm (A, B) if it is in range; otherwise, fall back
|
||||||
on A. */
|
on A. */
|
||||||
|
|
||||||
size_t lcm, m, n, q, r;
|
size_t lcm, m, n, q, r;
|
||||||
|
|
||||||
/* N = gcd (A, B). */
|
/* N = gcd (A, B). */
|
||||||
for (m = a, n = b; (r = m % n) != 0; m = n, n = r)
|
for (m = a, n = b; (r = m % n) != 0; m = n, n = r)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* LCM = lcm (A, B), if in range. */
|
/* LCM = lcm (A, B), if in range. */
|
||||||
q = a / n;
|
q = a / n;
|
||||||
lcm = q * b;
|
lcm = q * b;
|
||||||
if (lcm <= lcm_max && lcm / b == q)
|
if (lcm <= lcm_max && lcm / b == q)
|
||||||
return lcm;
|
return lcm;
|
||||||
}
|
}
|
||||||
|
|
||||||
size = a;
|
size = a;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Return the canonical absolute name of a given file.
|
/* Return the canonical absolute name of a given file.
|
||||||
Copyright (C) 1996-2008 Free Software Foundation, Inc.
|
Copyright (C) 1996-2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -38,9 +38,6 @@
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
#include "xgetcwd.h"
|
#include "xgetcwd.h"
|
||||||
|
|
||||||
#ifndef ELOOP
|
|
||||||
# define ELOOP 0
|
|
||||||
#endif
|
|
||||||
#ifndef __set_errno
|
#ifndef __set_errno
|
||||||
# define __set_errno(Val) errno = (Val)
|
# define __set_errno(Val) errno = (Val)
|
||||||
#endif
|
#endif
|
||||||
|
@ -199,7 +196,7 @@ canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode)
|
||||||
dest = rname + 1;
|
dest = rname + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (start = end = name; *start; start = end)
|
for (start = name; *start; start = end)
|
||||||
{
|
{
|
||||||
/* Skip sequence of multiple file name separators. */
|
/* Skip sequence of multiple file name separators. */
|
||||||
while (*start == '/')
|
while (*start == '/')
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* provide a chdir function that tries not to fail due to ENAMETOOLONG
|
/* provide a chdir function that tries not to fail due to ENAMETOOLONG
|
||||||
Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
Copyright (C) 2004-2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -20,7 +20,6 @@
|
||||||
|
|
||||||
#include "chdir-long.h"
|
#include "chdir-long.h"
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -28,7 +27,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "openat.h"
|
#include "fcntl--.h"
|
||||||
|
|
||||||
#ifndef PATH_MAX
|
#ifndef PATH_MAX
|
||||||
# error "compile this file only if your system defines PATH_MAX"
|
# error "compile this file only if your system defines PATH_MAX"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* provide consistent interface to chown for systems that don't interpret
|
/* provide consistent interface to chown for systems that don't interpret
|
||||||
an ID of -1 as meaning `don't change the corresponding ID'.
|
an ID of -1 as meaning `don't change the corresponding ID'.
|
||||||
|
|
||||||
Copyright (C) 1997, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
Copyright (C) 1997, 2004-2007, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -46,7 +46,8 @@
|
||||||
int
|
int
|
||||||
rpl_chown (const char *file, uid_t uid, gid_t gid)
|
rpl_chown (const char *file, uid_t uid, gid_t gid)
|
||||||
{
|
{
|
||||||
#if CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE
|
#if HAVE_CHOWN
|
||||||
|
# if CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE
|
||||||
if (gid == (gid_t) -1 || uid == (uid_t) -1)
|
if (gid == (gid_t) -1 || uid == (uid_t) -1)
|
||||||
{
|
{
|
||||||
struct stat file_stats;
|
struct stat file_stats;
|
||||||
|
@ -61,9 +62,9 @@ rpl_chown (const char *file, uid_t uid, gid_t gid)
|
||||||
if (uid == (uid_t) -1)
|
if (uid == (uid_t) -1)
|
||||||
uid = file_stats.st_uid;
|
uid = file_stats.st_uid;
|
||||||
}
|
}
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#if CHOWN_MODIFIES_SYMLINK
|
# if CHOWN_MODIFIES_SYMLINK
|
||||||
{
|
{
|
||||||
/* Handle the case in which the system-supplied chown function
|
/* Handle the case in which the system-supplied chown function
|
||||||
does *not* follow symlinks. Instead, it changes permissions
|
does *not* follow symlinks. Instead, it changes permissions
|
||||||
|
@ -97,7 +98,12 @@ rpl_chown (const char *file, uid_t uid, gid_t gid)
|
||||||
else if (errno != EACCES)
|
else if (errno != EACCES)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
return chown (file, uid, gid);
|
return chown (file, uid, gid);
|
||||||
|
|
||||||
|
#else /* !HAVE_CHOWN */
|
||||||
|
errno = ENOSYS;
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,10 +24,6 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#ifndef FD_CLOEXEC
|
|
||||||
# define FD_CLOEXEC 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Set the `FD_CLOEXEC' flag of DESC if VALUE is true,
|
/* Set the `FD_CLOEXEC' flag of DESC if VALUE is true,
|
||||||
or clear the flag if VALUE is false.
|
or clear the flag if VALUE is false.
|
||||||
Return 0 on success, or -1 on error with `errno' set. */
|
Return 0 on success, or -1 on error with `errno' set. */
|
||||||
|
|
|
@ -33,7 +33,7 @@ rpl_close (int fd)
|
||||||
int retval = close (fd);
|
int retval = close (fd);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FCHDIR_REPLACEMENT
|
#if REPLACE_FCHDIR
|
||||||
if (retval >= 0)
|
if (retval >= 0)
|
||||||
_gl_unregister_fd (fd);
|
_gl_unregister_fd (fd);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1747,7 +1747,7 @@
|
||||||
/* #undef LDBL_SIGNBIT_WORD */
|
/* #undef LDBL_SIGNBIT_WORD */
|
||||||
|
|
||||||
/* Define if `link(2)' dereferences symbolic links. */
|
/* Define if `link(2)' dereferences symbolic links. */
|
||||||
/* #undef LINK_FOLLOWS_SYMLINKS */
|
#define LINK_FOLLOWS_SYMLINKS -1
|
||||||
|
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
/* #undef LOCALTIME_CACHE */
|
/* #undef LOCALTIME_CACHE */
|
||||||
|
|
|
@ -97,9 +97,6 @@
|
||||||
language is requested. */
|
language is requested. */
|
||||||
#undef ENABLE_NLS
|
#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'
|
/* 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
|
prefix, define this to compute the length of that prefix, including the
|
||||||
colon. */
|
colon. */
|
||||||
|
@ -135,6 +132,9 @@
|
||||||
/* Define as the word index where to find the sign of 'float'. */
|
/* Define as the word index where to find the sign of 'float'. */
|
||||||
#undef FLT_SIGNBIT_WORD
|
#undef FLT_SIGNBIT_WORD
|
||||||
|
|
||||||
|
/* Define to 1 if fopen() fails to recognize a trailing slash. */
|
||||||
|
#undef FOPEN_TRAILING_SLASH_BUG
|
||||||
|
|
||||||
/* Define to 1 if ungetc is broken when used on arbitrary bytes. */
|
/* Define to 1 if ungetc is broken when used on arbitrary bytes. */
|
||||||
#undef FUNC_UNGETC_BROKEN
|
#undef FUNC_UNGETC_BROKEN
|
||||||
|
|
||||||
|
@ -158,6 +158,9 @@
|
||||||
/* Define to 1 when using the gnulib module close-stream. */
|
/* Define to 1 when using the gnulib module close-stream. */
|
||||||
#undef GNULIB_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 fcntl-safer. */
|
/* Define to 1 when using the gnulib module fcntl-safer. */
|
||||||
#undef GNULIB_FCNTL_SAFER
|
#undef GNULIB_FCNTL_SAFER
|
||||||
|
|
||||||
|
@ -179,12 +182,21 @@
|
||||||
/* Define to 1 when using the gnulib module open. */
|
/* Define to 1 when using the gnulib module open. */
|
||||||
#undef GNULIB_OPEN
|
#undef GNULIB_OPEN
|
||||||
|
|
||||||
|
/* Define to 1 when using the gnulib module openat-safer. */
|
||||||
|
#undef GNULIB_OPENAT_SAFER
|
||||||
|
|
||||||
/* enable some gnulib portability checks */
|
/* enable some gnulib portability checks */
|
||||||
#undef GNULIB_PORTCHECK
|
#undef GNULIB_PORTCHECK
|
||||||
|
|
||||||
/* Define to indicate the 'realloc' module. */
|
/* Define to indicate the 'realloc' module. */
|
||||||
#undef GNULIB_REALLOC_GNU
|
#undef GNULIB_REALLOC_GNU
|
||||||
|
|
||||||
|
/* Define to 1 when using the gnulib module stdlib-safer. */
|
||||||
|
#undef GNULIB_STDLIB_SAFER
|
||||||
|
|
||||||
|
/* Define to 1 when using the gnulib module unistd-safer. */
|
||||||
|
#undef GNULIB_UNISTD_SAFER
|
||||||
|
|
||||||
/* Define to 1 when using the gnulib module unistr/u8-uctomb. */
|
/* Define to 1 when using the gnulib module unistr/u8-uctomb. */
|
||||||
#undef GNULIB_UNISTR_U8_UCTOMB
|
#undef GNULIB_UNISTR_U8_UCTOMB
|
||||||
|
|
||||||
|
@ -322,7 +334,7 @@
|
||||||
the CoreFoundation framework. */
|
the CoreFoundation framework. */
|
||||||
#undef HAVE_CFPREFERENCESCOPYAPPVALUE
|
#undef HAVE_CFPREFERENCESCOPYAPPVALUE
|
||||||
|
|
||||||
/* Define to 1 if your system has a working `chown' function. */
|
/* Define to 1 if you have the `chown' function. */
|
||||||
#undef HAVE_CHOWN
|
#undef HAVE_CHOWN
|
||||||
|
|
||||||
/* Define to 1 if you have the `chroot' function. */
|
/* Define to 1 if you have the `chroot' function. */
|
||||||
|
@ -547,6 +559,10 @@
|
||||||
don't. */
|
don't. */
|
||||||
#undef HAVE_DECL_MEMRCHR
|
#undef HAVE_DECL_MEMRCHR
|
||||||
|
|
||||||
|
/* 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 `putchar_unlocked', and to 0 if
|
/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
|
||||||
you don't. */
|
you don't. */
|
||||||
#undef HAVE_DECL_PUTCHAR_UNLOCKED
|
#undef HAVE_DECL_PUTCHAR_UNLOCKED
|
||||||
|
@ -688,6 +704,9 @@
|
||||||
/* Define to 1 if you have the `euidaccess' function. */
|
/* Define to 1 if you have the `euidaccess' function. */
|
||||||
#undef HAVE_EUIDACCESS
|
#undef HAVE_EUIDACCESS
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `faccessat' function. */
|
||||||
|
#undef HAVE_FACCESSAT
|
||||||
|
|
||||||
/* Define to 1 if you have the `fchdir' function. */
|
/* Define to 1 if you have the `fchdir' function. */
|
||||||
#undef HAVE_FCHDIR
|
#undef HAVE_FCHDIR
|
||||||
|
|
||||||
|
@ -941,6 +960,9 @@
|
||||||
/* Define to 1 if you have the `ypsec' library (-lypsec). */
|
/* Define to 1 if you have the `ypsec' library (-lypsec). */
|
||||||
#undef HAVE_LIBYPSEC
|
#undef HAVE_LIBYPSEC
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `link' function. */
|
||||||
|
#undef HAVE_LINK
|
||||||
|
|
||||||
/* Define to 1 if you have the `listmntent' function. */
|
/* Define to 1 if you have the `listmntent' function. */
|
||||||
#undef HAVE_LISTMNTENT
|
#undef HAVE_LISTMNTENT
|
||||||
|
|
||||||
|
@ -1253,7 +1275,7 @@
|
||||||
/* Define to 1 if you have the <string.h> header file. */
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
#undef HAVE_STRING_H
|
#undef HAVE_STRING_H
|
||||||
|
|
||||||
/* Define if you have the strndup() function and it works. */
|
/* Define to 1 if you have the `strndup' function. */
|
||||||
#undef HAVE_STRNDUP
|
#undef HAVE_STRNDUP
|
||||||
|
|
||||||
/* Define to 1 if you have the `strnlen' function. */
|
/* Define to 1 if you have the `strnlen' function. */
|
||||||
|
@ -1439,6 +1461,9 @@
|
||||||
/* Define if struct stat has an st_dm_mode member. */
|
/* Define if struct stat has an st_dm_mode member. */
|
||||||
#undef HAVE_ST_DM_MODE
|
#undef HAVE_ST_DM_MODE
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `symlink' function. */
|
||||||
|
#undef HAVE_SYMLINK
|
||||||
|
|
||||||
/* Define to 1 if you have the `sync' function. */
|
/* Define to 1 if you have the `sync' function. */
|
||||||
#undef HAVE_SYNC
|
#undef HAVE_SYNC
|
||||||
|
|
||||||
|
@ -1745,7 +1770,8 @@
|
||||||
/* Define as the word index where to find the sign of 'long double'. */
|
/* Define as the word index where to find the sign of 'long double'. */
|
||||||
#undef LDBL_SIGNBIT_WORD
|
#undef LDBL_SIGNBIT_WORD
|
||||||
|
|
||||||
/* Define if `link(2)' dereferences symbolic links. */
|
/* Define to 1 if `link(2)' dereferences symbolic links, 0 if it creates hard
|
||||||
|
links to symlinks, and -1 if unknown. */
|
||||||
#undef LINK_FOLLOWS_SYMLINKS
|
#undef LINK_FOLLOWS_SYMLINKS
|
||||||
|
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
|
@ -1962,6 +1988,13 @@
|
||||||
/* Define to 1 if dup2 returns 0 instead of the target fd. */
|
/* Define to 1 if dup2 returns 0 instead of the target fd. */
|
||||||
#undef REPLACE_DUP2
|
#undef REPLACE_DUP2
|
||||||
|
|
||||||
|
/* Define to 1 if gnulib's fchdir() replacement is used. */
|
||||||
|
#undef REPLACE_FCHDIR
|
||||||
|
|
||||||
|
/* 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. */
|
/* Define this to 1 if strerror is broken. */
|
||||||
#undef REPLACE_STRERROR
|
#undef REPLACE_STRERROR
|
||||||
|
|
||||||
|
@ -2170,9 +2203,6 @@
|
||||||
used. */
|
used. */
|
||||||
#undef __GETOPT_PREFIX
|
#undef __GETOPT_PREFIX
|
||||||
|
|
||||||
/* Define to rpl_ if the openat replacement function should be used. */
|
|
||||||
#undef __OPENAT_PREFIX
|
|
||||||
|
|
||||||
/* Define like PROTOTYPES; this can be used by system headers. */
|
/* Define like PROTOTYPES; this can be used by system headers. */
|
||||||
#undef __PROTOTYPES
|
#undef __PROTOTYPES
|
||||||
|
|
||||||
|
@ -2186,9 +2216,6 @@
|
||||||
/* Define to rpl_calloc if the replacement function should be used. */
|
/* Define to rpl_calloc if the replacement function should be used. */
|
||||||
#undef calloc
|
#undef calloc
|
||||||
|
|
||||||
/* Define to rpl_fchownat if the replacement function should be used. */
|
|
||||||
#undef fchownat
|
|
||||||
|
|
||||||
/* Define to a replacement function name for fnmatch(). */
|
/* Define to a replacement function name for fnmatch(). */
|
||||||
#undef fnmatch
|
#undef fnmatch
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
/* Like dirent.h, but redefine some names to avoid glitches.
|
||||||
|
|
||||||
|
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 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
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
|
|
@ -0,0 +1,22 @@
|
||||||
|
/* Invoke dirent-like functions, but avoid some glitches.
|
||||||
|
|
||||||
|
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 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
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);
|
|
@ -58,6 +58,23 @@ extern int dirfd (DIR const *dir);
|
||||||
dirfd (d))
|
dirfd (d))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_FDOPENDIR@
|
||||||
|
# if !@HAVE_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). */
|
||||||
|
extern DIR *fdopendir (int fd);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef fdopendir
|
||||||
|
# define fdopendir(f) \
|
||||||
|
(GL_LINK_WARNING ("fdopendir is unportable - " \
|
||||||
|
"use gnulib module fdopendir for portability"), \
|
||||||
|
fdopendir (f))
|
||||||
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_SCANDIR@
|
#if @GNULIB_SCANDIR@
|
||||||
/* Scan the directory DIR, calling FILTER on each directory entry.
|
/* Scan the directory DIR, calling FILTER on each directory entry.
|
||||||
Entries for which FILTER returns nonzero are individually malloc'd,
|
Entries for which FILTER returns nonzero are individually malloc'd,
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
int
|
int
|
||||||
dup_safer (int fd)
|
dup_safer (int fd)
|
||||||
{
|
{
|
||||||
#if defined F_DUPFD && !defined FCHDIR_REPLACEMENT
|
#if defined F_DUPFD && !REPLACE_FCHDIR
|
||||||
return fcntl (fd, F_DUPFD, STDERR_FILENO + 1);
|
return fcntl (fd, F_DUPFD, STDERR_FILENO + 1);
|
||||||
#else
|
#else
|
||||||
/* fd_safer calls us back, but eventually the recursion unwinds and
|
/* fd_safer calls us back, but eventually the recursion unwinds and
|
||||||
|
|
|
@ -55,8 +55,25 @@ rpl_dup2 (int fd, int desired_fd)
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
result = dup2 (fd, desired_fd);
|
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)
|
if (result == 0)
|
||||||
result = desired_fd;
|
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 == desired_fd)
|
||||||
|
result = _gl_register_dup (fd, desired_fd);
|
||||||
|
#endif
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,13 +102,19 @@ dupfd (int fd, int desired_fd)
|
||||||
int
|
int
|
||||||
dup2 (int fd, int desired_fd)
|
dup2 (int fd, int desired_fd)
|
||||||
{
|
{
|
||||||
|
int result;
|
||||||
if (fd == desired_fd)
|
if (fd == desired_fd)
|
||||||
return fd;
|
return fcntl (fd, F_GETFL) < 0 ? -1 : fd;
|
||||||
close (desired_fd);
|
close (desired_fd);
|
||||||
# ifdef F_DUPFD
|
# ifdef F_DUPFD
|
||||||
return fcntl (fd, F_DUPFD, desired_fd);
|
result = fcntl (fd, F_DUPFD, desired_fd);
|
||||||
# else
|
# else
|
||||||
return dupfd (fd, desired_fd);
|
result = dupfd (fd, desired_fd);
|
||||||
# endif
|
# endif
|
||||||
|
#if REPLACE_FCHDIR
|
||||||
|
if (0 <= result)
|
||||||
|
result = _gl_register_dup (fd, desired_fd);
|
||||||
|
#endif
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
#endif /* !REPLACE_DUP2 */
|
#endif /* !REPLACE_DUP2 */
|
||||||
|
|
|
@ -57,8 +57,8 @@ euidaccess_stat (struct stat const *st, int mode)
|
||||||
mode &= 7;
|
mode &= 7;
|
||||||
else
|
else
|
||||||
mode = ((mode & R_OK ? 4 : 0)
|
mode = ((mode & R_OK ? 4 : 0)
|
||||||
+ (mode & W_OK ? 2 : 0)
|
+ (mode & W_OK ? 2 : 0)
|
||||||
+ (mode & X_OK ? 1 : 0));
|
+ (mode & X_OK ? 1 : 0));
|
||||||
|
|
||||||
if (mode == 0)
|
if (mode == 0)
|
||||||
return true; /* The file exists. */
|
return true; /* The file exists. */
|
||||||
|
@ -68,7 +68,7 @@ euidaccess_stat (struct stat const *st, int mode)
|
||||||
/* The super-user can read and write any file, and execute any file
|
/* The super-user can read and write any file, and execute any file
|
||||||
that anyone can execute. */
|
that anyone can execute. */
|
||||||
if (euid == 0 && ((mode & X_OK) == 0
|
if (euid == 0 && ((mode & X_OK) == 0
|
||||||
|| (st->st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))))
|
|| (st->st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
/* Convert the file's permission bits to traditional form. */
|
/* Convert the file's permission bits to traditional form. */
|
||||||
|
@ -84,14 +84,14 @@ euidaccess_stat (struct stat const *st, int mode)
|
||||||
granted = st->st_mode;
|
granted = st->st_mode;
|
||||||
else
|
else
|
||||||
granted = ( (st->st_mode & S_IRUSR ? 4 << 6 : 0)
|
granted = ( (st->st_mode & S_IRUSR ? 4 << 6 : 0)
|
||||||
+ (st->st_mode & S_IWUSR ? 2 << 6 : 0)
|
+ (st->st_mode & S_IWUSR ? 2 << 6 : 0)
|
||||||
+ (st->st_mode & S_IXUSR ? 1 << 6 : 0)
|
+ (st->st_mode & S_IXUSR ? 1 << 6 : 0)
|
||||||
+ (st->st_mode & S_IRGRP ? 4 << 3 : 0)
|
+ (st->st_mode & S_IRGRP ? 4 << 3 : 0)
|
||||||
+ (st->st_mode & S_IWGRP ? 2 << 3 : 0)
|
+ (st->st_mode & S_IWGRP ? 2 << 3 : 0)
|
||||||
+ (st->st_mode & S_IXGRP ? 1 << 3 : 0)
|
+ (st->st_mode & S_IXGRP ? 1 << 3 : 0)
|
||||||
+ (st->st_mode & S_IROTH ? 4 << 0 : 0)
|
+ (st->st_mode & S_IROTH ? 4 << 0 : 0)
|
||||||
+ (st->st_mode & S_IWOTH ? 2 << 0 : 0)
|
+ (st->st_mode & S_IWOTH ? 2 << 0 : 0)
|
||||||
+ (st->st_mode & S_IXOTH ? 1 << 0 : 0));
|
+ (st->st_mode & S_IXOTH ? 1 << 0 : 0));
|
||||||
|
|
||||||
if (euid == st->st_uid)
|
if (euid == st->st_uid)
|
||||||
granted >>= 6;
|
granted >>= 6;
|
||||||
|
@ -99,7 +99,7 @@ euidaccess_stat (struct stat const *st, int mode)
|
||||||
{
|
{
|
||||||
gid_t egid = getegid ();
|
gid_t egid = getegid ();
|
||||||
if (egid == st->st_gid || group_member (st->st_gid))
|
if (egid == st->st_gid || group_member (st->st_gid))
|
||||||
granted >>= 3;
|
granted >>= 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mode & ~granted) == 0)
|
if ((mode & ~granted) == 0)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* euidaccess -- check if effective user id can access file
|
/* euidaccess -- check if effective user id can access file
|
||||||
|
|
||||||
Copyright (C) 1990, 1991, 1995, 1998, 2000, 2003, 2004, 2005, 2006, 2008
|
Copyright (C) 1990, 1991, 1995, 1998, 2000, 2003, 2004, 2005, 2006,
|
||||||
Free Software Foundation, Inc.
|
2008, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -77,7 +78,9 @@
|
||||||
int
|
int
|
||||||
euidaccess (const char *file, int mode)
|
euidaccess (const char *file, int mode)
|
||||||
{
|
{
|
||||||
#if defined EFF_ONLY_OK
|
#if HAVE_FACCESSAT
|
||||||
|
return faccessat (AT_FDCWD, file, mode, AT_EACCESS);
|
||||||
|
#elif defined EFF_ONLY_OK
|
||||||
return access (file, mode | EFF_ONLY_OK);
|
return access (file, mode | EFF_ONLY_OK);
|
||||||
#elif defined ACC_SELF
|
#elif defined ACC_SELF
|
||||||
return accessx (file, mode, ACC_SELF);
|
return accessx (file, mode, ACC_SELF);
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <wctype.h>
|
||||||
|
|
||||||
#include "exclude.h"
|
#include "exclude.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
|
@ -113,7 +114,7 @@ struct exclude
|
||||||
bool
|
bool
|
||||||
fnmatch_pattern_has_wildcards (const char *str, int options)
|
fnmatch_pattern_has_wildcards (const char *str, int options)
|
||||||
{
|
{
|
||||||
char *cset = "\\?*[]";
|
const char *cset = "\\?*[]";
|
||||||
if (options & FNM_NOESCAPE)
|
if (options & FNM_NOESCAPE)
|
||||||
cset++;
|
cset++;
|
||||||
while (*str)
|
while (*str)
|
||||||
|
@ -199,7 +200,7 @@ string_free (void *data)
|
||||||
|
|
||||||
/* Create new exclude segment of given TYPE and OPTIONS, and attach it
|
/* Create new exclude segment of given TYPE and OPTIONS, and attach it
|
||||||
to the tail of list in EX */
|
to the tail of list in EX */
|
||||||
struct exclude_segment *
|
static struct exclude_segment *
|
||||||
new_exclude_segment (struct exclude *ex, enum exclude_type type, int options)
|
new_exclude_segment (struct exclude *ex, enum exclude_type type, int options)
|
||||||
{
|
{
|
||||||
struct exclude_segment *sp = xzalloc (sizeof (struct exclude_segment));
|
struct exclude_segment *sp = xzalloc (sizeof (struct exclude_segment));
|
||||||
|
@ -328,7 +329,7 @@ exclude_fnmatch (char const *pattern, char const *f, int options)
|
||||||
|
|
||||||
/* Return true if the exclude_pattern segment SEG excludes F. */
|
/* Return true if the exclude_pattern segment SEG excludes F. */
|
||||||
|
|
||||||
bool
|
static bool
|
||||||
excluded_file_pattern_p (struct exclude_segment const *seg, char const *f)
|
excluded_file_pattern_p (struct exclude_segment const *seg, char const *f)
|
||||||
{
|
{
|
||||||
size_t exclude_count = seg->v.pat.exclude_count;
|
size_t exclude_count = seg->v.pat.exclude_count;
|
||||||
|
@ -350,7 +351,7 @@ excluded_file_pattern_p (struct exclude_segment const *seg, char const *f)
|
||||||
/* Return true if the exclude_hash segment SEG excludes F.
|
/* Return true if the exclude_hash segment SEG excludes F.
|
||||||
BUFFER is an auxiliary storage of the same length as F (with nul
|
BUFFER is an auxiliary storage of the same length as F (with nul
|
||||||
terminator included) */
|
terminator included) */
|
||||||
bool
|
static bool
|
||||||
excluded_file_name_p (struct exclude_segment const *seg, char const *f,
|
excluded_file_name_p (struct exclude_segment const *seg, char const *f,
|
||||||
char *buffer)
|
char *buffer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,10 +19,11 @@
|
||||||
/* Specification. */
|
/* Specification. */
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdarg.h>
|
#include <stdbool.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -30,80 +31,161 @@
|
||||||
|
|
||||||
#include "canonicalize.h"
|
#include "canonicalize.h"
|
||||||
|
|
||||||
|
#ifndef REPLACE_OPEN_DIRECTORY
|
||||||
|
# define REPLACE_OPEN_DIRECTORY 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This replacement assumes that a directory is not renamed while opened
|
/* This replacement assumes that a directory is not renamed while opened
|
||||||
through a file descriptor. */
|
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 it points to a directory, it stores
|
/* 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. */
|
info about this directory. */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char *name; /* Absolute name of the directory, or NULL. */
|
char *name; /* Absolute name of the directory, or NULL. */
|
||||||
int saved_errno; /* If name == NULL: The error code describing the failure
|
/* FIXME - add a DIR* member to make dirfd possible on mingw? */
|
||||||
reason. */
|
|
||||||
} dir_info_t;
|
} dir_info_t;
|
||||||
static dir_info_t *dirs;
|
static dir_info_t *dirs;
|
||||||
static size_t dirs_allocated;
|
static size_t dirs_allocated;
|
||||||
|
|
||||||
/* Try to ensure dirs has enough room for a slot at index fd. */
|
/* Try to ensure dirs has enough room for a slot at index fd. Return
|
||||||
static void
|
false and set errno to ENOMEM on allocation failure. */
|
||||||
|
static bool
|
||||||
ensure_dirs_slot (size_t fd)
|
ensure_dirs_slot (size_t fd)
|
||||||
{
|
{
|
||||||
if (fd >= dirs_allocated)
|
if (fd >= dirs_allocated)
|
||||||
{
|
{
|
||||||
size_t new_allocated;
|
size_t new_allocated;
|
||||||
dir_info_t *new_dirs;
|
dir_info_t *new_dirs;
|
||||||
size_t i;
|
|
||||||
|
|
||||||
new_allocated = 2 * dirs_allocated + 1;
|
new_allocated = 2 * dirs_allocated + 1;
|
||||||
if (new_allocated <= fd)
|
if (new_allocated <= fd)
|
||||||
new_allocated = fd + 1;
|
new_allocated = fd + 1;
|
||||||
new_dirs =
|
new_dirs =
|
||||||
(dirs != NULL
|
(dirs != NULL
|
||||||
? (dir_info_t *) realloc (dirs, new_allocated * sizeof (dir_info_t))
|
? (dir_info_t *) realloc (dirs, new_allocated * sizeof *dirs)
|
||||||
: (dir_info_t *) malloc (new_allocated * sizeof (dir_info_t)));
|
: (dir_info_t *) malloc (new_allocated * sizeof *dirs));
|
||||||
if (new_dirs != NULL)
|
if (new_dirs == NULL)
|
||||||
{
|
return false;
|
||||||
for (i = dirs_allocated; i < new_allocated; i++)
|
memset (new_dirs + dirs_allocated, 0,
|
||||||
{
|
(new_allocated - dirs_allocated) * sizeof *dirs);
|
||||||
new_dirs[i].name = NULL;
|
dirs = new_dirs;
|
||||||
new_dirs[i].saved_errno = ENOTDIR;
|
dirs_allocated = new_allocated;
|
||||||
}
|
|
||||||
dirs = new_dirs;
|
|
||||||
dirs_allocated = new_allocated;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hook into the gnulib replacements for open() and close() to keep track
|
/* Hook into the gnulib replacements for open() and close() to keep track
|
||||||
of the open file descriptors. */
|
of the open file descriptors. */
|
||||||
|
|
||||||
|
/* Close FD, cleaning up any fd to name mapping if fd was visiting a
|
||||||
|
directory. */
|
||||||
void
|
void
|
||||||
_gl_unregister_fd (int fd)
|
_gl_unregister_fd (int fd)
|
||||||
{
|
{
|
||||||
if (fd >= 0 && fd < dirs_allocated)
|
if (fd >= 0 && fd < dirs_allocated)
|
||||||
{
|
{
|
||||||
if (dirs[fd].name != NULL)
|
free (dirs[fd].name);
|
||||||
free (dirs[fd].name);
|
|
||||||
dirs[fd].name = NULL;
|
dirs[fd].name = NULL;
|
||||||
dirs[fd].saved_errno = ENOTDIR;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/* 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)
|
_gl_register_fd (int fd, const char *filename)
|
||||||
{
|
{
|
||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
|
|
||||||
ensure_dirs_slot (fd);
|
assert (0 <= fd);
|
||||||
if (fd < dirs_allocated
|
if (REPLACE_OPEN_DIRECTORY
|
||||||
&& fstat (fd, &statbuf) >= 0 && S_ISDIR (statbuf.st_mode))
|
|| (fstat (fd, &statbuf) == 0 && S_ISDIR (statbuf.st_mode)))
|
||||||
{
|
{
|
||||||
dirs[fd].name = canonicalize_file_name (filename);
|
if (!ensure_dirs_slot (fd)
|
||||||
if (dirs[fd].name == NULL)
|
|| (dirs[fd].name = canonicalize_file_name (filename)) == NULL)
|
||||||
dirs[fd].saved_errno = errno;
|
{
|
||||||
|
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.
|
||||||
|
|
||||||
|
FIXME: Need to implement rpl_fcntl in gnulib, and have it call
|
||||||
|
this. */
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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. */
|
||||||
|
#if REPLACE_OPEN_DIRECTORY
|
||||||
|
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
|
/* Override opendir() and closedir(), to keep track of the open file
|
||||||
descriptors. Needed because there is a function dirfd(). */
|
descriptors. Needed because there is a function dirfd(). */
|
||||||
|
|
||||||
|
@ -129,13 +211,18 @@ rpl_opendir (const char *filename)
|
||||||
if (dp != NULL)
|
if (dp != NULL)
|
||||||
{
|
{
|
||||||
int fd = dirfd (dp);
|
int fd = dirfd (dp);
|
||||||
if (fd >= 0)
|
if (0 <= fd && _gl_register_fd (fd, filename) != fd)
|
||||||
_gl_register_fd (fd, filename);
|
{
|
||||||
|
int saved_errno = errno;
|
||||||
|
closedir (dp);
|
||||||
|
errno = saved_errno;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return dp;
|
return dp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Override dup() and dup2(), to keep track of open file descriptors. */
|
/* Override dup(), to keep track of open file descriptors. */
|
||||||
|
|
||||||
int
|
int
|
||||||
rpl_dup (int oldfd)
|
rpl_dup (int oldfd)
|
||||||
|
@ -143,102 +230,17 @@ rpl_dup (int oldfd)
|
||||||
{
|
{
|
||||||
int newfd = dup (oldfd);
|
int newfd = dup (oldfd);
|
||||||
|
|
||||||
if (oldfd >= 0 && newfd >= 0)
|
if (0 <= newfd)
|
||||||
{
|
newfd = _gl_register_dup (oldfd, newfd);
|
||||||
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;
|
return newfd;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Our <unistd.h> replacement overrides dup2 twice; be sure to pick
|
|
||||||
the one we want. */
|
|
||||||
#if REPLACE_DUP2
|
|
||||||
# undef dup2
|
|
||||||
# define dup2 rpl_dup2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
|
||||||
rpl_dup2_fchdir (int oldfd, int newfd)
|
|
||||||
{
|
|
||||||
int retval = dup2 (oldfd, newfd);
|
|
||||||
|
|
||||||
if (retval >= 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(). */
|
/* Implement fchdir() in terms of chdir(). */
|
||||||
|
|
||||||
int
|
int
|
||||||
fchdir (int fd)
|
fchdir (int fd)
|
||||||
{
|
{
|
||||||
if (fd >= 0)
|
const char *name = _gl_directory_name (fd);
|
||||||
{
|
return name ? chdir (name) : -1;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Change the protections of file relative to an open directory.
|
/* Change the protections of file relative to an open directory.
|
||||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
Copyright (C) 2006, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -18,10 +18,12 @@
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
#include "openat.h"
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
|
#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
|
||||||
#include "save-cwd.h"
|
#include "openat.h"
|
||||||
#include "openat-priv.h"
|
#include "openat-priv.h"
|
||||||
|
#include "save-cwd.h"
|
||||||
|
|
||||||
#ifndef HAVE_LCHMOD
|
#ifndef HAVE_LCHMOD
|
||||||
/* Use a different name, to avoid conflicting with any
|
/* Use a different name, to avoid conflicting with any
|
||||||
|
@ -35,15 +37,15 @@ static int lchmod (char const *f, mode_t m) { errno = ENOSYS; return -1; }
|
||||||
Invoke chmod or lchmod on file, FILE, using mode MODE, in the directory
|
Invoke chmod or lchmod on file, FILE, using mode MODE, in the directory
|
||||||
open on descriptor FD. If possible, do it without changing the
|
open on descriptor FD. If possible, do it without changing the
|
||||||
working directory. Otherwise, resort to using save_cwd/fchdir,
|
working directory. Otherwise, resort to using save_cwd/fchdir,
|
||||||
then mkdir/restore_cwd. If either the save_cwd or the restore_cwd
|
then (chmod|lchmod)/restore_cwd. If either the save_cwd or the
|
||||||
fails, then give a diagnostic and exit nonzero.
|
restore_cwd fails, then give a diagnostic and exit nonzero.
|
||||||
Note that an attempt to use a FLAG value of AT_SYMLINK_NOFOLLOW
|
Note that an attempt to use a FLAG value of AT_SYMLINK_NOFOLLOW
|
||||||
on a system without lchmod support causes this function to fail. */
|
on a system without lchmod support causes this function to fail. */
|
||||||
|
|
||||||
#define AT_FUNC_NAME fchmodat
|
#define AT_FUNC_NAME fchmodat
|
||||||
#define AT_FUNC_F1 lchmod
|
#define AT_FUNC_F1 lchmod
|
||||||
#define AT_FUNC_F2 chmod
|
#define AT_FUNC_F2 chmod
|
||||||
#define AT_FUNC_USE_F1_COND flag == AT_SYMLINK_NOFOLLOW
|
#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_PARAM_DECLS , mode_t mode, int flag
|
||||||
#define AT_FUNC_POST_FILE_ARGS , mode
|
#define AT_FUNC_POST_FILE_ARGS , mode
|
||||||
#include "at-func.c"
|
#include "at-func.c"
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
when the buggy fchownat-with-AT_SYMLINK_NOFOLLOW operates on a symlink, it
|
when the buggy fchownat-with-AT_SYMLINK_NOFOLLOW operates on a symlink, it
|
||||||
mistakenly affects the symlink referent, rather than the symlink itself.
|
mistakenly affects the symlink referent, rather than the symlink itself.
|
||||||
|
|
||||||
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
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -23,26 +23,25 @@
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
#include "openat.h"
|
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
|
#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
|
||||||
#include "save-cwd.h"
|
#include "openat.h"
|
||||||
#include "openat-priv.h"
|
#include "openat-priv.h"
|
||||||
|
#include "save-cwd.h"
|
||||||
|
|
||||||
/* Replacement for Solaris' function by the same name.
|
/* Replacement for Solaris' function by the same name.
|
||||||
Invoke chown or lchown on file, FILE, using OWNER and GROUP, in the
|
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
|
directory open on descriptor FD. If FLAG is AT_SYMLINK_NOFOLLOW, then
|
||||||
use lchown, otherwise, use chown. If possible, do it without changing
|
use lchown, otherwise, use chown. If possible, do it without changing
|
||||||
the working directory. Otherwise, resort to using save_cwd/fchdir,
|
the working directory. Otherwise, resort to using save_cwd/fchdir,
|
||||||
then mkdir/restore_cwd. If either the save_cwd or the restore_cwd
|
then (chown|lchown)/restore_cwd. If either the save_cwd or the
|
||||||
fails, then give a diagnostic and exit nonzero. */
|
restore_cwd fails, then give a diagnostic and exit nonzero. */
|
||||||
|
|
||||||
#define AT_FUNC_NAME fchownat
|
#define AT_FUNC_NAME fchownat
|
||||||
#define AT_FUNC_F1 lchown
|
#define AT_FUNC_F1 lchown
|
||||||
#define AT_FUNC_F2 chown
|
#define AT_FUNC_F2 chown
|
||||||
#define AT_FUNC_USE_F1_COND flag == AT_SYMLINK_NOFOLLOW
|
#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_PARAM_DECLS , uid_t owner, gid_t group, int flag
|
||||||
#define AT_FUNC_POST_FILE_ARGS , owner, group
|
#define AT_FUNC_POST_FILE_ARGS , owner, group
|
||||||
#include "at-func.c"
|
#include "at-func.c"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Like fcntl.h, but redefine some names to avoid glitches.
|
/* Like fcntl.h, but redefine some names to avoid glitches.
|
||||||
|
|
||||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
Copyright (C) 2005, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -25,3 +25,8 @@
|
||||||
|
|
||||||
#undef creat
|
#undef creat
|
||||||
#define creat creat_safer
|
#define creat creat_safer
|
||||||
|
|
||||||
|
#if GNULIB_OPENAT_SAFER
|
||||||
|
# undef openat
|
||||||
|
# define openat openat_safer
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Invoke fcntl-like functions, but avoid some glitches.
|
/* Invoke fcntl-like functions, but avoid some glitches.
|
||||||
|
|
||||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
Copyright (C) 2005, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -21,3 +21,7 @@
|
||||||
|
|
||||||
int open_safer (char const *, int, ...);
|
int open_safer (char const *, int, ...);
|
||||||
int creat_safer (char const *, mode_t);
|
int creat_safer (char const *, mode_t);
|
||||||
|
|
||||||
|
#if GNULIB_OPENAT_SAFER
|
||||||
|
int openat_safer (int, char const *, int, ...);
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Like <fcntl.h>, but with non-working flags defined to 0.
|
/* Like <fcntl.h>, but with non-working flags defined to 0.
|
||||||
|
|
||||||
Copyright (C) 2006-2008 Free Software Foundation, Inc.
|
Copyright (C) 2006-2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -44,6 +44,9 @@
|
||||||
#define _GL_FCNTL_H
|
#define _GL_FCNTL_H
|
||||||
|
|
||||||
|
|
||||||
|
/* The definition of GL_LINK_WARNING is copied here. */
|
||||||
|
|
||||||
|
|
||||||
/* Declare overridden functions. */
|
/* Declare overridden functions. */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -58,15 +61,29 @@ extern int open (const char *filename, int flags, ...);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FCHDIR_REPLACEMENT
|
#if @GNULIB_OPENAT@
|
||||||
/* gnulib internal function. */
|
# if !@HAVE_OPENAT@
|
||||||
extern void _gl_register_fd (int fd, const char *filename);
|
# undef openat
|
||||||
|
# define openat rpl_openat
|
||||||
|
int openat (int fd, char const *file, int flags, /* mode_t mode */ ...);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef openat
|
||||||
|
# define openat(f,u,g) \
|
||||||
|
(GL_LINK_WARNING ("openat is not portable - " \
|
||||||
|
"use gnulib module openat for portability"), \
|
||||||
|
openat)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Fix up the FD_* macros. */
|
||||||
|
|
||||||
|
#ifndef FD_CLOEXEC
|
||||||
|
# define FD_CLOEXEC 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Fix up the O_* macros. */
|
/* Fix up the O_* macros. */
|
||||||
|
|
||||||
|
@ -75,6 +92,12 @@ extern void _gl_register_fd (int fd, const char *filename);
|
||||||
# define O_DIRECT O_DIRECTIO
|
# define O_DIRECT O_DIRECTIO
|
||||||
#endif
|
#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
|
#ifndef O_DIRECT
|
||||||
# define O_DIRECT 0
|
# define O_DIRECT 0
|
||||||
#endif
|
#endif
|
||||||
|
@ -119,6 +142,10 @@ extern void _gl_register_fd (int fd, const char *filename);
|
||||||
# define O_SYNC 0
|
# define O_SYNC 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef O_TTY_INIT
|
||||||
|
# define O_TTY_INIT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* For systems that distinguish between text and binary I/O.
|
/* For systems that distinguish between text and binary I/O.
|
||||||
O_BINARY is usually declared in fcntl.h */
|
O_BINARY is usually declared in fcntl.h */
|
||||||
#if !defined O_BINARY && defined _O_BINARY
|
#if !defined O_BINARY && defined _O_BINARY
|
||||||
|
@ -138,6 +165,42 @@ extern void _gl_register_fd (int fd, const char *filename);
|
||||||
# define O_TEXT 0
|
# define O_TEXT 0
|
||||||
#endif
|
#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 /* _GL_FCNTL_H */
|
#endif /* _GL_FCNTL_H */
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
/* provide a replacement fdopendir function
|
||||||
|
Copyright (C) 2004-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 <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#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;
|
||||||
|
}
|
|
@ -0,0 +1,105 @@
|
||||||
|
/* Open a stream to a file.
|
||||||
|
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/>. */
|
||||||
|
|
||||||
|
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
/* Get the original definition of fopen. It might be defined as a macro. */
|
||||||
|
#define __need_FILE
|
||||||
|
#include <stdio.h>
|
||||||
|
#undef __need_FILE
|
||||||
|
|
||||||
|
static inline FILE *
|
||||||
|
orig_fopen (const char *filename, const char *mode)
|
||||||
|
{
|
||||||
|
return fopen (filename, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
FILE *
|
||||||
|
rpl_fopen (const char *filename, const char *mode)
|
||||||
|
{
|
||||||
|
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
|
if (strcmp (filename, "/dev/null") == 0)
|
||||||
|
filename = "NUL";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if FOPEN_TRAILING_SLASH_BUG
|
||||||
|
/* If the filename ends in a slash and a mode that requires write access 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 a mode that
|
||||||
|
requires write access is specified, fopen() must fail because POSIX
|
||||||
|
<http://www.opengroup.org/susv3/functions/fopen.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
|
||||||
|
fopen() must fail since the file does not contain a '.' directory. */
|
||||||
|
{
|
||||||
|
size_t len = strlen (filename);
|
||||||
|
if (len > 0 && filename[len - 1] == '/')
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
struct stat statbuf;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
if (mode[0] == 'w' || mode[0] == 'a')
|
||||||
|
{
|
||||||
|
errno = EISDIR;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fd = open (filename, O_RDONLY);
|
||||||
|
if (fd < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
|
||||||
|
{
|
||||||
|
close (fd);
|
||||||
|
errno = ENOTDIR;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fp = fdopen (fd, mode);
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
int saved_errno = errno;
|
||||||
|
close (fd);
|
||||||
|
errno = saved_errno;
|
||||||
|
}
|
||||||
|
return fp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
return orig_fopen (filename, mode);
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
/* Work around an fstatat bug on Solaris 9.
|
/* Work around an fstatat bug on Solaris 9.
|
||||||
|
|
||||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
Copyright (C) 2006, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -19,12 +19,14 @@
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
#define COMPILING_FSTATAT 1
|
#include <sys/stat.h>
|
||||||
#include "openat.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#undef fstatat
|
||||||
|
|
||||||
/* fstatat should always follow symbolic links that end in /, but on
|
/* fstatat should always follow symbolic links that end in /, but on
|
||||||
Solaris 9 it doesn't if AT_SYMLINK_NOFOLLOW is specified. This is
|
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
|
the same problem that lstat.c addresses, so solve it in a similar
|
||||||
|
|
|
@ -69,8 +69,12 @@ static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94";
|
||||||
|
|
||||||
#if ! _LIBC
|
#if ! _LIBC
|
||||||
# include "fcntl--.h"
|
# include "fcntl--.h"
|
||||||
# include "openat.h"
|
# include "dirent--.h"
|
||||||
# include "unistd--.h"
|
# include "unistd--.h"
|
||||||
|
/* FIXME - use fcntl(F_DUPFD_CLOEXEC)/openat(O_CLOEXEC) once they are
|
||||||
|
supported. */
|
||||||
|
# include "cloexec.h"
|
||||||
|
# include "openat.h"
|
||||||
# include "same-inode.h"
|
# include "same-inode.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -228,10 +232,6 @@ static void free_dir (FTS *fts) {}
|
||||||
# define SIZE_MAX ((size_t) -1)
|
# define SIZE_MAX ((size_t) -1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef O_DIRECTORY
|
|
||||||
# define O_DIRECTORY 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ISDOT(a) (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2])))
|
#define ISDOT(a) (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2])))
|
||||||
#define STREQ(a, b) (strcmp ((a), (b)) == 0)
|
#define STREQ(a, b) (strcmp ((a), (b)) == 0)
|
||||||
|
|
||||||
|
@ -309,11 +309,13 @@ static inline DIR *
|
||||||
internal_function
|
internal_function
|
||||||
opendirat (int fd, char const *dir)
|
opendirat (int fd, char const *dir)
|
||||||
{
|
{
|
||||||
int new_fd = openat (fd, dir, O_RDONLY);
|
int new_fd = openat (fd, dir,
|
||||||
|
O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK);
|
||||||
DIR *dirp;
|
DIR *dirp;
|
||||||
|
|
||||||
if (new_fd < 0)
|
if (new_fd < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
set_cloexec_flag (new_fd, true);
|
||||||
dirp = fdopendir (new_fd);
|
dirp = fdopendir (new_fd);
|
||||||
if (dirp == NULL)
|
if (dirp == NULL)
|
||||||
{
|
{
|
||||||
|
@ -365,9 +367,12 @@ diropen (FTS const *sp, char const *dir)
|
||||||
int open_flags = (O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK
|
int open_flags = (O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK
|
||||||
| (ISSET (FTS_PHYSICAL) ? O_NOFOLLOW : 0));
|
| (ISSET (FTS_PHYSICAL) ? O_NOFOLLOW : 0));
|
||||||
|
|
||||||
return (ISSET (FTS_CWDFD)
|
int fd = (ISSET (FTS_CWDFD)
|
||||||
? openat (sp->fts_cwd_fd, dir, open_flags)
|
? openat (sp->fts_cwd_fd, dir, open_flags)
|
||||||
: open (dir, open_flags));
|
: open (dir, open_flags));
|
||||||
|
if (0 <= fd)
|
||||||
|
set_cloexec_flag (fd, true);
|
||||||
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
FTS *
|
FTS *
|
||||||
|
@ -606,14 +611,20 @@ fts_close (FTS *sp)
|
||||||
if (ISSET(FTS_CWDFD))
|
if (ISSET(FTS_CWDFD))
|
||||||
{
|
{
|
||||||
if (0 <= sp->fts_cwd_fd)
|
if (0 <= sp->fts_cwd_fd)
|
||||||
close (sp->fts_cwd_fd);
|
if (close (sp->fts_cwd_fd))
|
||||||
|
saved_errno = errno;
|
||||||
}
|
}
|
||||||
else if (!ISSET(FTS_NOCHDIR))
|
else if (!ISSET(FTS_NOCHDIR))
|
||||||
{
|
{
|
||||||
/* Return to original directory, save errno if necessary. */
|
/* Return to original directory, save errno if necessary. */
|
||||||
if (fchdir(sp->fts_rfd))
|
if (fchdir(sp->fts_rfd))
|
||||||
saved_errno = errno;
|
saved_errno = errno;
|
||||||
close(sp->fts_rfd);
|
|
||||||
|
/* If close fails, record errno only if saved_errno is zero,
|
||||||
|
so that we report the probably-more-meaningful fchdir errno. */
|
||||||
|
if (close (sp->fts_rfd))
|
||||||
|
if (saved_errno == 0)
|
||||||
|
saved_errno = errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
fd_ring_clear (&sp->fts_fd_ring);
|
fd_ring_clear (&sp->fts_fd_ring);
|
||||||
|
@ -1302,7 +1313,10 @@ fts_build (register FTS *sp, int type)
|
||||||
if (nlinks || type == BREAD) {
|
if (nlinks || type == BREAD) {
|
||||||
int dir_fd = dirfd(dirp);
|
int dir_fd = dirfd(dirp);
|
||||||
if (ISSET(FTS_CWDFD) && 0 <= dir_fd)
|
if (ISSET(FTS_CWDFD) && 0 <= dir_fd)
|
||||||
dir_fd = dup (dir_fd);
|
{
|
||||||
|
dir_fd = dup (dir_fd);
|
||||||
|
set_cloexec_flag (dir_fd, true);
|
||||||
|
}
|
||||||
if (dir_fd < 0 || fts_safe_changedir(sp, cur, dir_fd, NULL)) {
|
if (dir_fd < 0 || fts_safe_changedir(sp, cur, dir_fd, NULL)) {
|
||||||
if (nlinks && type == BREAD)
|
if (nlinks && type == BREAD)
|
||||||
cur->fts_errno = errno;
|
cur->fts_errno = errno;
|
||||||
|
|
|
@ -233,12 +233,30 @@ typedef struct _ftsent {
|
||||||
char fts_name[1]; /* file name */
|
char fts_name[1]; /* file name */
|
||||||
} FTSENT;
|
} FTSENT;
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
FTSENT *fts_children (FTS *, int) __THROW;
|
FTSENT *fts_children (FTS *, int) __THROW __attribute_warn_unused_result__;
|
||||||
int fts_close (FTS *) __THROW;
|
int fts_close (FTS *) __THROW __attribute_warn_unused_result__;
|
||||||
FTS *fts_open (char * const *, int,
|
FTS *fts_open (char * const *, int,
|
||||||
int (*)(const FTSENT **, const FTSENT **)) __THROW;
|
int (*)(const FTSENT **, const FTSENT **))
|
||||||
FTSENT *fts_read (FTS *) __THROW;
|
__THROW __attribute_warn_unused_result__;
|
||||||
|
FTSENT *fts_read (FTS *) __THROW __attribute_warn_unused_result__;
|
||||||
int fts_set (FTS *, FTSENT *, int) __THROW;
|
int fts_set (FTS *, FTSENT *, int) __THROW;
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1991-1999, 2004-2008 Free Software Foundation, Inc.
|
/* Copyright (C) 1991-1999, 2004-2009 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -59,20 +59,6 @@
|
||||||
|
|
||||||
#include <limits.h>
|
#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
|
#ifndef MAX
|
||||||
# define MAX(a, b) ((a) < (b) ? (b) : (a))
|
# define MAX(a, b) ((a) < (b) ? (b) : (a))
|
||||||
#endif
|
#endif
|
||||||
|
@ -103,7 +89,11 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The results of opendir() in this file are not used with dirfd and fchdir,
|
/* The results of opendir() in this file are not used with dirfd and fchdir,
|
||||||
therefore save some unnecessary recursion in fchdir.c. */
|
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 opendir
|
||||||
#undef closedir
|
#undef closedir
|
||||||
|
|
||||||
|
@ -160,7 +150,7 @@ __getcwd (char *buf, size_t size)
|
||||||
|
|
||||||
# undef getcwd
|
# undef getcwd
|
||||||
dir = getcwd (buf, size);
|
dir = getcwd (buf, size);
|
||||||
if (dir || (errno != ERANGE && !is_ENAMETOOLONG (errno) && errno != ENOENT))
|
if (dir || (errno != ERANGE && errno != ENAMETOOLONG && errno != ENOENT))
|
||||||
return dir;
|
return dir;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
# the same distribution terms as the rest of that program.
|
# the same distribution terms as the rest of that program.
|
||||||
#
|
#
|
||||||
# Generated by gnulib-tool.
|
# Generated by gnulib-tool.
|
||||||
# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl --lib=libcoreutils --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=gnulib-tests --aux-dir=build-aux --with-tests --avoid=canonicalize-lgpl --avoid=dummy --avoid=lock --no-libtool --macro-prefix=gl acl alloca announce-gen areadlink-with-size argmatch argv-iter assert atexit autobuild backupfile base64 c-strcase c-strtod c-strtold calloc canon-host canonicalize chown cloexec closein closeout config-h configmake crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 cycle-check d-ino d-type diacrit dirfd dirname dup2 error euidaccess exclude exitfail fchdir fcntl fcntl-safer fdl file-type fileblocks filemode filenamecat filevercmp fnmatch-gnu fopen-safer fprintftime fseeko fsusage ftello ftruncate fts gendocs getdate getgroups gethrxtime getline getloadavg getndelim2 getopt-gnu getpagesize getpass-gnu gettext gettime gettimeofday getugroups getusershell git-version-gen gitlog-to-changelog gnu-make gnumakefile gnupload group-member hard-locale hash hash-pjw host-os human idcache ignore-value inttostr inttypes isapipe lchmod lchown lib-ignore linebuffer link-follow long-options lstat maintainer-makefile malloc manywarnings mbrtowc mbsalign mbswidth memcasecmp memchr memcmp memcmp2 memcpy memmove mempcpy memrchr memset mgetgroups mkancesdirs mkdir mkdir-p mkstemp mktime modechange mountlist mpsort obstack pathmax perl physmem posix-shell posixtm posixver priv-set progname propername putenv quote quotearg raise randint randperm readlink readtokens readtokens0 readutmp realloc regex rename rename-dest-slash rmdir rmdir-errno root-dev-ino rpmatch safe-read same save-cwd savedir savewd selinux-at settime sig2str sigaction ssize_t stat-macros stat-time stdbool stdlib-safer stpcpy stpncpy strcspn strdup strftime strpbrk strtod strtoimax strtol strtoumax strverscmp sys_stat timespec tzset unicodeio unistd-safer unlink-busy unlinkdir unlocked-io update-copyright uptime useless-if-before-free userspec utimecmp utimens vasprintf-posix vc-list-files verify verror version-etc-fsf warnings wcwidth winsz-ioctl winsz-termios write-any-file xalloc xfreopen xgetcwd xgethostname xmemcoll xnanosleep xprintf xprintf-posix xstrtod xstrtoimax xstrtol xstrtold xstrtoumax yesno
|
# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl --lib=libcoreutils --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=gnulib-tests --aux-dir=build-aux --with-tests --avoid=canonicalize-lgpl --avoid=dummy --avoid=lock --no-libtool --macro-prefix=gl acl alloca announce-gen areadlink-with-size argmatch argv-iter assert atexit autobuild backupfile base64 c-strcase c-strtod c-strtold calloc canon-host canonicalize chown cloexec closein closeout config-h configmake crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 cycle-check d-ino d-type diacrit dirfd dirname dup2 error euidaccess exclude exitfail fchdir fcntl fcntl-safer fdl file-type fileblocks filemode filenamecat filevercmp fnmatch-gnu fopen-safer fprintftime fseeko fsusage ftello ftruncate fts gendocs getdate getgroups gethrxtime getline getloadavg getndelim2 getopt-gnu getpagesize getpass-gnu gettext gettime gettimeofday getugroups getusershell git-version-gen gitlog-to-changelog gnu-make gnumakefile gnupload group-member hard-locale hash hash-pjw host-os human idcache ignore-value inttostr inttypes isapipe lchmod lchown lib-ignore linebuffer link link-follow long-options lstat maintainer-makefile malloc manywarnings mbrtowc mbsalign mbswidth memcasecmp memchr memcmp memcmp2 memcpy memmove mempcpy memrchr memset mgetgroups mkancesdirs mkdir mkdir-p mkstemp mktime modechange mountlist mpsort obstack pathmax perl physmem posix-shell posixtm posixver priv-set progname propername putenv quote quotearg raise randint randperm readlink readtokens readtokens0 readutmp realloc regex rename rename-dest-slash rmdir rmdir-errno root-dev-ino rpmatch safe-read same save-cwd savedir savewd selinux-at settime sig2str sigaction ssize_t stat-macros stat-time stdbool stdlib-safer stpcpy stpncpy strcspn strdup strftime strpbrk strtod strtoimax strtol strtoumax strverscmp sys_stat timespec tzset unicodeio unistd-safer unlink-busy unlinkdir unlocked-io update-copyright uptime useless-if-before-free userspec utimecmp utimens vasprintf-posix vc-list-files verify verror version-etc-fsf warnings wcwidth winsz-ioctl winsz-termios write-any-file xalloc xfreopen xgetcwd xgethostname xmemcoll xnanosleep xprintf xprintf-posix xstrtod xstrtoimax xstrtol xstrtold xstrtoumax yesno
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
|
AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
|
||||||
|
|
||||||
|
@ -71,9 +71,10 @@ BUILT_SOURCES += $(ALLOCA_H)
|
||||||
# We need the following in order to create <alloca.h> when the system
|
# We need the following in order to create <alloca.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
alloca.h: alloca.in.h
|
alloca.h: alloca.in.h
|
||||||
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
cat $(srcdir)/alloca.in.h; \
|
cat $(srcdir)/alloca.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv -f $@-t $@
|
mv -f $@-t $@
|
||||||
MOSTLYCLEANFILES += alloca.h alloca.h-t
|
MOSTLYCLEANFILES += alloca.h alloca.h-t
|
||||||
|
|
||||||
|
@ -118,8 +119,8 @@ BUILT_SOURCES += $(ARPA_INET_H)
|
||||||
# We need the following in order to create <arpa/inet.h> when the system
|
# We need the following in order to create <arpa/inet.h> when the system
|
||||||
# doesn't have one.
|
# doesn't have one.
|
||||||
arpa/inet.h: arpa_inet.in.h
|
arpa/inet.h: arpa_inet.in.h
|
||||||
@MKDIR_P@ arpa
|
$(AM_V_at)$(MKDIR_P) arpa
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -131,7 +132,7 @@ arpa/inet.h: arpa_inet.in.h
|
||||||
-e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \
|
-e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/arpa_inet.in.h; \
|
< $(srcdir)/arpa_inet.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t
|
MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t
|
||||||
MOSTLYCLEANDIRS += arpa
|
MOSTLYCLEANDIRS += arpa
|
||||||
|
@ -336,7 +337,7 @@ EXTRA_libcoreutils_a_SOURCES += closeout.c
|
||||||
# The Automake-defined pkg* macros are appended, in the order
|
# The Automake-defined pkg* macros are appended, in the order
|
||||||
# listed in the Automake 1.10a+ documentation.
|
# listed in the Automake 1.10a+ documentation.
|
||||||
configmake.h: Makefile
|
configmake.h: Makefile
|
||||||
rm -f $@-t
|
$(AM_V_GEN)rm -f $@-t && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
echo '#define PREFIX "$(prefix)"'; \
|
echo '#define PREFIX "$(prefix)"'; \
|
||||||
echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
|
echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
|
||||||
|
@ -365,7 +366,7 @@ configmake.h: Makefile
|
||||||
echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
|
echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
|
||||||
echo '#define PKGLIBDIR "$(pkglibdir)"'; \
|
echo '#define PKGLIBDIR "$(pkglibdir)"'; \
|
||||||
echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
|
echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
|
||||||
} | sed '/""/d' > $@-t
|
} | sed '/""/d' > $@-t && \
|
||||||
if test -f $@ && cmp $@-t $@ > /dev/null; then \
|
if test -f $@ && cmp $@-t $@ > /dev/null; then \
|
||||||
rm -f $@-t; \
|
rm -f $@-t; \
|
||||||
else \
|
else \
|
||||||
|
@ -442,21 +443,23 @@ BUILT_SOURCES += $(DIRENT_H)
|
||||||
# We need the following in order to create <dirent.h> when the system
|
# We need the following in order to create <dirent.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
dirent.h: dirent.in.h
|
dirent.h: dirent.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
-e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
|
-e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
|
||||||
-e 's|@''GNULIB_DIRFD''@|$(GNULIB_DIRFD)|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_SCANDIR''@|$(GNULIB_SCANDIR)|g' \
|
||||||
-e 's|@''GNULIB_ALPHASORT''@|$(GNULIB_ALPHASORT)|g' \
|
-e 's|@''GNULIB_ALPHASORT''@|$(GNULIB_ALPHASORT)|g' \
|
||||||
-e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|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_SCANDIR''@|$(HAVE_SCANDIR)|g' \
|
||||||
-e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \
|
-e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \
|
||||||
-e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
|
-e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/dirent.in.h; \
|
< $(srcdir)/dirent.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += dirent.h dirent.h-t
|
MOSTLYCLEANFILES += dirent.h dirent.h-t
|
||||||
|
|
||||||
|
@ -464,6 +467,15 @@ EXTRA_DIST += dirent.in.h
|
||||||
|
|
||||||
## end gnulib module dirent
|
## end gnulib module dirent
|
||||||
|
|
||||||
|
## begin gnulib module dirent-safer
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += dirent--.h dirent-safer.h opendir-safer.c
|
||||||
|
|
||||||
|
EXTRA_libcoreutils_a_SOURCES += opendir-safer.c
|
||||||
|
|
||||||
|
## end gnulib module dirent-safer
|
||||||
|
|
||||||
## begin gnulib module dirfd
|
## begin gnulib module dirfd
|
||||||
|
|
||||||
|
|
||||||
|
@ -498,7 +510,7 @@ BUILT_SOURCES += $(ERRNO_H)
|
||||||
# We need the following in order to create <errno.h> when the system
|
# We need the following in order to create <errno.h> when the system
|
||||||
# doesn't have one that is POSIX compliant.
|
# doesn't have one that is POSIX compliant.
|
||||||
errno.h: errno.in.h
|
errno.h: errno.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -510,7 +522,7 @@ errno.h: errno.in.h
|
||||||
-e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
|
-e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
|
||||||
-e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
|
-e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
|
||||||
< $(srcdir)/errno.in.h; \
|
< $(srcdir)/errno.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += errno.h errno.h-t
|
MOSTLYCLEANFILES += errno.h errno.h-t
|
||||||
|
|
||||||
|
@ -572,28 +584,31 @@ EXTRA_libcoreutils_a_SOURCES += fclose.c
|
||||||
|
|
||||||
## end gnulib module fclose
|
## end gnulib module fclose
|
||||||
|
|
||||||
## begin gnulib module fcntl
|
## begin gnulib module fcntl-h
|
||||||
|
|
||||||
BUILT_SOURCES += $(FCNTL_H)
|
BUILT_SOURCES += $(FCNTL_H)
|
||||||
|
|
||||||
# We need the following in order to create <fcntl.h> when the system
|
# We need the following in order to create <fcntl.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
fcntl.h: fcntl.in.h
|
fcntl.h: fcntl.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
-e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
|
-e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
|
||||||
-e 's|@''GNULIB_OPEN''@|$(GNULIB_OPEN)|g' \
|
-e 's|@''GNULIB_OPEN''@|$(GNULIB_OPEN)|g' \
|
||||||
|
-e 's|@''GNULIB_OPENAT''@|$(GNULIB_OPENAT)|g' \
|
||||||
-e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
|
-e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
|
||||||
|
-e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
|
||||||
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/fcntl.in.h; \
|
< $(srcdir)/fcntl.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += fcntl.h fcntl.h-t
|
MOSTLYCLEANFILES += fcntl.h fcntl.h-t
|
||||||
|
|
||||||
EXTRA_DIST += fcntl.in.h
|
EXTRA_DIST += fcntl.in.h
|
||||||
|
|
||||||
## end gnulib module fcntl
|
## end gnulib module fcntl-h
|
||||||
|
|
||||||
## begin gnulib module fcntl-safer
|
## begin gnulib module fcntl-safer
|
||||||
|
|
||||||
|
@ -604,6 +619,15 @@ EXTRA_libcoreutils_a_SOURCES += creat-safer.c open-safer.c
|
||||||
|
|
||||||
## end gnulib module fcntl-safer
|
## end gnulib module fcntl-safer
|
||||||
|
|
||||||
|
## begin gnulib module fdopendir
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += fdopendir.c openat-priv.h openat-proc.c
|
||||||
|
|
||||||
|
EXTRA_libcoreutils_a_SOURCES += fdopendir.c openat-proc.c
|
||||||
|
|
||||||
|
## end gnulib module fdopendir
|
||||||
|
|
||||||
## begin gnulib module fflush
|
## begin gnulib module fflush
|
||||||
|
|
||||||
|
|
||||||
|
@ -672,13 +696,13 @@ BUILT_SOURCES += $(FLOAT_H)
|
||||||
# We need the following in order to create <float.h> when the system
|
# We need the following in order to create <float.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
float.h: float.in.h
|
float.h: float.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
-e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
|
-e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
|
||||||
< $(srcdir)/float.in.h; \
|
< $(srcdir)/float.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += float.h float.h-t
|
MOSTLYCLEANFILES += float.h float.h-t
|
||||||
|
|
||||||
|
@ -693,9 +717,10 @@ BUILT_SOURCES += $(FNMATCH_H)
|
||||||
# We need the following in order to create <fnmatch.h> when the system
|
# We need the following in order to create <fnmatch.h> when the system
|
||||||
# doesn't have one that supports the required API.
|
# doesn't have one that supports the required API.
|
||||||
fnmatch.h: fnmatch.in.h
|
fnmatch.h: fnmatch.in.h
|
||||||
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
cat $(srcdir)/fnmatch.in.h; \
|
cat $(srcdir)/fnmatch.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv -f $@-t $@
|
mv -f $@-t $@
|
||||||
MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t
|
MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t
|
||||||
|
|
||||||
|
@ -705,6 +730,15 @@ EXTRA_libcoreutils_a_SOURCES += fnmatch.c fnmatch_loop.c
|
||||||
|
|
||||||
## end gnulib module fnmatch
|
## end gnulib module fnmatch
|
||||||
|
|
||||||
|
## begin gnulib module fopen
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += fopen.c
|
||||||
|
|
||||||
|
EXTRA_libcoreutils_a_SOURCES += fopen.c
|
||||||
|
|
||||||
|
## end gnulib module fopen
|
||||||
|
|
||||||
## begin gnulib module fopen-safer
|
## begin gnulib module fopen-safer
|
||||||
|
|
||||||
|
|
||||||
|
@ -969,9 +1003,10 @@ BUILT_SOURCES += $(GETOPT_H)
|
||||||
# We need the following in order to create <getopt.h> when the system
|
# We need the following in order to create <getopt.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
getopt.h: getopt.in.h
|
getopt.h: getopt.in.h
|
||||||
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
cat $(srcdir)/getopt.in.h; \
|
cat $(srcdir)/getopt.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv -f $@-t $@
|
mv -f $@-t $@
|
||||||
MOSTLYCLEANFILES += getopt.h getopt.h-t
|
MOSTLYCLEANFILES += getopt.h getopt.h-t
|
||||||
|
|
||||||
|
@ -1180,7 +1215,7 @@ BUILT_SOURCES += $(ICONV_H)
|
||||||
# We need the following in order to create <iconv.h> when the system
|
# We need the following in order to create <iconv.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
iconv.h: iconv.in.h
|
iconv.h: iconv.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -1190,7 +1225,7 @@ iconv.h: iconv.in.h
|
||||||
-e 's|@''REPLACE_ICONV_OPEN''@|$(REPLACE_ICONV_OPEN)|g' \
|
-e 's|@''REPLACE_ICONV_OPEN''@|$(REPLACE_ICONV_OPEN)|g' \
|
||||||
-e 's|@''REPLACE_ICONV_UTF''@|$(REPLACE_ICONV_UTF)|g' \
|
-e 's|@''REPLACE_ICONV_UTF''@|$(REPLACE_ICONV_UTF)|g' \
|
||||||
< $(srcdir)/iconv.in.h; \
|
< $(srcdir)/iconv.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += iconv.h iconv.h-t
|
MOSTLYCLEANFILES += iconv.h iconv.h-t
|
||||||
|
|
||||||
|
@ -1206,12 +1241,15 @@ iconv_open-irix.h: iconv_open-irix.gperf
|
||||||
iconv_open-osf.h: iconv_open-osf.gperf
|
iconv_open-osf.h: iconv_open-osf.gperf
|
||||||
$(GPERF) -m 10 $(srcdir)/iconv_open-osf.gperf > $(srcdir)/iconv_open-osf.h-t
|
$(GPERF) -m 10 $(srcdir)/iconv_open-osf.gperf > $(srcdir)/iconv_open-osf.h-t
|
||||||
mv $(srcdir)/iconv_open-osf.h-t $(srcdir)/iconv_open-osf.h
|
mv $(srcdir)/iconv_open-osf.h-t $(srcdir)/iconv_open-osf.h
|
||||||
BUILT_SOURCES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h
|
iconv_open-solaris.h: iconv_open-solaris.gperf
|
||||||
MOSTLYCLEANFILES += iconv_open-aix.h-t iconv_open-hpux.h-t iconv_open-irix.h-t iconv_open-osf.h-t
|
$(GPERF) -m 10 $(srcdir)/iconv_open-solaris.gperf > $(srcdir)/iconv_open-solaris.h-t
|
||||||
MAINTAINERCLEANFILES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h
|
mv $(srcdir)/iconv_open-solaris.h-t $(srcdir)/iconv_open-solaris.h
|
||||||
EXTRA_DIST += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h
|
BUILT_SOURCES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h
|
||||||
|
MOSTLYCLEANFILES += iconv_open-aix.h-t iconv_open-hpux.h-t iconv_open-irix.h-t iconv_open-osf.h-t iconv_open-solaris.h-t
|
||||||
|
MAINTAINERCLEANFILES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h
|
||||||
|
EXTRA_DIST += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h
|
||||||
|
|
||||||
EXTRA_DIST += iconv.in.h iconv_open-aix.gperf iconv_open-hpux.gperf iconv_open-irix.gperf iconv_open-osf.gperf iconv_open.c
|
EXTRA_DIST += iconv.in.h iconv_open-aix.gperf iconv_open-hpux.gperf iconv_open-irix.gperf iconv_open-osf.gperf iconv_open-solaris.gperf iconv_open.c
|
||||||
|
|
||||||
EXTRA_libcoreutils_a_SOURCES += iconv_open.c
|
EXTRA_libcoreutils_a_SOURCES += iconv_open.c
|
||||||
|
|
||||||
|
@ -1264,7 +1302,7 @@ BUILT_SOURCES += $(INTTYPES_H)
|
||||||
# We need the following in order to create <inttypes.h> when the system
|
# We need the following in order to create <inttypes.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
inttypes.h: inttypes.in.h
|
inttypes.h: inttypes.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
|
sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
|
||||||
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
|
@ -1289,7 +1327,7 @@ inttypes.h: inttypes.in.h
|
||||||
-e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_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)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/inttypes.in.h; \
|
< $(srcdir)/inttypes.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += inttypes.h inttypes.h-t
|
MOSTLYCLEANFILES += inttypes.h inttypes.h-t
|
||||||
|
|
||||||
|
@ -1348,6 +1386,15 @@ libcoreutils_a_SOURCES += linebuffer.h linebuffer.c
|
||||||
|
|
||||||
## end gnulib module linebuffer
|
## end gnulib module linebuffer
|
||||||
|
|
||||||
|
## begin gnulib module link
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += link.c
|
||||||
|
|
||||||
|
EXTRA_libcoreutils_a_SOURCES += link.c
|
||||||
|
|
||||||
|
## end gnulib module link
|
||||||
|
|
||||||
## begin gnulib module link-warning
|
## begin gnulib module link-warning
|
||||||
|
|
||||||
LINK_WARNING_H=$(top_srcdir)/build-aux/link-warning.h
|
LINK_WARNING_H=$(top_srcdir)/build-aux/link-warning.h
|
||||||
|
@ -1414,14 +1461,14 @@ uninstall-localcharset: all-local
|
||||||
fi
|
fi
|
||||||
|
|
||||||
charset.alias: config.charset
|
charset.alias: config.charset
|
||||||
rm -f t-$@ $@
|
$(AM_V_GEN)rm -f t-$@ $@ && \
|
||||||
$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@
|
$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
|
||||||
mv t-$@ $@
|
mv t-$@ $@
|
||||||
|
|
||||||
SUFFIXES += .sed .sin
|
SUFFIXES += .sed .sin
|
||||||
.sin.sed:
|
.sin.sed:
|
||||||
rm -f t-$@ $@
|
$(AM_V_GEN)rm -f t-$@ $@ && \
|
||||||
sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@
|
sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
|
||||||
mv t-$@ $@
|
mv t-$@ $@
|
||||||
|
|
||||||
CLEANFILES += charset.alias ref-add.sed ref-del.sed
|
CLEANFILES += charset.alias ref-add.sed ref-del.sed
|
||||||
|
@ -1496,7 +1543,7 @@ BUILT_SOURCES += math.h
|
||||||
# We need the following in order to create <math.h> when the system
|
# We need the following in order to create <math.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
math.h: math.in.h
|
math.h: math.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
|
sed -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -1558,7 +1605,7 @@ math.h: math.in.h
|
||||||
-e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \
|
-e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/math.in.h; \
|
< $(srcdir)/math.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += math.h math.h-t
|
MOSTLYCLEANFILES += math.h math.h-t
|
||||||
|
|
||||||
|
@ -1848,7 +1895,7 @@ BUILT_SOURCES += $(NETDB_H)
|
||||||
# We need the following in order to create <netdb.h> when the system
|
# We need the following in order to create <netdb.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
netdb.h: netdb.in.h
|
netdb.h: netdb.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -1861,7 +1908,7 @@ netdb.h: netdb.in.h
|
||||||
-e 's|@''HAVE_DECL_GETADDRINFO''@|$(HAVE_DECL_GETADDRINFO)|g' \
|
-e 's|@''HAVE_DECL_GETADDRINFO''@|$(HAVE_DECL_GETADDRINFO)|g' \
|
||||||
-e 's|@''HAVE_DECL_GETNAMEINFO''@|$(HAVE_DECL_GETNAMEINFO)|g' \
|
-e 's|@''HAVE_DECL_GETNAMEINFO''@|$(HAVE_DECL_GETNAMEINFO)|g' \
|
||||||
< $(srcdir)/netdb.in.h; \
|
< $(srcdir)/netdb.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += netdb.h netdb.h-t
|
MOSTLYCLEANFILES += netdb.h netdb.h-t
|
||||||
|
|
||||||
|
@ -1876,15 +1923,15 @@ BUILT_SOURCES += $(NETINET_IN_H)
|
||||||
# We need the following in order to create <netinet/in.h> when the system
|
# We need the following in order to create <netinet/in.h> when the system
|
||||||
# doesn't have one.
|
# doesn't have one.
|
||||||
netinet/in.h: netinet_in.in.h
|
netinet/in.h: netinet_in.in.h
|
||||||
@MKDIR_P@ netinet
|
$(AM_V_at)$(MKDIR_P) netinet
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
-e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \
|
-e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \
|
||||||
-e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \
|
-e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \
|
||||||
< $(srcdir)/netinet_in.in.h; \
|
< $(srcdir)/netinet_in.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t
|
MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t
|
||||||
MOSTLYCLEANDIRS += netinet
|
MOSTLYCLEANDIRS += netinet
|
||||||
|
@ -1926,6 +1973,15 @@ libcoreutils_a_SOURCES += openat-die.c
|
||||||
|
|
||||||
## end gnulib module openat-die
|
## end gnulib module openat-die
|
||||||
|
|
||||||
|
## begin gnulib module openat-safer
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += fcntl--.h fcntl-safer.h openat-safer.c
|
||||||
|
|
||||||
|
EXTRA_libcoreutils_a_SOURCES += openat-safer.c
|
||||||
|
|
||||||
|
## end gnulib module openat-safer
|
||||||
|
|
||||||
## begin gnulib module pathmax
|
## begin gnulib module pathmax
|
||||||
|
|
||||||
|
|
||||||
|
@ -2254,19 +2310,19 @@ libcoreutils_a_SOURCES += se-context.in.h se-selinux.in.h
|
||||||
|
|
||||||
BUILT_SOURCES += $(SELINUX_SELINUX_H)
|
BUILT_SOURCES += $(SELINUX_SELINUX_H)
|
||||||
selinux/selinux.h: se-selinux.in.h
|
selinux/selinux.h: se-selinux.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_at)$(MKDIR_P) selinux
|
||||||
$(MKDIR_P) selinux
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
cp $(srcdir)/se-selinux.in.h $@-t
|
cp $(srcdir)/se-selinux.in.h $@-t && \
|
||||||
chmod a-x $@-t
|
chmod a-x $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += selinux/selinux.h selinux/selinux.h-t
|
MOSTLYCLEANFILES += selinux/selinux.h selinux/selinux.h-t
|
||||||
|
|
||||||
BUILT_SOURCES += $(SELINUX_CONTEXT_H)
|
BUILT_SOURCES += $(SELINUX_CONTEXT_H)
|
||||||
selinux/context.h: se-context.in.h
|
selinux/context.h: se-context.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_at)$(MKDIR_P) selinux
|
||||||
$(MKDIR_P) selinux
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
cp $(srcdir)/se-context.in.h $@-t
|
cp $(srcdir)/se-context.in.h $@-t && \
|
||||||
chmod a-x $@-t
|
chmod a-x $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += selinux/context.h selinux/context.h-t
|
MOSTLYCLEANFILES += selinux/context.h selinux/context.h-t
|
||||||
MOSTLYCLEANDIRS += selinux
|
MOSTLYCLEANDIRS += selinux
|
||||||
|
@ -2316,7 +2372,7 @@ BUILT_SOURCES += signal.h
|
||||||
# We need the following in order to create <signal.h> when the system
|
# We need the following in order to create <signal.h> when the system
|
||||||
# doesn't have a complete one.
|
# doesn't have a complete one.
|
||||||
signal.h: signal.in.h
|
signal.h: signal.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -2332,7 +2388,7 @@ signal.h: signal.in.h
|
||||||
-e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \
|
-e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/signal.in.h; \
|
< $(srcdir)/signal.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += signal.h signal.h-t
|
MOSTLYCLEANFILES += signal.h signal.h-t
|
||||||
|
|
||||||
|
@ -2402,13 +2458,13 @@ BUILT_SOURCES += $(STDARG_H)
|
||||||
# We need the following in order to create <stdarg.h> when the system
|
# We need the following in order to create <stdarg.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
stdarg.h: stdarg.in.h
|
stdarg.h: stdarg.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
-e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
|
-e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
|
||||||
< $(srcdir)/stdarg.in.h; \
|
< $(srcdir)/stdarg.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += stdarg.h stdarg.h-t
|
MOSTLYCLEANFILES += stdarg.h stdarg.h-t
|
||||||
|
|
||||||
|
@ -2423,10 +2479,10 @@ BUILT_SOURCES += $(STDBOOL_H)
|
||||||
# We need the following in order to create <stdbool.h> when the system
|
# We need the following in order to create <stdbool.h> when the system
|
||||||
# doesn't have one that works.
|
# doesn't have one that works.
|
||||||
stdbool.h: stdbool.in.h
|
stdbool.h: stdbool.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
|
sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += stdbool.h stdbool.h-t
|
MOSTLYCLEANFILES += stdbool.h stdbool.h-t
|
||||||
|
|
||||||
|
@ -2441,7 +2497,7 @@ BUILT_SOURCES += $(STDDEF_H)
|
||||||
# We need the following in order to create <stddef.h> when the system
|
# We need the following in order to create <stddef.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
stddef.h: stddef.in.h
|
stddef.h: stddef.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -2449,7 +2505,7 @@ stddef.h: stddef.in.h
|
||||||
-e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
|
-e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
|
||||||
-e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
|
-e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
|
||||||
< $(srcdir)/stddef.in.h; \
|
< $(srcdir)/stddef.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += stddef.h stddef.h-t
|
MOSTLYCLEANFILES += stddef.h stddef.h-t
|
||||||
|
|
||||||
|
@ -2464,7 +2520,7 @@ BUILT_SOURCES += $(STDINT_H)
|
||||||
# We need the following in order to create <stdint.h> when the system
|
# We need the following in order to create <stdint.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
stdint.h: stdint.in.h
|
stdint.h: stdint.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
|
sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
|
||||||
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
|
@ -2491,7 +2547,7 @@ stdint.h: stdint.in.h
|
||||||
-e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
|
-e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
|
||||||
-e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
|
-e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
|
||||||
< $(srcdir)/stdint.in.h; \
|
< $(srcdir)/stdint.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += stdint.h stdint.h-t
|
MOSTLYCLEANFILES += stdint.h stdint.h-t
|
||||||
|
|
||||||
|
@ -2506,83 +2562,87 @@ BUILT_SOURCES += stdio.h
|
||||||
# We need the following in order to create <stdio.h> when the system
|
# We need the following in order to create <stdio.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
stdio.h: stdio.in.h
|
stdio.h: stdio.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
-e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|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''@|$(GNULIB_FPRINTF)|g' \
|
||||||
-e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|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''@|$(GNULIB_PRINTF)|g' \
|
||||||
-e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|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_RENAME''@|$(GNULIB_RENAME)|g' \
|
||||||
-e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \
|
-e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \
|
||||||
-e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|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''@|$(GNULIB_VFPRINTF)|g' \
|
||||||
-e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \
|
-e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \
|
||||||
-e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \
|
-e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \
|
||||||
-e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \
|
-e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \
|
||||||
-e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \
|
-e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \
|
||||||
-e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|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_FPURGE''@|$(GNULIB_FPURGE)|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_FPURGE''@|$(REPLACE_FPURGE)|g' \
|
|
||||||
-e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
|
-e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
|
||||||
-e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
|
|
||||||
-e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
|
-e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
|
||||||
-e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|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_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_GETLINE''@|$(REPLACE_GETLINE)|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_PERROR''@|$(REPLACE_PERROR)|g' \
|
||||||
|
-e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
|
||||||
|
-e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
|
||||||
|
-e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|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 '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/stdio.in.h; \
|
< $(srcdir)/stdio.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += stdio.h stdio.h-t
|
MOSTLYCLEANFILES += stdio.h stdio.h-t
|
||||||
|
|
||||||
|
@ -2599,7 +2659,7 @@ BUILT_SOURCES += stdlib.h
|
||||||
# We need the following in order to create <stdlib.h> when the system
|
# We need the following in order to create <stdlib.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
stdlib.h: stdlib.in.h
|
stdlib.h: stdlib.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -2612,6 +2672,7 @@ stdlib.h: stdlib.in.h
|
||||||
-e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
|
-e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
|
||||||
-e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
|
-e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
|
||||||
-e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
|
-e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
|
||||||
|
-e 's|@''GNULIB_MKOSTEMP''@|$(GNULIB_MKOSTEMP)|g' \
|
||||||
-e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
|
-e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
|
||||||
-e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
|
-e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
|
||||||
-e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
|
-e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
|
||||||
|
@ -2626,6 +2687,7 @@ stdlib.h: stdlib.in.h
|
||||||
-e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
|
-e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
|
||||||
-e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
|
-e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
|
||||||
-e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
|
-e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
|
||||||
|
-e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
|
||||||
-e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
|
-e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
|
||||||
-e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
|
-e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
|
||||||
-e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
|
-e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
|
||||||
|
@ -2643,7 +2705,7 @@ stdlib.h: stdlib.in.h
|
||||||
-e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \
|
-e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/stdlib.in.h; \
|
< $(srcdir)/stdlib.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += stdlib.h stdlib.h-t
|
MOSTLYCLEANFILES += stdlib.h stdlib.h-t
|
||||||
|
|
||||||
|
@ -2745,7 +2807,7 @@ BUILT_SOURCES += string.h
|
||||||
# We need the following in order to create <string.h> when the system
|
# We need the following in order to create <string.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
string.h: string.in.h
|
string.h: string.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -2791,7 +2853,6 @@ string.h: string.in.h
|
||||||
-e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
|
-e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
|
||||||
-e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
|
-e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
|
||||||
-e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|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_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
|
||||||
-e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
|
-e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
|
||||||
-e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
|
-e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
|
||||||
|
@ -2807,10 +2868,13 @@ string.h: string.in.h
|
||||||
-e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
|
-e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
|
||||||
-e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
|
-e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
|
||||||
-e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|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_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
|
||||||
|
-e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
|
||||||
|
-e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/string.in.h; \
|
< $(srcdir)/string.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += string.h string.h-t
|
MOSTLYCLEANFILES += string.h string.h-t
|
||||||
|
|
||||||
|
@ -2940,8 +3004,8 @@ BUILT_SOURCES += $(SYS_SELECT_H)
|
||||||
# We need the following in order to create <sys/select.h> when the system
|
# We need the following in order to create <sys/select.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
sys/select.h: sys_select.in.h
|
sys/select.h: sys_select.in.h
|
||||||
@MKDIR_P@ sys
|
$(AM_V_at)$(MKDIR_P) sys
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -2952,7 +3016,7 @@ sys/select.h: sys_select.in.h
|
||||||
-e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \
|
-e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/sys_select.in.h; \
|
< $(srcdir)/sys_select.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += sys/select.h sys/select.h-t
|
MOSTLYCLEANFILES += sys/select.h sys/select.h-t
|
||||||
MOSTLYCLEANDIRS += sys
|
MOSTLYCLEANDIRS += sys
|
||||||
|
@ -2968,7 +3032,8 @@ BUILT_SOURCES += $(SYS_SOCKET_H)
|
||||||
# We need the following in order to create <sys/socket.h> when the system
|
# We need the following in order to create <sys/socket.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
sys/socket.h: sys_socket.in.h
|
sys/socket.h: sys_socket.in.h
|
||||||
@MKDIR_P@ sys
|
$(AM_V_at)$(MKDIR_P) sys
|
||||||
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -2989,13 +3054,15 @@ sys/socket.h: sys_socket.in.h
|
||||||
-e 's|@''GNULIB_SENDTO''@|$(GNULIB_SENDTO)|g' \
|
-e 's|@''GNULIB_SENDTO''@|$(GNULIB_SENDTO)|g' \
|
||||||
-e 's|@''GNULIB_SETSOCKOPT''@|$(GNULIB_SETSOCKOPT)|g' \
|
-e 's|@''GNULIB_SETSOCKOPT''@|$(GNULIB_SETSOCKOPT)|g' \
|
||||||
-e 's|@''GNULIB_SHUTDOWN''@|$(GNULIB_SHUTDOWN)|g' \
|
-e 's|@''GNULIB_SHUTDOWN''@|$(GNULIB_SHUTDOWN)|g' \
|
||||||
|
-e 's|@''GNULIB_ACCEPT4''@|$(GNULIB_ACCEPT4)|g' \
|
||||||
-e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
|
-e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
|
||||||
-e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
|
-e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
|
||||||
-e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \
|
-e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \
|
||||||
-e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \
|
-e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \
|
||||||
|
-e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/sys_socket.in.h; \
|
< $(srcdir)/sys_socket.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv -f $@-t $@
|
mv -f $@-t $@
|
||||||
MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t
|
MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t
|
||||||
MOSTLYCLEANDIRS += sys
|
MOSTLYCLEANDIRS += sys
|
||||||
|
@ -3006,26 +3073,38 @@ EXTRA_DIST += sys_socket.in.h
|
||||||
|
|
||||||
## begin gnulib module sys_stat
|
## begin gnulib module sys_stat
|
||||||
|
|
||||||
BUILT_SOURCES += $(SYS_STAT_H)
|
BUILT_SOURCES += sys/stat.h
|
||||||
|
|
||||||
# We need the following in order to create <sys/stat.h> when the system
|
# We need the following in order to create <sys/stat.h> when the system
|
||||||
# has one that is incomplete.
|
# has one that is incomplete.
|
||||||
sys/stat.h: sys_stat.in.h
|
sys/stat.h: sys_stat.in.h
|
||||||
@MKDIR_P@ sys
|
$(AM_V_at)$(MKDIR_P) sys
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
-e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|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_LCHMOD''@|$(GNULIB_LCHMOD)|g' \
|
-e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \
|
||||||
-e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \
|
-e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \
|
||||||
|
-e 's|@''GNULIB_MKDIRAT''@|$(GNULIB_MKDIRAT)|g' \
|
||||||
|
-e 's|@''GNULIB_MKFIFOAT''@|$(GNULIB_MKFIFOAT)|g' \
|
||||||
|
-e 's|@''GNULIB_MKNODAT''@|$(GNULIB_MKNODAT)|g' \
|
||||||
|
-e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
|
||||||
|
-e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
|
||||||
-e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
|
-e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
|
||||||
-e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
|
-e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
|
||||||
|
-e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
|
||||||
|
-e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
|
||||||
|
-e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
|
||||||
|
-e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
|
||||||
|
-e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \
|
||||||
-e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
|
-e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
|
||||||
-e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
|
-e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/sys_stat.in.h; \
|
< $(srcdir)/sys_stat.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
|
MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
|
||||||
MOSTLYCLEANDIRS += sys
|
MOSTLYCLEANDIRS += sys
|
||||||
|
@ -3041,8 +3120,8 @@ BUILT_SOURCES += $(SYS_TIME_H)
|
||||||
# We need the following in order to create <sys/time.h> when the system
|
# We need the following in order to create <sys/time.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
sys/time.h: sys_time.in.h
|
sys/time.h: sys_time.in.h
|
||||||
@MKDIR_P@ sys
|
$(AM_V_at)$(MKDIR_P) sys
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
|
sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
|
||||||
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
|
@ -3051,7 +3130,7 @@ sys/time.h: sys_time.in.h
|
||||||
-e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
|
-e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
|
||||||
-e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
|
-e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
|
||||||
< $(srcdir)/sys_time.in.h; \
|
< $(srcdir)/sys_time.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += sys/time.h sys/time.h-t
|
MOSTLYCLEANFILES += sys/time.h sys/time.h-t
|
||||||
|
|
||||||
|
@ -3075,7 +3154,7 @@ BUILT_SOURCES += time.h
|
||||||
# We need the following in order to create <time.h> when the system
|
# We need the following in order to create <time.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
time.h: time.in.h
|
time.h: time.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -3088,7 +3167,7 @@ time.h: time.in.h
|
||||||
-e 's|@SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|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 's|@TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
|
||||||
< $(srcdir)/time.in.h; \
|
< $(srcdir)/time.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += time.h time.h-t
|
MOSTLYCLEANFILES += time.h time.h-t
|
||||||
|
|
||||||
|
@ -3139,7 +3218,7 @@ BUILT_SOURCES += unistd.h
|
||||||
# We need the following in order to create an empty placeholder for
|
# We need the following in order to create an empty placeholder for
|
||||||
# <unistd.h> when the system doesn't have one.
|
# <unistd.h> when the system doesn't have one.
|
||||||
unistd.h: unistd.in.h
|
unistd.h: unistd.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
|
sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
|
||||||
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
|
@ -3148,9 +3227,12 @@ unistd.h: unistd.in.h
|
||||||
-e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
|
-e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
|
||||||
-e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
|
-e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
|
||||||
-e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|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_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
|
||||||
-e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|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_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
|
||||||
|
-e 's|@''GNULIB_FCHOWNAT''@|$(GNULIB_FCHOWNAT)|g' \
|
||||||
-e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
|
-e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
|
||||||
-e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
|
-e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
|
||||||
-e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
|
-e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
|
||||||
|
@ -3163,13 +3245,20 @@ unistd.h: unistd.in.h
|
||||||
-e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
|
-e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
|
||||||
-e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
|
-e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
|
||||||
-e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
|
-e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
|
||||||
|
-e 's|@''GNULIB_PIPE2''@|$(GNULIB_PIPE2)|g' \
|
||||||
-e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
|
-e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
|
||||||
|
-e 's|@''GNULIB_READLINKAT''@|$(GNULIB_READLINKAT)|g' \
|
||||||
-e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
|
-e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
|
||||||
|
-e 's|@''GNULIB_SYMLINKAT''@|$(GNULIB_SYMLINKAT)|g' \
|
||||||
-e 's|@''GNULIB_UNISTD_H_GETOPT''@|$(GNULIB_UNISTD_H_GETOPT)|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_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \
|
||||||
|
-e 's|@''GNULIB_UNLINKAT''@|$(GNULIB_UNLINKAT)|g' \
|
||||||
-e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
|
-e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
|
||||||
-e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|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_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_FSYNC''@|$(HAVE_FSYNC)|g' \
|
||||||
-e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
|
-e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
|
||||||
-e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
|
-e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
|
||||||
|
@ -3178,8 +3267,12 @@ unistd.h: unistd.in.h
|
||||||
-e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
|
-e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
|
||||||
-e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \
|
-e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \
|
||||||
-e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
|
-e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
|
||||||
|
-e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
|
||||||
-e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|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_SLEEP''@|$(HAVE_SLEEP)|g' \
|
||||||
|
-e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
|
||||||
|
-e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
|
||||||
-e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
|
-e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
|
||||||
-e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
|
-e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
|
||||||
-e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
|
-e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
|
||||||
|
@ -3188,16 +3281,18 @@ unistd.h: unistd.in.h
|
||||||
-e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
|
-e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
|
||||||
-e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
|
-e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
|
||||||
-e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|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_GETCWD''@|$(REPLACE_GETCWD)|g' \
|
||||||
-e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
|
-e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
|
||||||
-e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
|
-e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
|
||||||
|
-e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
|
||||||
-e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
|
-e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
|
||||||
-e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|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''@|$(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 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/unistd.in.h; \
|
< $(srcdir)/unistd.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += unistd.h unistd.h-t
|
MOSTLYCLEANFILES += unistd.h unistd.h-t
|
||||||
|
|
||||||
|
@ -3389,7 +3484,7 @@ BUILT_SOURCES += $(WCHAR_H)
|
||||||
# We need the following in order to create <wchar.h> when the system
|
# We need the following in order to create <wchar.h> when the system
|
||||||
# version does not work standalone.
|
# version does not work standalone.
|
||||||
wchar.h: wchar.in.h
|
wchar.h: wchar.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
|
||||||
|
@ -3432,7 +3527,7 @@ wchar.h: wchar.in.h
|
||||||
-e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
|
-e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
|
||||||
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
|
||||||
< $(srcdir)/wchar.in.h; \
|
< $(srcdir)/wchar.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += wchar.h wchar.h-t
|
MOSTLYCLEANFILES += wchar.h wchar.h-t
|
||||||
|
|
||||||
|
@ -3456,7 +3551,7 @@ BUILT_SOURCES += $(WCTYPE_H)
|
||||||
# We need the following in order to create <wctype.h> when the system
|
# We need the following in order to create <wctype.h> when the system
|
||||||
# doesn't have one that works with the given compiler.
|
# doesn't have one that works with the given compiler.
|
||||||
wctype.h: wctype.in.h
|
wctype.h: wctype.in.h
|
||||||
rm -f $@-t $@
|
$(AM_V_GEN)rm -f $@-t $@ && \
|
||||||
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
|
||||||
sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
|
sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
|
||||||
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
-e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
|
||||||
|
@ -3466,7 +3561,7 @@ wctype.h: wctype.in.h
|
||||||
-e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
|
-e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
|
||||||
-e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
|
-e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
|
||||||
< $(srcdir)/wctype.in.h; \
|
< $(srcdir)/wctype.in.h; \
|
||||||
} > $@-t
|
} > $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
MOSTLYCLEANFILES += wctype.h wctype.h-t
|
MOSTLYCLEANFILES += wctype.h wctype.h-t
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
struct mapping { int standard_name; const char vendor_name[10 + 1]; };
|
||||||
|
%struct-type
|
||||||
|
%language=ANSI-C
|
||||||
|
%define slot-name standard_name
|
||||||
|
%define hash-function-name mapping_hash
|
||||||
|
%define lookup-function-name mapping_lookup
|
||||||
|
%readonly-tables
|
||||||
|
%global-table
|
||||||
|
%define word-array-name mappings
|
||||||
|
%pic
|
||||||
|
%%
|
||||||
|
# On Solaris 10, look in the "iconv -l" output. Some aliases are advertised but
|
||||||
|
# not actually supported by the iconv() function and by the 'iconv' program.
|
||||||
|
# For example:
|
||||||
|
# $ echo abc | iconv -f 646 -t ISO-8859-1
|
||||||
|
# Not supported 646 to ISO-8859-1
|
||||||
|
# $ echo abc | iconv -f 646 -t ISO8859-1
|
||||||
|
$ abc
|
||||||
|
ASCII, "646"
|
||||||
|
ISO-8859-1, "ISO8859-1"
|
||||||
|
ISO-8859-2, "ISO8859-2"
|
||||||
|
ISO-8859-3, "ISO8859-3"
|
||||||
|
ISO-8859-4, "ISO8859-4"
|
||||||
|
ISO-8859-5, "ISO8859-5"
|
||||||
|
ISO-8859-6, "ISO8859-6"
|
||||||
|
ISO-8859-7, "ISO8859-7"
|
||||||
|
ISO-8859-8, "ISO8859-8"
|
||||||
|
ISO-8859-9, "ISO8859-9"
|
||||||
|
ISO-8859-15, "ISO8859-15"
|
||||||
|
CP1251, "ansi-1251"
|
|
@ -0,0 +1,190 @@
|
||||||
|
/* ANSI-C code produced by gperf version 3.0.3 */
|
||||||
|
/* Command-line: gperf -m 10 ./iconv_open-solaris.gperf */
|
||||||
|
/* Computed positions: -k'10' */
|
||||||
|
|
||||||
|
#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 not based on ISO-646. */
|
||||||
|
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#line 1 "./iconv_open-solaris.gperf"
|
||||||
|
struct mapping { int standard_name; const char vendor_name[10 + 1]; };
|
||||||
|
|
||||||
|
#define TOTAL_KEYWORDS 13
|
||||||
|
#define MIN_WORD_LENGTH 5
|
||||||
|
#define MAX_WORD_LENGTH 11
|
||||||
|
#define MIN_HASH_VALUE 5
|
||||||
|
#define MAX_HASH_VALUE 19
|
||||||
|
/* maximum key range = 15, duplicates = 0 */
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__inline
|
||||||
|
#else
|
||||||
|
#ifdef __cplusplus
|
||||||
|
inline
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
static unsigned int
|
||||||
|
mapping_hash (register const char *str, register unsigned int len)
|
||||||
|
{
|
||||||
|
static const unsigned char asso_values[] =
|
||||||
|
{
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 0,
|
||||||
|
9, 8, 7, 6, 5, 4, 3, 2, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||||
|
20, 20, 20, 20, 20, 20
|
||||||
|
};
|
||||||
|
register int hval = len;
|
||||||
|
|
||||||
|
switch (hval)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
hval += asso_values[(unsigned char)str[9]];
|
||||||
|
/*FALLTHROUGH*/
|
||||||
|
case 9:
|
||||||
|
case 8:
|
||||||
|
case 7:
|
||||||
|
case 6:
|
||||||
|
case 5:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return hval;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct stringpool_t
|
||||||
|
{
|
||||||
|
char stringpool_str5[sizeof("ASCII")];
|
||||||
|
char stringpool_str6[sizeof("CP1251")];
|
||||||
|
char stringpool_str7[sizeof("$ abc")];
|
||||||
|
char stringpool_str10[sizeof("ISO-8859-1")];
|
||||||
|
char stringpool_str11[sizeof("ISO-8859-15")];
|
||||||
|
char stringpool_str12[sizeof("ISO-8859-9")];
|
||||||
|
char stringpool_str13[sizeof("ISO-8859-8")];
|
||||||
|
char stringpool_str14[sizeof("ISO-8859-7")];
|
||||||
|
char stringpool_str15[sizeof("ISO-8859-6")];
|
||||||
|
char stringpool_str16[sizeof("ISO-8859-5")];
|
||||||
|
char stringpool_str17[sizeof("ISO-8859-4")];
|
||||||
|
char stringpool_str18[sizeof("ISO-8859-3")];
|
||||||
|
char stringpool_str19[sizeof("ISO-8859-2")];
|
||||||
|
};
|
||||||
|
static const struct stringpool_t stringpool_contents =
|
||||||
|
{
|
||||||
|
"ASCII",
|
||||||
|
"CP1251",
|
||||||
|
"$ abc",
|
||||||
|
"ISO-8859-1",
|
||||||
|
"ISO-8859-15",
|
||||||
|
"ISO-8859-9",
|
||||||
|
"ISO-8859-8",
|
||||||
|
"ISO-8859-7",
|
||||||
|
"ISO-8859-6",
|
||||||
|
"ISO-8859-5",
|
||||||
|
"ISO-8859-4",
|
||||||
|
"ISO-8859-3",
|
||||||
|
"ISO-8859-2"
|
||||||
|
};
|
||||||
|
#define stringpool ((const char *) &stringpool_contents)
|
||||||
|
|
||||||
|
static const struct mapping mappings[] =
|
||||||
|
{
|
||||||
|
{-1}, {-1}, {-1}, {-1}, {-1},
|
||||||
|
#line 19 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str5, "646"},
|
||||||
|
#line 30 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str6, "ansi-1251"},
|
||||||
|
#line 18 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str7},
|
||||||
|
{-1}, {-1},
|
||||||
|
#line 20 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str10, "ISO8859-1"},
|
||||||
|
#line 29 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str11, "ISO8859-15"},
|
||||||
|
#line 28 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str12, "ISO8859-9"},
|
||||||
|
#line 27 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str13, "ISO8859-8"},
|
||||||
|
#line 26 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str14, "ISO8859-7"},
|
||||||
|
#line 25 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str15, "ISO8859-6"},
|
||||||
|
#line 24 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str16, "ISO8859-5"},
|
||||||
|
#line 23 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str17, "ISO8859-4"},
|
||||||
|
#line 22 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str18, "ISO8859-3"},
|
||||||
|
#line 21 "./iconv_open-solaris.gperf"
|
||||||
|
{(int)(long)&((struct stringpool_t *)0)->stringpool_str19, "ISO8859-2"}
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__inline
|
||||||
|
#ifdef __GNUC_STDC_INLINE__
|
||||||
|
__attribute__ ((__gnu_inline__))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
const struct mapping *
|
||||||
|
mapping_lookup (register const char *str, register unsigned int len)
|
||||||
|
{
|
||||||
|
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
||||||
|
{
|
||||||
|
register int key = mapping_hash (str, len);
|
||||||
|
|
||||||
|
if (key <= MAX_HASH_VALUE && key >= 0)
|
||||||
|
{
|
||||||
|
register int o = mappings[key].standard_name;
|
||||||
|
if (o >= 0)
|
||||||
|
{
|
||||||
|
register const char *s = o + stringpool;
|
||||||
|
|
||||||
|
if (*str == *s && !strcmp (str + 1, s + 1))
|
||||||
|
return &mappings[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
|
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
|
||||||
#line 1
|
#line 1
|
||||||
/* Character set conversion.
|
/* Character set conversion.
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc.
|
Copyright (C) 2007, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -39,6 +39,7 @@
|
||||||
#define ICONV_FLAVOR_HPUX "iconv_open-hpux.h"
|
#define ICONV_FLAVOR_HPUX "iconv_open-hpux.h"
|
||||||
#define ICONV_FLAVOR_IRIX "iconv_open-irix.h"
|
#define ICONV_FLAVOR_IRIX "iconv_open-irix.h"
|
||||||
#define ICONV_FLAVOR_OSF "iconv_open-osf.h"
|
#define ICONV_FLAVOR_OSF "iconv_open-osf.h"
|
||||||
|
#define ICONV_FLAVOR_SOLARIS "iconv_open-solaris.h"
|
||||||
|
|
||||||
#ifdef ICONV_FLAVOR
|
#ifdef ICONV_FLAVOR
|
||||||
# include ICONV_FLAVOR
|
# include ICONV_FLAVOR
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* ignore a value to quiet a compiler warning
|
/* ignore a function return without a compiler warning
|
||||||
|
|
||||||
Copyright (C) 2008 Free Software Foundation, Inc.
|
Copyright (C) 2008-2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -17,13 +17,7 @@
|
||||||
|
|
||||||
/* Written by Jim Meyering. */
|
/* Written by Jim Meyering. */
|
||||||
|
|
||||||
#ifndef __attribute__
|
/* Use these functions to avoid a warning when using a function declared with
|
||||||
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
|
|
||||||
# define __attribute__(x)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Use this function to avoid a warning when using a function declared with
|
|
||||||
gcc's warn_unused_result attribute, but for which you really do want to
|
gcc's warn_unused_result attribute, but for which you really do want to
|
||||||
ignore the result. Traditionally, people have used a "(void)" cast to
|
ignore the result. Traditionally, people have used a "(void)" cast to
|
||||||
indicate that a function's return value is deliberately unused. However,
|
indicate that a function's return value is deliberately unused. However,
|
||||||
|
@ -38,8 +32,6 @@
|
||||||
"copy.c:233: warning: ignoring return value of 'fchown',
|
"copy.c:233: warning: ignoring return value of 'fchown',
|
||||||
declared with attribute warn_unused_result". */
|
declared with attribute warn_unused_result". */
|
||||||
|
|
||||||
static inline void
|
static inline void ignore_value (int i) { (void) i; }
|
||||||
ignore_value (int i __attribute__ ((__unused__)))
|
static inline void ignore_ptr (void* p) { (void) p; }
|
||||||
{
|
/* FIXME: what about aggregate types? */
|
||||||
/* empty */
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#line 1
|
#line 1
|
||||||
/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form
|
/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form
|
||||||
|
|
||||||
Copyright (C) 2005, 2006, 2008 Free Software Foundation, Inc.
|
Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -45,10 +45,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#ifndef EAFNOSUPPORT
|
|
||||||
# define EAFNOSUPPORT EINVAL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define NS_IN6ADDRSZ 16
|
#define NS_IN6ADDRSZ 16
|
||||||
#define NS_INT16SZ 2
|
#define NS_INT16SZ 2
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* Provide a stub lchown function for systems that lack it.
|
/* Provide a stub lchown function for systems that lack it.
|
||||||
|
|
||||||
Copyright (C) 1998, 1999, 2002, 2004, 2006, 2007 Free Software
|
Copyright (C) 1998, 1999, 2002, 2004, 2006, 2007, 2009 Free
|
||||||
Foundation, Inc.
|
Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -30,16 +30,6 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/stat.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.
|
/* Work just like chown, except when FILE is a symbolic link.
|
||||||
In that case, set errno to EOPNOTSUPP and return -1.
|
In that case, set errno to EOPNOTSUPP and return -1.
|
||||||
But if autoconf tests determined that chown modifies
|
But if autoconf tests determined that chown modifies
|
||||||
|
@ -48,7 +38,8 @@
|
||||||
int
|
int
|
||||||
lchown (const char *file, uid_t uid, gid_t gid)
|
lchown (const char *file, uid_t uid, gid_t gid)
|
||||||
{
|
{
|
||||||
#if ! CHOWN_MODIFIES_SYMLINK
|
#if HAVE_CHOWN
|
||||||
|
# if ! CHOWN_MODIFIES_SYMLINK
|
||||||
struct stat stats;
|
struct stat stats;
|
||||||
|
|
||||||
if (lstat (file, &stats) == 0 && S_ISLNK (stats.st_mode))
|
if (lstat (file, &stats) == 0 && S_ISLNK (stats.st_mode))
|
||||||
|
@ -56,7 +47,12 @@ lchown (const char *file, uid_t uid, gid_t gid)
|
||||||
errno = EOPNOTSUPP;
|
errno = EOPNOTSUPP;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
return chown (file, uid, gid);
|
return chown (file, uid, gid);
|
||||||
|
|
||||||
|
#else /* !HAVE_CHOWN */
|
||||||
|
errno = ENOSYS;
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,204 @@
|
||||||
|
/* -*- buffer-read-only: t -*- vi: set ro: */
|
||||||
|
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
|
||||||
|
#line 1
|
||||||
|
/* Emulate link on platforms that lack it, namely native Windows platforms.
|
||||||
|
|
||||||
|
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 <config.h>
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#if !HAVE_LINK
|
||||||
|
# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
|
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# include <windows.h>
|
||||||
|
|
||||||
|
/* CreateHardLink was introduced only in Windows 2000. */
|
||||||
|
typedef BOOL (WINAPI * CreateHardLinkFuncType) (LPCTSTR lpFileName,
|
||||||
|
LPCTSTR lpExistingFileName,
|
||||||
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes);
|
||||||
|
static CreateHardLinkFuncType CreateHardLinkFunc = NULL;
|
||||||
|
static BOOL initialized = FALSE;
|
||||||
|
|
||||||
|
static void
|
||||||
|
initialize (void)
|
||||||
|
{
|
||||||
|
HMODULE kernel32 = LoadLibrary ("kernel32.dll");
|
||||||
|
if (kernel32 != NULL)
|
||||||
|
{
|
||||||
|
CreateHardLinkFunc =
|
||||||
|
(CreateHardLinkFuncType) GetProcAddress (kernel32, "CreateHardLinkA");
|
||||||
|
}
|
||||||
|
initialized = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
link (const char *file1, const char *file2)
|
||||||
|
{
|
||||||
|
char *dir;
|
||||||
|
size_t len1 = strlen (file1);
|
||||||
|
size_t len2 = strlen (file2);
|
||||||
|
if (!initialized)
|
||||||
|
initialize ();
|
||||||
|
if (CreateHardLinkFunc == NULL)
|
||||||
|
{
|
||||||
|
/* System does not support hard links. */
|
||||||
|
errno = EPERM;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/* Reject trailing slashes on non-directories; mingw does not
|
||||||
|
support hard-linking directories. */
|
||||||
|
if ((len1 && (file1[len1 - 1] == '/' || file1[len1 - 1] == '\\'))
|
||||||
|
|| (len2 && (file2[len2 - 1] == '/' || file2[len2 - 1] == '\\')))
|
||||||
|
{
|
||||||
|
struct stat st;
|
||||||
|
if (stat (file1, &st) == 0 && S_ISDIR (st.st_mode))
|
||||||
|
errno = EPERM;
|
||||||
|
else
|
||||||
|
errno = ENOTDIR;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/* CreateHardLink("b/.","a",NULL) creates file "b", so we must check
|
||||||
|
that dirname(file2) exists. */
|
||||||
|
dir = strdup (file2);
|
||||||
|
if (!dir)
|
||||||
|
return -1;
|
||||||
|
{
|
||||||
|
struct stat st;
|
||||||
|
char *p = strchr (dir, '\0');
|
||||||
|
while (dir < p && (*--p != '/' && *p != '\\'));
|
||||||
|
*p = '\0';
|
||||||
|
if (p != dir && stat (dir, &st) == -1)
|
||||||
|
{
|
||||||
|
int saved_errno = errno;
|
||||||
|
free (dir);
|
||||||
|
errno = saved_errno;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
free (dir);
|
||||||
|
}
|
||||||
|
/* Now create the link. */
|
||||||
|
if (CreateHardLinkFunc (file2, file1, NULL) == 0)
|
||||||
|
{
|
||||||
|
/* It is not documented which errors CreateHardLink() can produce.
|
||||||
|
* The following conversions are based on tests on a Windows XP SP2
|
||||||
|
* system. */
|
||||||
|
DWORD err = GetLastError ();
|
||||||
|
switch (err)
|
||||||
|
{
|
||||||
|
case ERROR_ACCESS_DENIED:
|
||||||
|
errno = EACCES;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_INVALID_FUNCTION: /* fs does not support hard links */
|
||||||
|
errno = EPERM;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_NOT_SAME_DEVICE:
|
||||||
|
errno = EXDEV;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_PATH_NOT_FOUND:
|
||||||
|
case ERROR_FILE_NOT_FOUND:
|
||||||
|
errno = ENOENT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_INVALID_PARAMETER:
|
||||||
|
errno = ENAMETOOLONG;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_TOO_MANY_LINKS:
|
||||||
|
errno = EMLINK;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ERROR_ALREADY_EXISTS:
|
||||||
|
errno = EEXIST;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
errno = EIO;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# else /* !Windows */
|
||||||
|
|
||||||
|
# error "This platform lacks a link function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib."
|
||||||
|
|
||||||
|
# endif /* !Windows */
|
||||||
|
#else /* HAVE_LINK */
|
||||||
|
|
||||||
|
# undef link
|
||||||
|
|
||||||
|
/* Create a hard link from FILE1 to FILE2, working around platform bugs. */
|
||||||
|
int
|
||||||
|
rpl_link (char const *file1, char const *file2)
|
||||||
|
{
|
||||||
|
/* Reject trailing slashes on non-directories. */
|
||||||
|
size_t len1 = strlen (file1);
|
||||||
|
size_t len2 = strlen (file2);
|
||||||
|
if ((len1 && file1[len1 - 1] == '/')
|
||||||
|
|| (len2 && file2[len2 - 1] == '/'))
|
||||||
|
{
|
||||||
|
/* Let link() decide whether hard-linking directories is legal.
|
||||||
|
If stat() fails, link() will probably fail for the same
|
||||||
|
reason; so we only have to worry about successful stat() and
|
||||||
|
non-directory. */
|
||||||
|
struct stat st;
|
||||||
|
if (stat (file1, &st) == 0 && !S_ISDIR (st.st_mode))
|
||||||
|
{
|
||||||
|
errno = ENOTDIR;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Fix Cygwin 1.5.x bug where link("a","b/.") creates file "b". */
|
||||||
|
char *dir = strdup (file2);
|
||||||
|
struct stat st;
|
||||||
|
char *p;
|
||||||
|
if (!dir)
|
||||||
|
return -1;
|
||||||
|
/* We already know file2 does not end in slash. Strip off the
|
||||||
|
basename, then check that the dirname exists. */
|
||||||
|
p = strrchr (dir, '/');
|
||||||
|
if (p)
|
||||||
|
{
|
||||||
|
*p = '\0';
|
||||||
|
if (stat (dir, &st) == -1)
|
||||||
|
{
|
||||||
|
int saved_errno = errno;
|
||||||
|
free (dir);
|
||||||
|
errno = saved_errno;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free (dir);
|
||||||
|
}
|
||||||
|
return link (file1, file2);
|
||||||
|
}
|
||||||
|
#endif /* HAVE_LINK */
|
|
@ -219,7 +219,7 @@ mbsalign (const char *src, char *dest, size_t dest_size,
|
||||||
|
|
||||||
dest = mbs_align_pad (dest, dest_end, start_spaces);
|
dest = mbs_align_pad (dest, dest_end, start_spaces);
|
||||||
dest = mempcpy(dest, str_to_print, MIN (n_used_bytes, dest_end - dest));
|
dest = mempcpy(dest, str_to_print, MIN (n_used_bytes, dest_end - dest));
|
||||||
dest = mbs_align_pad (dest, dest_end, end_spaces);
|
mbs_align_pad (dest, dest_end, end_spaces);
|
||||||
}
|
}
|
||||||
|
|
||||||
mbsalign_cleanup:
|
mbsalign_cleanup:
|
||||||
|
@ -229,8 +229,3 @@ mbsalign_cleanup:
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* Local variables:
|
|
||||||
* indent-tabs-mode: nil
|
|
||||||
* End:
|
|
||||||
*/
|
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
memxfrm (char *restrict dest, size_t destsize,
|
memxfrm (char *restrict dest, size_t destsize,
|
||||||
char *restrict src, size_t srcsize)
|
char *restrict src, size_t srcsize)
|
||||||
{
|
{
|
||||||
#if HAVE_STRXFRM
|
#if HAVE_STRXFRM
|
||||||
|
|
||||||
|
@ -59,33 +59,33 @@ memxfrm (char *restrict dest, size_t destsize,
|
||||||
errno = 0;
|
errno = 0;
|
||||||
result += strxfrm (dest + di, src + si, destsize - di) + 1;
|
result += strxfrm (dest + di, src + si, destsize - di) + 1;
|
||||||
if (errno != 0)
|
if (errno != 0)
|
||||||
break;
|
break;
|
||||||
if (result <= result0)
|
if (result <= result0)
|
||||||
{
|
{
|
||||||
errno = ERANGE;
|
errno = ERANGE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == destsize + 1 && si + slen == srcsize)
|
if (result == destsize + 1 && si + slen == srcsize)
|
||||||
{
|
{
|
||||||
/* The destination is exactly the right size, but strxfrm wants
|
/* The destination is exactly the right size, but strxfrm wants
|
||||||
room for a trailing null. Work around the problem with a
|
room for a trailing null. Work around the problem with a
|
||||||
temporary buffer. */
|
temporary buffer. */
|
||||||
size_t bufsize = destsize - di + 1;
|
size_t bufsize = destsize - di + 1;
|
||||||
char stackbuf[4000];
|
char stackbuf[4000];
|
||||||
char *buf = stackbuf;
|
char *buf = stackbuf;
|
||||||
if (sizeof stackbuf < bufsize)
|
if (sizeof stackbuf < bufsize)
|
||||||
{
|
{
|
||||||
buf = malloc (bufsize);
|
buf = malloc (bufsize);
|
||||||
if (! buf)
|
if (! buf)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
strxfrm (buf, src + si, bufsize);
|
strxfrm (buf, src + si, bufsize);
|
||||||
memcpy (dest + di, buf, destsize - di);
|
memcpy (dest + di, buf, destsize - di);
|
||||||
if (sizeof stackbuf < bufsize)
|
if (sizeof stackbuf < bufsize)
|
||||||
free (buf);
|
free (buf);
|
||||||
errno = 0;
|
errno = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
di = (result < destsize ? result : destsize);
|
di = (result < destsize ? result : destsize);
|
||||||
si += slen + 1;
|
si += slen + 1;
|
||||||
|
|
|
@ -76,45 +76,45 @@ mgetgroups (char const *username, gid_t gid, GETGROUPS_T **groups)
|
||||||
|
|
||||||
g = realloc_groupbuf (NULL, max_n_groups);
|
g = realloc_groupbuf (NULL, max_n_groups);
|
||||||
if (g == NULL)
|
if (g == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
GETGROUPS_T *h;
|
GETGROUPS_T *h;
|
||||||
int last_n_groups = max_n_groups;
|
int last_n_groups = max_n_groups;
|
||||||
|
|
||||||
/* getgrouplist updates max_n_groups to num required. */
|
/* getgrouplist updates max_n_groups to num required. */
|
||||||
ng = getgrouplist (username, gid, g, &max_n_groups);
|
ng = getgrouplist (username, gid, g, &max_n_groups);
|
||||||
|
|
||||||
/* Some systems (like Darwin) have a bug where they
|
/* Some systems (like Darwin) have a bug where they
|
||||||
never increase max_n_groups. */
|
never increase max_n_groups. */
|
||||||
if (ng < 0 && last_n_groups == max_n_groups)
|
if (ng < 0 && last_n_groups == max_n_groups)
|
||||||
max_n_groups *= 2;
|
max_n_groups *= 2;
|
||||||
|
|
||||||
if ((h = realloc_groupbuf (g, max_n_groups)) == NULL)
|
if ((h = realloc_groupbuf (g, max_n_groups)) == NULL)
|
||||||
{
|
{
|
||||||
int saved_errno = errno;
|
int saved_errno = errno;
|
||||||
free (g);
|
free (g);
|
||||||
errno = saved_errno;
|
errno = saved_errno;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
g = h;
|
g = h;
|
||||||
|
|
||||||
if (0 <= ng)
|
if (0 <= ng)
|
||||||
{
|
{
|
||||||
*groups = g;
|
*groups = g;
|
||||||
/* On success some systems just return 0 from getgrouplist,
|
/* On success some systems just return 0 from getgrouplist,
|
||||||
so return max_n_groups rather than ng. */
|
so return max_n_groups rather than ng. */
|
||||||
return max_n_groups;
|
return max_n_groups;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* else no username, so fall through and use getgroups. */
|
/* else no username, so fall through and use getgroups. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
max_n_groups = (username
|
max_n_groups = (username
|
||||||
? getugroups (0, NULL, username, gid)
|
? getugroups (0, NULL, username, gid)
|
||||||
: getgroups (0, NULL));
|
: getgroups (0, NULL));
|
||||||
|
|
||||||
/* If we failed to count groups with NULL for a buffer,
|
/* If we failed to count groups with NULL for a buffer,
|
||||||
try again with a non-NULL one, just in case. */
|
try again with a non-NULL one, just in case. */
|
||||||
|
@ -126,8 +126,8 @@ mgetgroups (char const *username, gid_t gid, GETGROUPS_T **groups)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
ng = (username
|
ng = (username
|
||||||
? getugroups (max_n_groups, g, username, gid)
|
? getugroups (max_n_groups, g, username, gid)
|
||||||
: getgroups (max_n_groups, g));
|
: getgroups (max_n_groups, g));
|
||||||
|
|
||||||
if (ng < 0)
|
if (ng < 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* fd-relative mkdir
|
/* fd-relative mkdir
|
||||||
Copyright (C) 2005, 2006 Free Software Foundation, Inc.
|
Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -18,13 +18,12 @@
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
#include "openat.h"
|
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
|
#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
|
||||||
#include "save-cwd.h"
|
#include "openat.h"
|
||||||
#include "openat-priv.h"
|
#include "openat-priv.h"
|
||||||
|
#include "save-cwd.h"
|
||||||
|
|
||||||
/* Solaris 10 has no function like this.
|
/* Solaris 10 has no function like this.
|
||||||
Create a subdirectory, FILE, with mode MODE, in the directory
|
Create a subdirectory, FILE, with mode MODE, in the directory
|
||||||
|
@ -35,8 +34,6 @@
|
||||||
|
|
||||||
#define AT_FUNC_NAME mkdirat
|
#define AT_FUNC_NAME mkdirat
|
||||||
#define AT_FUNC_F1 mkdir
|
#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_PARAM_DECLS , mode_t mode
|
||||||
#define AT_FUNC_POST_FILE_ARGS , mode
|
#define AT_FUNC_POST_FILE_ARGS , mode
|
||||||
#include "at-func.c"
|
#include "at-func.c"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1998, 1999, 2001, 2005, 2006, 2007 Free Software Foundation, Inc.
|
/* Copyright (C) 1998, 1999, 2001, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
|
||||||
This file is derived from the one in the GNU C Library.
|
This file is derived from the one in the GNU C Library.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -40,5 +40,5 @@ int
|
||||||
mkstemp (template)
|
mkstemp (template)
|
||||||
char *template;
|
char *template;
|
||||||
{
|
{
|
||||||
return __gen_tempname (template, __GT_FILE);
|
return __gen_tempname (template, 0, __GT_FILE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,11 @@ orig_open (const char *filename, int flags, mode_t mode)
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#ifndef REPLACE_OPEN_DIRECTORY
|
||||||
|
# define REPLACE_OPEN_DIRECTORY 0
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
open (const char *filename, int flags, ...)
|
open (const char *filename, int flags, ...)
|
||||||
|
@ -98,6 +103,29 @@ open (const char *filename, int flags, ...)
|
||||||
|
|
||||||
fd = orig_open (filename, flags, mode);
|
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
|
||||||
|
&& (mode & 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 OPEN_TRAILING_SLASH_BUG
|
||||||
/* If the filename ends in a slash and fd does not refer to a directory,
|
/* If the filename ends in a slash and fd does not refer to a directory,
|
||||||
then fail.
|
then fail.
|
||||||
|
@ -128,9 +156,9 @@ open (const char *filename, int flags, ...)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FCHDIR_REPLACEMENT
|
#if REPLACE_FCHDIR
|
||||||
if (fd >= 0)
|
if (!REPLACE_OPEN_DIRECTORY && 0 <= fd)
|
||||||
_gl_register_fd (fd, filename);
|
fd = _gl_register_fd (fd, filename);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Internals for openat-like functions.
|
/* Internals for openat-like functions.
|
||||||
|
|
||||||
Copyright (C) 2005, 2006 Free Software Foundation, Inc.
|
Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -23,26 +23,6 @@
|
||||||
#define OPENAT_BUFFER_SIZE 512
|
#define OPENAT_BUFFER_SIZE 512
|
||||||
char *openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file);
|
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
|
/* Trying to access a BUILD_PROC_NAME file will fail on systems without
|
||||||
/proc support, and even on systems *with* ProcFS support. Return
|
/proc support, and even on systems *with* ProcFS support. Return
|
||||||
nonzero if the failure may be legitimate, e.g., because /proc is not
|
nonzero if the failure may be legitimate, e.g., because /proc is not
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Create /proc/self/fd-related names for subfiles of open directories.
|
/* Create /proc/self/fd-related names for subfiles of open directories.
|
||||||
|
|
||||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
Copyright (C) 2006, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -34,7 +34,10 @@
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
|
|
||||||
/* The results of open() in this file are not used with fchdir,
|
/* The results of open() in this file are not used with fchdir,
|
||||||
therefore save some unnecessary work in fchdir.c. */
|
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 open
|
||||||
#undef close
|
#undef close
|
||||||
|
|
||||||
|
@ -54,6 +57,13 @@ openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file)
|
||||||
{
|
{
|
||||||
static int proc_status = 0;
|
static int proc_status = 0;
|
||||||
|
|
||||||
|
/* Make sure the caller gets ENOENT when appropriate. */
|
||||||
|
if (!*file)
|
||||||
|
{
|
||||||
|
buf[0] = '\0';
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
if (! proc_status)
|
if (! proc_status)
|
||||||
{
|
{
|
||||||
/* Set PROC_STATUS to a positive value if /proc/self/fd is
|
/* Set PROC_STATUS to a positive value if /proc/self/fd is
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
/* Invoke openat, but avoid some glitches.
|
||||||
|
|
||||||
|
Copyright (C) 2005, 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 Paul Eggert for open, ported by Eric Blake for openat. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include "fcntl-safer.h"
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include "unistd-safer.h"
|
||||||
|
|
||||||
|
int
|
||||||
|
openat_safer (int fd, char const *file, int flags, ...)
|
||||||
|
{
|
||||||
|
mode_t mode = 0;
|
||||||
|
|
||||||
|
if (flags & O_CREAT)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start (ap, 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 (ap, PROMOTED_MODE_T);
|
||||||
|
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
return fd_safer (openat (fd, file, flags, mode));
|
||||||
|
}
|
|
@ -25,10 +25,16 @@
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
|
#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
|
||||||
#include "fcntl--.h"
|
|
||||||
#include "openat-priv.h"
|
#include "openat-priv.h"
|
||||||
#include "save-cwd.h"
|
#include "save-cwd.h"
|
||||||
|
|
||||||
|
/* We can't use "fcntl--.h", so that openat_safer does not interfere. */
|
||||||
|
#if GNULIB_FCNTL_SAFER
|
||||||
|
# include "fcntl-safer.h"
|
||||||
|
# undef open
|
||||||
|
# define open open_safer
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Replacement for Solaris' openat function.
|
/* Replacement for Solaris' openat function.
|
||||||
<http://www.google.com/search?q=openat+site:docs.sun.com>
|
<http://www.google.com/search?q=openat+site:docs.sun.com>
|
||||||
First, try to simulate it via open ("/proc/self/fd/FD/FILE").
|
First, try to simulate it via open ("/proc/self/fd/FD/FILE").
|
||||||
|
@ -152,74 +158,6 @@ openat_needs_fchdir (void)
|
||||||
return needs_fchdir;
|
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.
|
/* Replacement for Solaris' function by the same name.
|
||||||
<http://www.google.com/search?q=fstatat+site:docs.sun.com>
|
<http://www.google.com/search?q=fstatat+site:docs.sun.com>
|
||||||
First, try to simulate it via l?stat ("/proc/self/fd/FD/FILE").
|
First, try to simulate it via l?stat ("/proc/self/fd/FD/FILE").
|
||||||
|
@ -231,7 +169,7 @@ fdopendir (int fd)
|
||||||
#define AT_FUNC_NAME fstatat
|
#define AT_FUNC_NAME fstatat
|
||||||
#define AT_FUNC_F1 lstat
|
#define AT_FUNC_F1 lstat
|
||||||
#define AT_FUNC_F2 stat
|
#define AT_FUNC_F2 stat
|
||||||
#define AT_FUNC_USE_F1_COND flag == AT_SYMLINK_NOFOLLOW
|
#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_PARAM_DECLS , struct stat *st, int flag
|
||||||
#define AT_FUNC_POST_FILE_ARGS , st
|
#define AT_FUNC_POST_FILE_ARGS , st
|
||||||
#include "at-func.c"
|
#include "at-func.c"
|
||||||
|
@ -253,7 +191,7 @@ fdopendir (int fd)
|
||||||
#define AT_FUNC_NAME unlinkat
|
#define AT_FUNC_NAME unlinkat
|
||||||
#define AT_FUNC_F1 rmdir
|
#define AT_FUNC_F1 rmdir
|
||||||
#define AT_FUNC_F2 unlink
|
#define AT_FUNC_F2 unlink
|
||||||
#define AT_FUNC_USE_F1_COND flag == AT_REMOVEDIR
|
#define AT_FUNC_USE_F1_COND AT_REMOVEDIR
|
||||||
#define AT_FUNC_POST_FILE_PARAM_DECLS , int flag
|
#define AT_FUNC_POST_FILE_PARAM_DECLS , int flag
|
||||||
#define AT_FUNC_POST_FILE_ARGS /* empty */
|
#define AT_FUNC_POST_FILE_ARGS /* empty */
|
||||||
#include "at-func.c"
|
#include "at-func.c"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* provide a replacement openat function
|
/* provide a replacement openat function
|
||||||
Copyright (C) 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
|
Copyright (C) 2004-2006, 2008-2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -16,6 +16,9 @@
|
||||||
|
|
||||||
/* written by Jim Meyering */
|
/* written by Jim Meyering */
|
||||||
|
|
||||||
|
#ifndef _GL_HEADER_OPENAT
|
||||||
|
#define _GL_HEADER_OPENAT
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -34,46 +37,10 @@
|
||||||
# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
|
# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its
|
#if !HAVE_OPENAT
|
||||||
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 openat_permissive (int fd, char const *file, int flags, mode_t mode,
|
||||||
int *cwd_errno);
|
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);
|
bool openat_needs_fchdir (void);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -84,19 +51,8 @@ bool openat_needs_fchdir (void);
|
||||||
|
|
||||||
#endif
|
#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_restore_fail (int) ATTRIBUTE_NORETURN;
|
||||||
void openat_save_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
|
/* Using these function names makes application code
|
||||||
slightly more readable than it would be with
|
slightly more readable than it would be with
|
||||||
|
@ -124,3 +80,35 @@ lchmodat (int fd, char const *file, mode_t mode)
|
||||||
{
|
{
|
||||||
return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW);
|
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 */
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
/* Invoke opendir, but avoid some glitches.
|
||||||
|
|
||||||
|
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 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
|
@ -22,6 +22,7 @@
|
||||||
#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */
|
#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */
|
||||||
#include "progname.h"
|
#include "progname.h"
|
||||||
|
|
||||||
|
#include <errno.h> /* get program_invocation_name declaration */
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,4 +61,11 @@ set_program_name (const char *argv0)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
program_name = argv0;
|
program_name = argv0;
|
||||||
|
|
||||||
|
/* On glibc systems, when the gnulib module 'error' is not used, 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
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,12 @@ struct quoting_options
|
||||||
/* Quote the characters indicated by this bit vector even if the
|
/* Quote the characters indicated by this bit vector even if the
|
||||||
quoting style would not normally require them to be quoted. */
|
quoting style would not normally require them to be quoted. */
|
||||||
unsigned int quote_these_too[(UCHAR_MAX / INT_BITS) + 1];
|
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. */
|
/* Names of quoting styles. */
|
||||||
|
@ -146,6 +152,19 @@ set_quoting_flags (struct quoting_options *o, int i)
|
||||||
return r;
|
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. */
|
/* Return quoting options for STYLE, with no extra quoting. */
|
||||||
static struct quoting_options
|
static struct quoting_options
|
||||||
quoting_options_from_style (enum quoting_style style)
|
quoting_options_from_style (enum quoting_style style)
|
||||||
|
@ -185,7 +204,9 @@ static size_t
|
||||||
quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
char const *arg, size_t argsize,
|
char const *arg, size_t argsize,
|
||||||
enum quoting_style quoting_style, int flags,
|
enum quoting_style quoting_style, int flags,
|
||||||
unsigned int const *quote_these_too)
|
unsigned int const *quote_these_too,
|
||||||
|
char const *left_quote,
|
||||||
|
char const *right_quote)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
|
@ -225,34 +246,37 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
|
|
||||||
case locale_quoting_style:
|
case locale_quoting_style:
|
||||||
case clocale_quoting_style:
|
case clocale_quoting_style:
|
||||||
|
case custom_quoting_style:
|
||||||
{
|
{
|
||||||
/* TRANSLATORS:
|
if (quoting_style != custom_quoting_style)
|
||||||
Get translations for open and closing quotation marks.
|
{
|
||||||
|
/* TRANSLATORS:
|
||||||
|
Get translations for open and closing quotation marks.
|
||||||
|
|
||||||
The message catalog should translate "`" to a left
|
The message catalog should translate "`" to a left
|
||||||
quotation mark suitable for the locale, and similarly for
|
quotation mark suitable for the locale, and similarly for
|
||||||
"'". If the catalog has no translation,
|
"'". If the catalog has no translation,
|
||||||
locale_quoting_style quotes `like this', and
|
locale_quoting_style quotes `like this', and
|
||||||
clocale_quoting_style quotes "like this".
|
clocale_quoting_style quotes "like this".
|
||||||
|
|
||||||
For example, an American English Unicode locale should
|
For example, an American English Unicode locale should
|
||||||
translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
|
translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
|
||||||
should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
|
should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
|
||||||
MARK). A British English Unicode locale should instead
|
MARK). A British English Unicode locale should instead
|
||||||
translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
|
translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
|
||||||
U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
|
and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
|
||||||
|
|
||||||
If you don't know what to put here, please see
|
If you don't know what to put here, please see
|
||||||
<http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
|
<http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
|
||||||
and use glyphs suitable for your language. */
|
and use glyphs suitable for your language. */
|
||||||
|
left_quote = gettext_quote (N_("`"), quoting_style);
|
||||||
char const *left = gettext_quote (N_("`"), quoting_style);
|
right_quote = gettext_quote (N_("'"), quoting_style);
|
||||||
char const *right = gettext_quote (N_("'"), quoting_style);
|
}
|
||||||
if (!elide_outer_quotes)
|
if (!elide_outer_quotes)
|
||||||
for (quote_string = left; *quote_string; quote_string++)
|
for (quote_string = left_quote; *quote_string; quote_string++)
|
||||||
STORE (*quote_string);
|
STORE (*quote_string);
|
||||||
backslash_escapes = true;
|
backslash_escapes = true;
|
||||||
quote_string = right;
|
quote_string = right_quote;
|
||||||
quote_string_len = strlen (quote_string);
|
quote_string_len = strlen (quote_string);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -280,6 +304,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
{
|
{
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
unsigned char esc;
|
unsigned char esc;
|
||||||
|
bool is_right_quote = false;
|
||||||
|
|
||||||
if (backslash_escapes
|
if (backslash_escapes
|
||||||
&& quote_string_len
|
&& quote_string_len
|
||||||
|
@ -288,7 +313,7 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
{
|
{
|
||||||
if (elide_outer_quotes)
|
if (elide_outer_quotes)
|
||||||
goto force_outer_quoting_style;
|
goto force_outer_quoting_style;
|
||||||
STORE ('\\');
|
is_right_quote = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
c = arg[i];
|
c = arg[i];
|
||||||
|
@ -300,12 +325,21 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
if (elide_outer_quotes)
|
if (elide_outer_quotes)
|
||||||
goto force_outer_quoting_style;
|
goto force_outer_quoting_style;
|
||||||
STORE ('\\');
|
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')
|
if (i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9')
|
||||||
{
|
{
|
||||||
STORE ('0');
|
STORE ('0');
|
||||||
STORE ('0');
|
STORE ('0');
|
||||||
}
|
}
|
||||||
c = '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)
|
else if (flags & QA_ELIDE_NULL_BYTES)
|
||||||
continue;
|
continue;
|
||||||
|
@ -425,7 +459,15 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
case 'o': case 'p': case 'q': case 'r': case 's': case 't':
|
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 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
|
||||||
/* These characters don't cause problems, no matter what the
|
/* These characters don't cause problems, no matter what the
|
||||||
quoting style is. They cannot start multibyte sequences. */
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -521,6 +563,11 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
STORE ('0' + ((c >> 3) & 7));
|
STORE ('0' + ((c >> 3) & 7));
|
||||||
c = '0' + (c & 7);
|
c = '0' + (c & 7);
|
||||||
}
|
}
|
||||||
|
else if (is_right_quote)
|
||||||
|
{
|
||||||
|
STORE ('\\');
|
||||||
|
is_right_quote = false;
|
||||||
|
}
|
||||||
if (ilim <= i + 1)
|
if (ilim <= i + 1)
|
||||||
break;
|
break;
|
||||||
STORE (c);
|
STORE (c);
|
||||||
|
@ -534,7 +581,8 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
|
|
||||||
if (! ((backslash_escapes || elide_outer_quotes)
|
if (! ((backslash_escapes || elide_outer_quotes)
|
||||||
&& quote_these_too
|
&& quote_these_too
|
||||||
&& quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS))))
|
&& quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS)))
|
||||||
|
&& !is_right_quote)
|
||||||
goto store_c;
|
goto store_c;
|
||||||
|
|
||||||
store_escape:
|
store_escape:
|
||||||
|
@ -563,7 +611,8 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||||
sufficiently quotes the specified characters. */
|
sufficiently quotes the specified characters. */
|
||||||
return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
|
return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
|
||||||
quoting_style,
|
quoting_style,
|
||||||
flags & ~QA_ELIDE_OUTER_QUOTES, NULL);
|
flags & ~QA_ELIDE_OUTER_QUOTES, NULL,
|
||||||
|
left_quote, right_quote);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
|
/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
|
||||||
|
@ -583,7 +632,8 @@ quotearg_buffer (char *buffer, size_t buffersize,
|
||||||
struct quoting_options const *p = o ? o : &default_quoting_options;
|
struct quoting_options const *p = o ? o : &default_quoting_options;
|
||||||
int e = errno;
|
int e = errno;
|
||||||
size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
|
size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
|
||||||
p->style, p->flags, p->quote_these_too);
|
p->style, p->flags, p->quote_these_too,
|
||||||
|
p->left_quote, p->right_quote);
|
||||||
errno = e;
|
errno = e;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -611,10 +661,13 @@ quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size,
|
||||||
/* Elide embedded null bytes if we can't return a size. */
|
/* Elide embedded null bytes if we can't return a size. */
|
||||||
int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES);
|
int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES);
|
||||||
size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style,
|
size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style,
|
||||||
flags, p->quote_these_too) + 1;
|
flags, p->quote_these_too,
|
||||||
|
p->left_quote,
|
||||||
|
p->right_quote) + 1;
|
||||||
char *buf = xcharalloc (bufsize);
|
char *buf = xcharalloc (bufsize);
|
||||||
quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags,
|
quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags,
|
||||||
p->quote_these_too);
|
p->quote_these_too,
|
||||||
|
p->left_quote, p->right_quote);
|
||||||
errno = e;
|
errno = e;
|
||||||
if (size)
|
if (size)
|
||||||
*size = bufsize - 1;
|
*size = bufsize - 1;
|
||||||
|
@ -703,7 +756,9 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
|
||||||
int flags = options->flags | QA_ELIDE_NULL_BYTES;
|
int flags = options->flags | QA_ELIDE_NULL_BYTES;
|
||||||
size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize,
|
size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize,
|
||||||
options->style, flags,
|
options->style, flags,
|
||||||
options->quote_these_too);
|
options->quote_these_too,
|
||||||
|
options->left_quote,
|
||||||
|
options->right_quote);
|
||||||
|
|
||||||
if (size <= qsize)
|
if (size <= qsize)
|
||||||
{
|
{
|
||||||
|
@ -712,7 +767,9 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
|
||||||
free (val);
|
free (val);
|
||||||
sv[n].val = val = xcharalloc (size);
|
sv[n].val = val = xcharalloc (size);
|
||||||
quotearg_buffer_restyled (val, size, arg, argsize, options->style,
|
quotearg_buffer_restyled (val, size, arg, argsize, options->style,
|
||||||
flags, options->quote_these_too);
|
flags, options->quote_these_too,
|
||||||
|
options->left_quote,
|
||||||
|
options->right_quote);
|
||||||
}
|
}
|
||||||
|
|
||||||
errno = e;
|
errno = e;
|
||||||
|
@ -797,3 +854,36 @@ quotearg_colon_mem (char const *arg, size_t argsize)
|
||||||
{
|
{
|
||||||
return quotearg_char_mem (arg, 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);
|
||||||
|
}
|
||||||
|
|
|
@ -100,7 +100,8 @@ enum quoting_style
|
||||||
c_maybe_quoting_style,
|
c_maybe_quoting_style,
|
||||||
|
|
||||||
/* Like c_quoting_style except always omit the surrounding
|
/* Like c_quoting_style except always omit the surrounding
|
||||||
double-quote characters (ls --quoting-style=escape).
|
double-quote characters and ignore QA_SPLIT_TRIGRAPHS
|
||||||
|
(ls --quoting-style=escape).
|
||||||
|
|
||||||
quotearg_buffer:
|
quotearg_buffer:
|
||||||
"simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b"
|
"simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b"
|
||||||
|
@ -136,7 +137,8 @@ enum quoting_style
|
||||||
locale_quoting_style,
|
locale_quoting_style,
|
||||||
|
|
||||||
/* Like c_quoting_style except use quotation marks appropriate for
|
/* Like c_quoting_style except use quotation marks appropriate for
|
||||||
the locale (ls --quoting-style=clocale).
|
the locale and ignore QA_SPLIT_TRIGRAPHS
|
||||||
|
(ls --quoting-style=clocale).
|
||||||
|
|
||||||
LC_MESSAGES=C
|
LC_MESSAGES=C
|
||||||
quotearg_buffer:
|
quotearg_buffer:
|
||||||
|
@ -157,7 +159,50 @@ enum quoting_style
|
||||||
"\302\253simple\302\273",
|
"\302\253simple\302\273",
|
||||||
"\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273"
|
"\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273"
|
||||||
*/
|
*/
|
||||||
clocale_quoting_style
|
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. */
|
/* Flags for use in set_quoting_flags. */
|
||||||
|
@ -210,7 +255,9 @@ void set_quoting_style (struct quoting_options *o, enum quoting_style s);
|
||||||
set the value of the quoting options for character C to I.
|
set the value of the quoting options for character C to I.
|
||||||
Return the old value. Currently, the only values defined for I are
|
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
|
0 (the default) and 1 (which means to quote the character even if
|
||||||
it would not otherwise be quoted). */
|
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);
|
int set_char_quoting (struct quoting_options *o, char c, int i);
|
||||||
|
|
||||||
/* In O (or in the default if O is null),
|
/* In O (or in the default if O is null),
|
||||||
|
@ -219,6 +266,19 @@ int set_char_quoting (struct quoting_options *o, char c, int i);
|
||||||
behavior. Return the old value. */
|
behavior. Return the old value. */
|
||||||
int set_quoting_flags (struct quoting_options *o, int i);
|
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
|
/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
|
||||||
argument ARG (of size ARGSIZE), using O to control quoting.
|
argument ARG (of size ARGSIZE), using O to control quoting.
|
||||||
If O is null, use the default.
|
If O is null, use the default.
|
||||||
|
@ -287,7 +347,8 @@ char *quotearg_style (enum quoting_style s, char const *arg);
|
||||||
char *quotearg_style_mem (enum quoting_style s,
|
char *quotearg_style_mem (enum quoting_style s,
|
||||||
char const *arg, size_t argsize);
|
char const *arg, size_t argsize);
|
||||||
|
|
||||||
/* Like quotearg (ARG), except also quote any instances of CH. */
|
/* 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);
|
char *quotearg_char (char const *arg, char ch);
|
||||||
|
|
||||||
/* Like quotearg_char (ARG, CH), except it can quote null bytes. */
|
/* Like quotearg_char (ARG, CH), except it can quote null bytes. */
|
||||||
|
@ -299,6 +360,29 @@ char *quotearg_colon (char const *arg);
|
||||||
/* Like quotearg_colon (ARG), except it can quote null bytes. */
|
/* Like quotearg_colon (ARG), except it can quote null bytes. */
|
||||||
char *quotearg_colon_mem (char const *arg, size_t argsize);
|
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. */
|
/* Free any dynamically allocated memory. */
|
||||||
void quotearg_free (void);
|
void quotearg_free (void);
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
/* This index operation is more efficient on many processors */
|
/* This index operation is more efficient on many processors */
|
||||||
#define ind(mm, x) \
|
#define ind(mm, x) \
|
||||||
(* (uint32_t *) ((char *) (mm) \
|
(* (uint32_t *) ((char *) (mm) \
|
||||||
+ ((x) & (ISAAC_WORDS - 1) * sizeof (uint32_t))))
|
+ ((x) & (ISAAC_WORDS - 1) * sizeof (uint32_t))))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The central step. This uses two temporaries, x and y. mm is the
|
* The central step. This uses two temporaries, x and y. mm is the
|
||||||
|
@ -191,18 +191,18 @@ isaac_init (struct isaac_state *s, uint32_t const *seed, size_t seedsize)
|
||||||
isaac_mix (s, seed);
|
isaac_mix (s, seed);
|
||||||
/* Second and subsequent passes (extension to ISAAC) */
|
/* Second and subsequent passes (extension to ISAAC) */
|
||||||
while (seedsize -= ISAAC_BYTES)
|
while (seedsize -= ISAAC_BYTES)
|
||||||
{
|
{
|
||||||
seed += ISAAC_WORDS;
|
seed += ISAAC_WORDS;
|
||||||
for (i = 0; i < ISAAC_WORDS; i++)
|
for (i = 0; i < ISAAC_WORDS; i++)
|
||||||
s->mm[i] += seed[i];
|
s->mm[i] += seed[i];
|
||||||
isaac_mix (s, s->mm);
|
isaac_mix (s, s->mm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* The no seed case (as in reference ISAAC code) */
|
/* The no seed case (as in reference ISAAC code) */
|
||||||
for (i = 0; i < ISAAC_WORDS; i++)
|
for (i = 0; i < ISAAC_WORDS; i++)
|
||||||
s->mm[i] = 0;
|
s->mm[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Final pass */
|
/* Final pass */
|
||||||
|
@ -252,7 +252,7 @@ isaac_seed_data (struct isaac_state *s, void const *buffer, size_t size)
|
||||||
{
|
{
|
||||||
p = (unsigned char *) s->mm + s->c;
|
p = (unsigned char *) s->mm + s->c;
|
||||||
for (i = 0; i < avail; i++)
|
for (i = 0; i < avail; i++)
|
||||||
p[i] ^= buf[i];
|
p[i] ^= buf[i];
|
||||||
buf += avail;
|
buf += avail;
|
||||||
size -= avail;
|
size -= avail;
|
||||||
isaac_mix (s, s->mm);
|
isaac_mix (s, s->mm);
|
||||||
|
|
|
@ -128,75 +128,75 @@ randint_genmax (struct randint_source *s, randint genmax)
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (randmax < genmax)
|
if (randmax < genmax)
|
||||||
{
|
{
|
||||||
/* Calculate how many input bytes will be needed, and read
|
/* Calculate how many input bytes will be needed, and read
|
||||||
the bytes. */
|
the bytes. */
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
randint rmax = randmax;
|
randint rmax = randmax;
|
||||||
unsigned char buf[sizeof randnum];
|
unsigned char buf[sizeof randnum];
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
rmax = shift_left (rmax) + UCHAR_MAX;
|
rmax = shift_left (rmax) + UCHAR_MAX;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
while (rmax < genmax);
|
while (rmax < genmax);
|
||||||
|
|
||||||
randread (source, buf, i);
|
randread (source, buf, i);
|
||||||
|
|
||||||
/* Increase RANDMAX by appending random bytes to RANDNUM and
|
/* Increase RANDMAX by appending random bytes to RANDNUM and
|
||||||
UCHAR_MAX to RANDMAX until RANDMAX is no less than
|
UCHAR_MAX to RANDMAX until RANDMAX is no less than
|
||||||
GENMAX. This may lose up to CHAR_BIT bits of information
|
GENMAX. This may lose up to CHAR_BIT bits of information
|
||||||
if shift_right (RANDINT_MAX) < GENMAX, but it is not
|
if shift_right (RANDINT_MAX) < GENMAX, but it is not
|
||||||
worth the programming hassle of saving these bits since
|
worth the programming hassle of saving these bits since
|
||||||
GENMAX is rarely that large in practice. */
|
GENMAX is rarely that large in practice. */
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
randnum = shift_left (randnum) + buf[i];
|
randnum = shift_left (randnum) + buf[i];
|
||||||
randmax = shift_left (randmax) + UCHAR_MAX;
|
randmax = shift_left (randmax) + UCHAR_MAX;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
while (randmax < genmax);
|
while (randmax < genmax);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (randmax == genmax)
|
if (randmax == genmax)
|
||||||
{
|
{
|
||||||
s->randnum = s->randmax = 0;
|
s->randnum = s->randmax = 0;
|
||||||
return randnum;
|
return randnum;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* GENMAX < RANDMAX, so attempt to generate a random number
|
/* GENMAX < RANDMAX, so attempt to generate a random number
|
||||||
by taking RANDNUM modulo GENMAX+1. This will choose
|
by taking RANDNUM modulo GENMAX+1. This will choose
|
||||||
fairly so long as RANDNUM falls within an integral
|
fairly so long as RANDNUM falls within an integral
|
||||||
multiple of GENMAX+1; otherwise, LAST_USABLE_CHOICE < RANDNUM,
|
multiple of GENMAX+1; otherwise, LAST_USABLE_CHOICE < RANDNUM,
|
||||||
so discard this attempt and try again.
|
so discard this attempt and try again.
|
||||||
|
|
||||||
Since GENMAX cannot be RANDINT_MAX, CHOICES cannot be
|
Since GENMAX cannot be RANDINT_MAX, CHOICES cannot be
|
||||||
zero and there is no need to worry about dividing by
|
zero and there is no need to worry about dividing by
|
||||||
zero. */
|
zero. */
|
||||||
|
|
||||||
randint excess_choices = randmax - genmax;
|
randint excess_choices = randmax - genmax;
|
||||||
randint unusable_choices = excess_choices % choices;
|
randint unusable_choices = excess_choices % choices;
|
||||||
randint last_usable_choice = randmax - unusable_choices;
|
randint last_usable_choice = randmax - unusable_choices;
|
||||||
randint reduced_randnum = randnum % choices;
|
randint reduced_randnum = randnum % choices;
|
||||||
|
|
||||||
if (randnum <= last_usable_choice)
|
if (randnum <= last_usable_choice)
|
||||||
{
|
{
|
||||||
s->randnum = randnum / choices;
|
s->randnum = randnum / choices;
|
||||||
s->randmax = excess_choices / choices;
|
s->randmax = excess_choices / choices;
|
||||||
return reduced_randnum;
|
return reduced_randnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retry, but retain the randomness from the fact that RANDNUM fell
|
/* Retry, but retain the randomness from the fact that RANDNUM fell
|
||||||
into the range LAST_USABLE_CHOICE+1 .. RANDMAX. */
|
into the range LAST_USABLE_CHOICE+1 .. RANDMAX. */
|
||||||
randnum = reduced_randnum;
|
randnum = reduced_randnum;
|
||||||
randmax = unusable_choices - 1;
|
randmax = unusable_choices - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,21 +79,21 @@ randperm_new (struct randint_source *r, size_t h, size_t n)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
v = xnmalloc (n, sizeof *v);
|
v = xnmalloc (n, sizeof *v);
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
v[i] = i;
|
v[i] = i;
|
||||||
|
|
||||||
for (i = 0; i < h; i++)
|
for (i = 0; i < h; i++)
|
||||||
{
|
{
|
||||||
size_t j = i + randint_choose (r, n - i);
|
size_t j = i + randint_choose (r, n - i);
|
||||||
size_t t = v[i];
|
size_t t = v[i];
|
||||||
v[i] = v[j];
|
v[i] = v[j];
|
||||||
v[j] = t;
|
v[j] = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
v = xnrealloc (v, h, sizeof *v);
|
v = xnrealloc (v, h, sizeof *v);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,8 +100,8 @@ struct randread_source
|
||||||
/* Up to a buffer's worth of pseudorandom data. */
|
/* Up to a buffer's worth of pseudorandom data. */
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
uint32_t w[ISAAC_WORDS];
|
uint32_t w[ISAAC_WORDS];
|
||||||
unsigned char b[ISAAC_BYTES];
|
unsigned char b[ISAAC_BYTES];
|
||||||
} data;
|
} data;
|
||||||
} isaac;
|
} isaac;
|
||||||
} buf;
|
} buf;
|
||||||
|
@ -115,8 +115,8 @@ randread_error (void const *file_name)
|
||||||
{
|
{
|
||||||
if (file_name)
|
if (file_name)
|
||||||
error (exit_failure, errno,
|
error (exit_failure, errno,
|
||||||
_(errno == 0 ? "%s: end of file" : "%s: read error"),
|
_(errno == 0 ? "%s: end of file" : "%s: read error"),
|
||||||
quotearg_colon (file_name));
|
quotearg_colon (file_name));
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,18 +155,18 @@ randread_new (char const *name, size_t bytes_bound)
|
||||||
struct randread_source *s;
|
struct randread_source *s;
|
||||||
|
|
||||||
if (name)
|
if (name)
|
||||||
if (! (source = fopen_safer (name, "rb")))
|
if (! (source = fopen_safer (name, "rb")))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
s = simple_new (source, name);
|
s = simple_new (source, name);
|
||||||
|
|
||||||
if (source)
|
if (source)
|
||||||
setvbuf (source, s->buf.c, _IOFBF, MIN (sizeof s->buf.c, bytes_bound));
|
setvbuf (source, s->buf.c, _IOFBF, MIN (sizeof s->buf.c, bytes_bound));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s->buf.isaac.buffered = 0;
|
s->buf.isaac.buffered = 0;
|
||||||
isaac_seed (&s->buf.isaac.state);
|
isaac_seed (&s->buf.isaac.state);
|
||||||
}
|
}
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,7 @@ readsource (struct randread_source *s, unsigned char *p, size_t size)
|
||||||
p += inbytes;
|
p += inbytes;
|
||||||
size -= inbytes;
|
size -= inbytes;
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
break;
|
break;
|
||||||
errno = (ferror (s->source) ? fread_errno : 0);
|
errno = (ferror (s->source) ? fread_errno : 0);
|
||||||
s->handler (s->handler_arg);
|
s->handler (s->handler_arg);
|
||||||
}
|
}
|
||||||
|
@ -224,34 +224,34 @@ readisaac (struct isaac *isaac, unsigned char *p, size_t size)
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (size <= inbytes)
|
if (size <= inbytes)
|
||||||
{
|
{
|
||||||
memcpy (p, isaac->data.b + ISAAC_BYTES - inbytes, size);
|
memcpy (p, isaac->data.b + ISAAC_BYTES - inbytes, size);
|
||||||
isaac->buffered = inbytes - size;
|
isaac->buffered = inbytes - size;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy (p, isaac->data.b + ISAAC_BYTES - inbytes, inbytes);
|
memcpy (p, isaac->data.b + ISAAC_BYTES - inbytes, inbytes);
|
||||||
p += inbytes;
|
p += inbytes;
|
||||||
size -= inbytes;
|
size -= inbytes;
|
||||||
|
|
||||||
/* If P is aligned, write to *P directly to avoid the overhead
|
/* If P is aligned, write to *P directly to avoid the overhead
|
||||||
of copying from the buffer. */
|
of copying from the buffer. */
|
||||||
if (ALIGNED_POINTER (p, uint32_t))
|
if (ALIGNED_POINTER (p, uint32_t))
|
||||||
{
|
{
|
||||||
uint32_t *wp = (uint32_t *) p;
|
uint32_t *wp = (uint32_t *) p;
|
||||||
while (ISAAC_BYTES <= size)
|
while (ISAAC_BYTES <= size)
|
||||||
{
|
{
|
||||||
isaac_refill (&isaac->state, wp);
|
isaac_refill (&isaac->state, wp);
|
||||||
wp += ISAAC_WORDS;
|
wp += ISAAC_WORDS;
|
||||||
size -= ISAAC_BYTES;
|
size -= ISAAC_BYTES;
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
{
|
{
|
||||||
isaac->buffered = 0;
|
isaac->buffered = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p = (unsigned char *) wp;
|
p = (unsigned char *) wp;
|
||||||
}
|
}
|
||||||
|
|
||||||
isaac_refill (&isaac->state, isaac->data.w);
|
isaac_refill (&isaac->state, isaac->data.w);
|
||||||
inbytes = ISAAC_BYTES;
|
inbytes = ISAAC_BYTES;
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
a trailing slash. On mingw, rename fails when the destination
|
a trailing slash. On mingw, rename fails when the destination
|
||||||
exists.
|
exists.
|
||||||
|
|
||||||
Copyright (C) 2001, 2002, 2003, 2005, 2006, 2009 Free Software Foundation, Inc.
|
Copyright (C) 2001, 2002, 2003, 2005, 2006, 2009 Free Software
|
||||||
|
Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -21,16 +22,20 @@
|
||||||
/* written by Volker Borchert */
|
/* written by Volker Borchert */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#undef rename
|
#undef rename
|
||||||
|
|
||||||
#if RENAME_DEST_EXISTS_BUG
|
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
/* This replacement must come first, otherwise when cross
|
/* The mingw rename has problems with trailing slashes; it also
|
||||||
* compiling to Windows we will guess that it has the trailing
|
requires use of native Windows calls to allow atomic renames over
|
||||||
* slash bug and entirely miss this one. */
|
existing files. */
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
# include <errno.h>
|
||||||
#include <windows.h>
|
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# include <windows.h>
|
||||||
|
|
||||||
/* Rename the file SRC to DST. This replacement is necessary on
|
/* Rename the file SRC to DST. This replacement is necessary on
|
||||||
Windows, on which the system rename function will not replace
|
Windows, on which the system rename function will not replace
|
||||||
|
@ -114,10 +119,10 @@ rpl_rename (char const *src, char const *dst)
|
||||||
errno = EPERM; /* ? */
|
errno = EPERM; /* ? */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifndef ERROR_FILE_TOO_LARGE
|
# ifndef ERROR_FILE_TOO_LARGE
|
||||||
/* This value is documented but not defined in all versions of windows.h. */
|
/* This value is documented but not defined in all versions of windows.h. */
|
||||||
#define ERROR_FILE_TOO_LARGE 223
|
# define ERROR_FILE_TOO_LARGE 223
|
||||||
#endif
|
# endif
|
||||||
case ERROR_FILE_TOO_LARGE:
|
case ERROR_FILE_TOO_LARGE:
|
||||||
errno = EFBIG;
|
errno = EFBIG;
|
||||||
break;
|
break;
|
||||||
|
@ -129,13 +134,18 @@ rpl_rename (char const *src, char const *dst)
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#elif RENAME_TRAILING_SLASH_BUG
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "dirname.h"
|
#else /* ! W32 platform */
|
||||||
#include "xalloc.h"
|
|
||||||
|
# if RENAME_DEST_EXISTS_BUG
|
||||||
|
# error Please report your platform and this message to bug-gnulib@gnu.org.
|
||||||
|
# elif RENAME_TRAILING_SLASH_BUG
|
||||||
|
# include <stdio.h>
|
||||||
|
# include <stdlib.h>
|
||||||
|
# include <string.h>
|
||||||
|
|
||||||
|
# include "dirname.h"
|
||||||
|
# include "xalloc.h"
|
||||||
|
|
||||||
/* Rename the file SRC to DST, removing any trailing
|
/* Rename the file SRC to DST, removing any trailing
|
||||||
slashes from SRC. Needed for SunOS 4.1.1_U1. */
|
slashes from SRC. Needed for SunOS 4.1.1_U1. */
|
||||||
|
@ -162,4 +172,5 @@ rpl_rename (char const *src, char const *dst)
|
||||||
|
|
||||||
return ret_val;
|
return ret_val;
|
||||||
}
|
}
|
||||||
#endif /* RENAME_TRAILING_SLASH_BUG */
|
# endif /* RENAME_TRAILING_SLASH_BUG */
|
||||||
|
#endif /* ! W32 platform */
|
||||||
|
|
|
@ -34,12 +34,12 @@ get_root_dev_ino (struct dev_ino *root_d_i);
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if (STREQ (Dirname, "/")) \
|
if (STREQ (Dirname, "/")) \
|
||||||
error (0, 0, _("it is dangerous to operate recursively on %s"), \
|
error (0, 0, _("it is dangerous to operate recursively on %s"), \
|
||||||
quote (Dirname)); \
|
quote (Dirname)); \
|
||||||
else \
|
else \
|
||||||
error (0, 0, \
|
error (0, 0, \
|
||||||
_("it is dangerous to operate recursively on %s (same as %s)"), \
|
_("it is dangerous to operate recursively on %s (same as %s)"), \
|
||||||
quote_n (0, Dirname), quote_n (1, "/")); \
|
quote_n (0, Dirname), quote_n (1, "/")); \
|
||||||
error (0, 0, _("use --no-preserve-root to override this failsafe")); \
|
error (0, 0, _("use --no-preserve-root to override this failsafe")); \
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* savedir.c -- save the list of files in a directory in a string
|
/* savedir.c -- save the list of files in a directory in a string
|
||||||
|
|
||||||
Copyright (C) 1990, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
|
Copyright (C) 1990, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
|
||||||
2006 Free Software Foundation, Inc.
|
2006, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include <dirent.h>
|
#include "dirent--.h"
|
||||||
#ifndef _D_EXACT_NAMLEN
|
#ifndef _D_EXACT_NAMLEN
|
||||||
# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name)
|
# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name)
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,18 +35,12 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "openat.h"
|
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
|
|
||||||
#ifndef NAME_SIZE_DEFAULT
|
#ifndef NAME_SIZE_DEFAULT
|
||||||
# define NAME_SIZE_DEFAULT 512
|
# define NAME_SIZE_DEFAULT 512
|
||||||
#endif
|
#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
|
/* Return a freshly allocated string containing the file names
|
||||||
in directory DIRP, separated by '\0' characters;
|
in directory DIRP, separated by '\0' characters;
|
||||||
the end is marked by two '\0' characters in a row.
|
the end is marked by two '\0' characters in a row.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Save and restore the working directory, possibly using a child process.
|
/* Save and restore the working directory, possibly using a child process.
|
||||||
|
|
||||||
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
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -34,10 +34,6 @@
|
||||||
#include "dirname.h"
|
#include "dirname.h"
|
||||||
#include "fcntl-safer.h"
|
#include "fcntl-safer.h"
|
||||||
|
|
||||||
#ifndef ESTALE
|
|
||||||
# define ESTALE -1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Save the working directory into *WD, if it hasn't been saved
|
/* Save the working directory into *WD, if it hasn't been saved
|
||||||
already. Return true if a child has been forked to do the real
|
already. Return true if a child has been forked to do the real
|
||||||
work. */
|
work. */
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <alloca.h>
|
#include <alloca.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
/* Native Win32. */
|
/* Native Win32. */
|
||||||
|
@ -79,6 +80,23 @@ typedef DWORD (WINAPI *PNtQueryInformationFile)
|
||||||
#define PIPE_BUF 512
|
#define PIPE_BUF 512
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define IsConsoleHandle(h) (((long) (h) & 3) == 3)
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
IsSocketHandle(HANDLE h)
|
||||||
|
{
|
||||||
|
WSANETWORKEVENTS ev;
|
||||||
|
|
||||||
|
if (IsConsoleHandle (h))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* Under Wine, it seems that getsockopt returns 0 for pipes too.
|
||||||
|
WSAEnumNetworkEvents instead distinguishes the two correctly. */
|
||||||
|
ev.lNetworkEvents = 0xDEADBEEF;
|
||||||
|
WSAEnumNetworkEvents ((SOCKET) h, NULL, &ev);
|
||||||
|
return ev.lNetworkEvents != 0xDEADBEEF;
|
||||||
|
}
|
||||||
|
|
||||||
/* Compute output fd_sets for libc descriptor FD (whose Win32 handle is H). */
|
/* Compute output fd_sets for libc descriptor FD (whose Win32 handle is H). */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -141,19 +159,37 @@ win32_poll_handle (HANDLE h, int fd, struct bitset *rbits, struct bitset *wbits,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILE_TYPE_CHAR:
|
case FILE_TYPE_CHAR:
|
||||||
ret = WaitForSingleObject (h, 0);
|
|
||||||
write = TRUE;
|
write = TRUE;
|
||||||
|
if (!(rbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1)))))
|
||||||
|
break;
|
||||||
|
|
||||||
|
ret = WaitForSingleObject (h, 0);
|
||||||
if (ret == WAIT_OBJECT_0)
|
if (ret == WAIT_OBJECT_0)
|
||||||
{
|
{
|
||||||
|
if (!IsConsoleHandle (h))
|
||||||
|
{
|
||||||
|
read = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
nbuffer = avail = 0;
|
nbuffer = avail = 0;
|
||||||
bRet = GetNumberOfConsoleInputEvents (h, &nbuffer);
|
bRet = GetNumberOfConsoleInputEvents (h, &nbuffer);
|
||||||
if (!bRet || nbuffer == 0)
|
|
||||||
except = TRUE;
|
/* Screen buffers handles are filtered earlier. */
|
||||||
|
assert (bRet);
|
||||||
|
if (nbuffer == 0)
|
||||||
|
{
|
||||||
|
except = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
irbuffer = (INPUT_RECORD *) alloca (nbuffer * sizeof (INPUT_RECORD));
|
irbuffer = (INPUT_RECORD *) alloca (nbuffer * sizeof (INPUT_RECORD));
|
||||||
bRet = PeekConsoleInput (h, irbuffer, nbuffer, &avail);
|
bRet = PeekConsoleInput (h, irbuffer, nbuffer, &avail);
|
||||||
if (!bRet || avail == 0)
|
if (!bRet || avail == 0)
|
||||||
except = TRUE;
|
{
|
||||||
|
except = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < avail; i++)
|
for (i = 0; i < avail; i++)
|
||||||
if (irbuffer[i].EventType == KEY_EVENT)
|
if (irbuffer[i].EventType == KEY_EVENT)
|
||||||
|
@ -202,7 +238,7 @@ rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds,
|
||||||
fd_set handle_rfds, handle_wfds, handle_xfds;
|
fd_set handle_rfds, handle_wfds, handle_xfds;
|
||||||
struct bitset rbits, wbits, xbits;
|
struct bitset rbits, wbits, xbits;
|
||||||
unsigned char anyfds_in[FD_SETSIZE / CHAR_BIT];
|
unsigned char anyfds_in[FD_SETSIZE / CHAR_BIT];
|
||||||
DWORD ret, wait_timeout, nhandles, nsock;
|
DWORD ret, wait_timeout, nhandles, nsock, nbuffer;
|
||||||
MSG msg;
|
MSG msg;
|
||||||
int i, fd, rc;
|
int i, fd, rc;
|
||||||
|
|
||||||
|
@ -230,7 +266,10 @@ rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds,
|
||||||
nhandles = 1;
|
nhandles = 1;
|
||||||
nsock = 0;
|
nsock = 0;
|
||||||
|
|
||||||
/* Copy descriptors to bitsets. */
|
/* Copy descriptors to bitsets. At the same time, eliminate
|
||||||
|
bits in the "wrong" direction for console input buffers
|
||||||
|
and screen buffers, because screen buffers are waitable
|
||||||
|
and they will block until a character is available. */
|
||||||
memset (&rbits, 0, sizeof (rbits));
|
memset (&rbits, 0, sizeof (rbits));
|
||||||
memset (&wbits, 0, sizeof (wbits));
|
memset (&wbits, 0, sizeof (wbits));
|
||||||
memset (&xbits, 0, sizeof (xbits));
|
memset (&xbits, 0, sizeof (xbits));
|
||||||
|
@ -239,6 +278,11 @@ rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds,
|
||||||
for (i = 0; i < rfds->fd_count; i++)
|
for (i = 0; i < rfds->fd_count; i++)
|
||||||
{
|
{
|
||||||
fd = rfds->fd_array[i];
|
fd = rfds->fd_array[i];
|
||||||
|
h = (HANDLE) _get_osfhandle (fd);
|
||||||
|
if (IsConsoleHandle (h)
|
||||||
|
&& !GetNumberOfConsoleInputEvents (h, &nbuffer))
|
||||||
|
continue;
|
||||||
|
|
||||||
rbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1));
|
rbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1));
|
||||||
anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1));
|
anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1));
|
||||||
}
|
}
|
||||||
|
@ -249,6 +293,11 @@ rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds,
|
||||||
for (i = 0; i < wfds->fd_count; i++)
|
for (i = 0; i < wfds->fd_count; i++)
|
||||||
{
|
{
|
||||||
fd = wfds->fd_array[i];
|
fd = wfds->fd_array[i];
|
||||||
|
h = (HANDLE) _get_osfhandle (fd);
|
||||||
|
if (IsConsoleHandle (h)
|
||||||
|
&& GetNumberOfConsoleInputEvents (h, &nbuffer))
|
||||||
|
continue;
|
||||||
|
|
||||||
wbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1));
|
wbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1));
|
||||||
anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1));
|
anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1));
|
||||||
}
|
}
|
||||||
|
@ -288,11 +337,7 @@ rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Under Wine, it seems that getsockopt returns 0 for pipes too.
|
if (IsSocketHandle (h))
|
||||||
WSAEnumNetworkEvents instead distinguishes the two correctly. */
|
|
||||||
ev.lNetworkEvents = 0xDEADBEEF;
|
|
||||||
WSAEnumNetworkEvents ((SOCKET) h, NULL, &ev);
|
|
||||||
if (ev.lNetworkEvents != 0xDEADBEEF)
|
|
||||||
{
|
{
|
||||||
int requested = FD_CLOSE;
|
int requested = FD_CLOSE;
|
||||||
|
|
||||||
|
|
|
@ -33,56 +33,40 @@
|
||||||
|
|
||||||
#define AT_FUNC_NAME getfileconat
|
#define AT_FUNC_NAME getfileconat
|
||||||
#define AT_FUNC_F1 getfilecon
|
#define AT_FUNC_F1 getfilecon
|
||||||
#define AT_FUNC_F2 getfilecon
|
|
||||||
#define AT_FUNC_USE_F1_COND 1
|
|
||||||
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t *con
|
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t *con
|
||||||
#define AT_FUNC_POST_FILE_ARGS , con
|
#define AT_FUNC_POST_FILE_ARGS , con
|
||||||
#include "at-func.c"
|
#include "at-func.c"
|
||||||
#undef AT_FUNC_NAME
|
#undef AT_FUNC_NAME
|
||||||
#undef AT_FUNC_F1
|
#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_PARAM_DECLS
|
||||||
#undef AT_FUNC_POST_FILE_ARGS
|
#undef AT_FUNC_POST_FILE_ARGS
|
||||||
|
|
||||||
#define AT_FUNC_NAME lgetfileconat
|
#define AT_FUNC_NAME lgetfileconat
|
||||||
#define AT_FUNC_F1 lgetfilecon
|
#define AT_FUNC_F1 lgetfilecon
|
||||||
#define AT_FUNC_F2 lgetfilecon
|
|
||||||
#define AT_FUNC_USE_F1_COND 1
|
|
||||||
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t *con
|
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t *con
|
||||||
#define AT_FUNC_POST_FILE_ARGS , con
|
#define AT_FUNC_POST_FILE_ARGS , con
|
||||||
#include "at-func.c"
|
#include "at-func.c"
|
||||||
#undef AT_FUNC_NAME
|
#undef AT_FUNC_NAME
|
||||||
#undef AT_FUNC_F1
|
#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_PARAM_DECLS
|
||||||
#undef AT_FUNC_POST_FILE_ARGS
|
#undef AT_FUNC_POST_FILE_ARGS
|
||||||
|
|
||||||
#define AT_FUNC_NAME setfileconat
|
#define AT_FUNC_NAME setfileconat
|
||||||
#define AT_FUNC_F1 setfilecon
|
#define AT_FUNC_F1 setfilecon
|
||||||
#define AT_FUNC_F2 setfilecon
|
|
||||||
#define AT_FUNC_USE_F1_COND 1
|
|
||||||
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t con
|
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t con
|
||||||
#define AT_FUNC_POST_FILE_ARGS , con
|
#define AT_FUNC_POST_FILE_ARGS , con
|
||||||
#include "at-func.c"
|
#include "at-func.c"
|
||||||
#undef AT_FUNC_NAME
|
#undef AT_FUNC_NAME
|
||||||
#undef AT_FUNC_F1
|
#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_PARAM_DECLS
|
||||||
#undef AT_FUNC_POST_FILE_ARGS
|
#undef AT_FUNC_POST_FILE_ARGS
|
||||||
|
|
||||||
#define AT_FUNC_NAME lsetfileconat
|
#define AT_FUNC_NAME lsetfileconat
|
||||||
#define AT_FUNC_F1 lsetfilecon
|
#define AT_FUNC_F1 lsetfilecon
|
||||||
#define AT_FUNC_F2 lsetfilecon
|
|
||||||
#define AT_FUNC_USE_F1_COND 1
|
|
||||||
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t con
|
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t con
|
||||||
#define AT_FUNC_POST_FILE_ARGS , con
|
#define AT_FUNC_POST_FILE_ARGS , con
|
||||||
#include "at-func.c"
|
#include "at-func.c"
|
||||||
#undef AT_FUNC_NAME
|
#undef AT_FUNC_NAME
|
||||||
#undef AT_FUNC_F1
|
#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_PARAM_DECLS
|
||||||
#undef AT_FUNC_POST_FILE_ARGS
|
#undef AT_FUNC_POST_FILE_ARGS
|
||||||
|
|
|
@ -20,33 +20,33 @@
|
||||||
/* These are the dir-fd-relative variants of the functions without the
|
/* These are the dir-fd-relative variants of the functions without the
|
||||||
"at" suffix. For example, getfileconat (AT_FDCWD, file, &c) is usually
|
"at" suffix. For example, getfileconat (AT_FDCWD, file, &c) is usually
|
||||||
equivalent to getfilecon (file, &c). The emulation is accomplished
|
equivalent to getfilecon (file, &c). The emulation is accomplished
|
||||||
by first attempting getfilecon ("/proc/self/fd/DIRFD/FILE", &c).
|
by first attempting getfilecon ("/proc/self/fd/DIR_FD/FILE", &c).
|
||||||
Failing that, simulate it via save_cwd/fchdir/getfilecon/restore_cwd.
|
Failing that, simulate it via save_cwd/fchdir/getfilecon/restore_cwd.
|
||||||
If either the save_cwd or the restore_cwd fails (relatively unlikely),
|
If either the save_cwd or the restore_cwd fails (relatively unlikely),
|
||||||
then give a diagnostic and exit nonzero. */
|
then give a diagnostic and exit nonzero. */
|
||||||
|
|
||||||
/* dir-fd-relative getfilecon. Set *CON to the SELinux security context
|
/* dir-fd-relative getfilecon. Set *CON to the SELinux security context
|
||||||
of the file specified by DIRFD and FILE and return the length of *CON.
|
of the file specified by DIR_FD and FILE and return the length of *CON.
|
||||||
DIRFD and FILE are interpreted as for fstatat[*]. A non-NULL *CON
|
DIR_FD and FILE are interpreted as for fstatat[*]. A non-NULL *CON
|
||||||
must be freed with freecon. Upon error, set *CON to NULL, set errno
|
must be freed with freecon. Upon error, set *CON to NULL, set errno
|
||||||
and return -1.
|
and return -1.
|
||||||
[*] with flags=0 here, with flags=AT_SYMLINK_NOFOLLOW for lgetfileconat */
|
[*] with flags=0 here, with flags=AT_SYMLINK_NOFOLLOW for lgetfileconat */
|
||||||
int getfileconat (int dirfd, char const *file, security_context_t *con);
|
int getfileconat (int dir_fd, char const *file, security_context_t *con);
|
||||||
|
|
||||||
/* dir-fd-relative lgetfilecon. This function is just like getfileconat,
|
/* dir-fd-relative lgetfilecon. This function is just like getfileconat,
|
||||||
except when DIRFD and FILE specify a symlink: lgetfileconat operates on
|
except when DIR_FD and FILE specify a symlink: lgetfileconat operates on
|
||||||
the symlink, while getfileconat operates on the referent of the symlink. */
|
the symlink, while getfileconat operates on the referent of the symlink. */
|
||||||
int lgetfileconat (int dirfd, char const *file, security_context_t *con);
|
int lgetfileconat (int dir_fd, char const *file, security_context_t *con);
|
||||||
|
|
||||||
/* dir-fd-relative setfilecon. Set the SELinux security context of
|
/* dir-fd-relative setfilecon. Set the SELinux security context of
|
||||||
the file specified by DIRFD and FILE to CON. DIRFD and FILE are
|
the file specified by DIR_FD and FILE to CON. DIR_FD and FILE are
|
||||||
interpreted as for fstatat[*]. Upon success, return 0.
|
interpreted as for fstatat[*]. Upon success, return 0.
|
||||||
Otherwise, return -1 and set errno. */
|
Otherwise, return -1 and set errno. */
|
||||||
int setfileconat (int dirfd, char const *file, security_context_t con);
|
int setfileconat (int dir_fd, char const *file, security_context_t con);
|
||||||
|
|
||||||
/* dir-fd-relative lsetfilecon. This function is just like setfileconat,
|
/* dir-fd-relative lsetfilecon. This function is just like setfileconat,
|
||||||
except that rather than dereferencing a symlink, this function affects it. */
|
except that rather than dereferencing a symlink, this function affects it. */
|
||||||
/* dir-fd-relative lsetfilecon. This function is just like setfileconat,
|
/* dir-fd-relative lsetfilecon. This function is just like setfileconat,
|
||||||
except when DIRFD and FILE specify a symlink: lsetfileconat operates on
|
except when DIR_FD and FILE specify a symlink: lsetfileconat operates on
|
||||||
the symlink, while setfileconat operates on the referent of the symlink. */
|
the symlink, while setfileconat operates on the referent of the symlink. */
|
||||||
int lsetfileconat (int dirfd, char const *file, security_context_t con);
|
int lsetfileconat (int dir_fd, char const *file, security_context_t con);
|
||||||
|
|
|
@ -234,7 +234,7 @@ qset_acl (char const *name, int desc, mode_t mode)
|
||||||
acl_free (aclp);
|
acl_free (aclp);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
if (saved_errno == ENOSYS)
|
if (saved_errno == ENOSYS || saved_errno == EOPNOTSUPP)
|
||||||
return chmod_or_fchmod (name, desc, mode);
|
return chmod_or_fchmod (name, desc, mode);
|
||||||
errno = saved_errno;
|
errno = saved_errno;
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* settime -- set the system clock
|
/* settime -- set the system clock
|
||||||
|
|
||||||
Copyright (C) 2002, 2004, 2005, 2006, 2007 Free Software
|
Copyright (C) 2002, 2004, 2005, 2006, 2007, 2009 Free Software
|
||||||
Foundation, Inc.
|
Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -27,16 +27,6 @@
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
/* 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
|
|
||||||
|
|
||||||
/* Set the system time. */
|
/* Set the system time. */
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Like stdio.h, but redefine some names to avoid glitches.
|
/* Like stdio.h, but redefine some names to avoid glitches.
|
||||||
|
|
||||||
Copyright (C) 2005, 2006 Free Software Foundation, Inc.
|
Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -20,8 +20,17 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "stdio-safer.h"
|
#include "stdio-safer.h"
|
||||||
|
|
||||||
#undef fopen
|
#if GNULIB_FOPEN_SAFER
|
||||||
#define fopen fopen_safer
|
# undef fopen
|
||||||
|
# define fopen fopen_safer
|
||||||
|
#endif
|
||||||
|
|
||||||
#undef tmpfile
|
#if GNULIB_TMPFILE_SAFER
|
||||||
#define tmpfile tmpfile_safer
|
# undef tmpfile
|
||||||
|
# define tmpfile tmpfile_safer
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GNULIB_POPEN_SAFER
|
||||||
|
# undef popen
|
||||||
|
# define popen popen_safer
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Invoke stdio functions, but avoid some glitches.
|
/* Invoke stdio functions, but avoid some glitches.
|
||||||
|
|
||||||
Copyright (C) 2001, 2003, 2006 Free Software Foundation, Inc.
|
Copyright (C) 2001, 2003, 2006, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -20,4 +20,5 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
FILE *fopen_safer (char const *, char const *);
|
FILE *fopen_safer (char const *, char const *);
|
||||||
|
FILE *popen_safer (char const *, char const *);
|
||||||
FILE *tmpfile_safer (void);
|
FILE *tmpfile_safer (void);
|
||||||
|
|
|
@ -71,6 +71,70 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#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_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_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_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_FPRINTF_POSIX@
|
#if @GNULIB_FPRINTF_POSIX@
|
||||||
# if @REPLACE_FPRINTF@
|
# if @REPLACE_FPRINTF@
|
||||||
|
@ -91,215 +155,37 @@ extern int fprintf (FILE *fp, const char *format, ...)
|
||||||
fprintf)
|
fprintf)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_VFPRINTF_POSIX@
|
#if @GNULIB_FPURGE@
|
||||||
# if @REPLACE_VFPRINTF@
|
# if @REPLACE_FPURGE@
|
||||||
# define vfprintf rpl_vfprintf
|
# define fpurge rpl_fpurge
|
||||||
extern int vfprintf (FILE *fp, const char *format, va_list args)
|
|
||||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
|
||||||
# endif
|
# endif
|
||||||
#elif @GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
# if @REPLACE_FPURGE@ || !@HAVE_DECL_FPURGE@
|
||||||
# define vfprintf rpl_vfprintf
|
/* Discard all pending buffered I/O data on STREAM.
|
||||||
extern int vfprintf (FILE *fp, const char *format, va_list args)
|
STREAM must not be wide-character oriented.
|
||||||
__attribute__ ((__format__ (__printf__, 2, 0)));
|
When discarding pending output, the file position is set back to where it
|
||||||
#elif defined GNULIB_POSIXCHECK
|
was before the write calls. When discarding pending input, the file
|
||||||
# undef vfprintf
|
position is advanced to match the end of the previously read input.
|
||||||
# define vfprintf(s,f,a) \
|
Return 0 if successful. Upon error, return -1 and set errno. */
|
||||||
(GL_LINK_WARNING ("vfprintf is not always POSIX compliant - " \
|
extern int fpurge (FILE *gl_stream);
|
||||||
"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
|
# endif
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
# undef snprintf
|
# undef fpurge
|
||||||
# define snprintf \
|
# define fpurge(f) \
|
||||||
(GL_LINK_WARNING ("snprintf is unportable - " \
|
(GL_LINK_WARNING ("fpurge is not always present - " \
|
||||||
"use gnulib module snprintf for portability"), \
|
"use gnulib module fpurge for portability"), \
|
||||||
snprintf)
|
fpurge (f))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_VSNPRINTF@
|
#if @GNULIB_FPUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||||
# if @REPLACE_VSNPRINTF@
|
# undef fputc
|
||||||
# define vsnprintf rpl_vsnprintf
|
# define fputc rpl_fputc
|
||||||
# endif
|
extern int fputc (int c, FILE *stream);
|
||||||
# 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
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_SPRINTF_POSIX@
|
#if @GNULIB_FPUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||||
# if @REPLACE_SPRINTF@
|
# undef fputs
|
||||||
# define sprintf rpl_sprintf
|
# define fputs rpl_fputs
|
||||||
extern int sprintf (char *str, const char *format, ...)
|
extern int fputs (const char *string, FILE *stream);
|
||||||
__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
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_FREOPEN@
|
#if @GNULIB_FREOPEN@
|
||||||
|
@ -316,22 +202,6 @@ extern FILE * freopen (const char *filename, const char *mode, FILE *stream);
|
||||||
freopen (f, m, s))
|
freopen (f, m, s))
|
||||||
#endif
|
#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@
|
#if @GNULIB_FSEEK@ && @REPLACE_FSEEK@
|
||||||
extern int rpl_fseek (FILE *fp, long offset, int whence);
|
extern int rpl_fseek (FILE *fp, long offset, int whence);
|
||||||
# undef fseek
|
# undef fseek
|
||||||
|
@ -354,18 +224,20 @@ extern int rpl_fseek (FILE *fp, long offset, int whence);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_FTELLO@
|
#if @GNULIB_FSEEKO@
|
||||||
# if @REPLACE_FTELLO@
|
# if @REPLACE_FSEEKO@
|
||||||
# define ftello rpl_ftello
|
/* Provide fseek, fseeko functions that are aware of a preceding
|
||||||
extern off_t ftello (FILE *fp);
|
fflush(), and which detect pipes. */
|
||||||
# define ftell(fp) ftello (fp)
|
# 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
|
# endif
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
# undef ftello
|
# undef fseeko
|
||||||
# define ftello(f) \
|
# define fseeko(f,o,w) \
|
||||||
(GL_LINK_WARNING ("ftello is unportable - " \
|
(GL_LINK_WARNING ("fseeko is unportable - " \
|
||||||
"use gnulib module ftello for portability"), \
|
"use gnulib module fseeko for portability"), \
|
||||||
ftello (f))
|
fseeko (f, o, w))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_FTELL@ && @REPLACE_FTELL@
|
#if @GNULIB_FTELL@ && @REPLACE_FTELL@
|
||||||
|
@ -390,90 +262,18 @@ extern long rpl_ftell (FILE *fp);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_FFLUSH@
|
#if @GNULIB_FTELLO@
|
||||||
# if @REPLACE_FFLUSH@
|
# if @REPLACE_FTELLO@
|
||||||
# define fflush rpl_fflush
|
# define ftello rpl_ftello
|
||||||
/* Flush all pending data on STREAM according to POSIX rules. Both
|
extern off_t ftello (FILE *fp);
|
||||||
output and seekable input streams are supported.
|
# define ftell(fp) ftello (fp)
|
||||||
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
|
# endif
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
# undef fflush
|
# undef ftello
|
||||||
# define fflush(f) \
|
# define ftello(f) \
|
||||||
(GL_LINK_WARNING ("fflush is not always POSIX compliant - " \
|
(GL_LINK_WARNING ("ftello is unportable - " \
|
||||||
"use gnulib module fflush for portable " \
|
"use gnulib module ftello for portability"), \
|
||||||
"POSIX compliance"), \
|
ftello (f))
|
||||||
fflush (f))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if @GNULIB_FPURGE@
|
|
||||||
# if @REPLACE_FPURGE@
|
|
||||||
# define fpurge rpl_fpurge
|
|
||||||
# endif
|
|
||||||
# if @REPLACE_FPURGE@ || !@HAVE_DECL_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. */
|
|
||||||
extern int fpurge (FILE *gl_stream);
|
|
||||||
# endif
|
|
||||||
#elif defined GNULIB_POSIXCHECK
|
|
||||||
# undef fpurge
|
|
||||||
# define fpurge(f) \
|
|
||||||
(GL_LINK_WARNING ("fpurge is not always present - " \
|
|
||||||
"use gnulib module fpurge for portability"), \
|
|
||||||
fpurge (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
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_FWRITE@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
#if @GNULIB_FWRITE@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||||
|
@ -523,6 +323,26 @@ extern ssize_t getline (char **lineptr, size_t *linesize, FILE *stream);
|
||||||
getline (l, s, f))
|
getline (l, s, f))
|
||||||
#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_PERROR@
|
#if @GNULIB_PERROR@
|
||||||
# if @REPLACE_PERROR@
|
# if @REPLACE_PERROR@
|
||||||
# define perror rpl_perror
|
# define perror rpl_perror
|
||||||
|
@ -539,6 +359,213 @@ extern void perror (const char *string);
|
||||||
perror (s))
|
perror (s))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_POPEN@
|
||||||
|
# if @REPLACE_POPEN@
|
||||||
|
# undef popen
|
||||||
|
# define popen rpl_popen
|
||||||
|
extern FILE *popen (const char *cmd, const char *mode);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef popen
|
||||||
|
# define popen(c,m) \
|
||||||
|
(GL_LINK_WARNING ("popen is buggy on some platforms - " \
|
||||||
|
"use gnulib module popen or pipe for more portability"), \
|
||||||
|
popen (c, m))
|
||||||
|
#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_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_PUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
|
||||||
|
# undef puts
|
||||||
|
# define puts rpl_puts
|
||||||
|
extern int puts (const char *string);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_RENAME@
|
||||||
|
# if @REPLACE_RENAME@
|
||||||
|
# undef rename
|
||||||
|
# define rename rpl_rename
|
||||||
|
extern int rename (const char *old, const char *new);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef rename
|
||||||
|
# define rename(o,n) \
|
||||||
|
(GL_LINK_WARNING ("rename is buggy on some platforms - " \
|
||||||
|
"use gnulib module rename for more portability"), \
|
||||||
|
rename (o, n))
|
||||||
|
#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_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_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_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_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_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_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_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
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -207,6 +207,31 @@ extern char * mkdtemp (char * /*template*/);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_MKOSTEMP@
|
||||||
|
# if !@HAVE_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. */
|
||||||
|
extern int mkostemp (char * /*template*/, int /*flags*/);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef mkostemp
|
||||||
|
# define mkostemp(t,f) \
|
||||||
|
(GL_LINK_WARNING ("mkostemp is unportable - " \
|
||||||
|
"use gnulib module mkostemp for portability"), \
|
||||||
|
mkostemp (t, f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if @GNULIB_MKSTEMP@
|
#if @GNULIB_MKSTEMP@
|
||||||
# if @REPLACE_MKSTEMP@
|
# if @REPLACE_MKSTEMP@
|
||||||
/* Create a unique temporary file from TEMPLATE.
|
/* Create a unique temporary file from TEMPLATE.
|
||||||
|
|
|
@ -206,11 +206,11 @@ extern char *strdup (char const *__s);
|
||||||
|
|
||||||
/* Return a newly allocated copy of at most N bytes of STRING. */
|
/* Return a newly allocated copy of at most N bytes of STRING. */
|
||||||
#if @GNULIB_STRNDUP@
|
#if @GNULIB_STRNDUP@
|
||||||
# if ! @HAVE_STRNDUP@
|
# if @REPLACE_STRNDUP@
|
||||||
# undef strndup
|
# undef strndup
|
||||||
# define strndup rpl_strndup
|
# define strndup rpl_strndup
|
||||||
# endif
|
# endif
|
||||||
# if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@
|
# if @REPLACE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@
|
||||||
extern char *strndup (char const *__string, size_t __n);
|
extern char *strndup (char const *__string, size_t __n);
|
||||||
# endif
|
# endif
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
@ -402,7 +402,13 @@ extern char *strcasestr (const char *haystack, const char *needle)
|
||||||
|
|
||||||
See also strsep(). */
|
See also strsep(). */
|
||||||
#if @GNULIB_STRTOK_R@
|
#if @GNULIB_STRTOK_R@
|
||||||
# if ! @HAVE_DECL_STRTOK_R@
|
# if @REPLACE_STRTOK_R@
|
||||||
|
# undef strtok_r
|
||||||
|
# define strtok_r rpl_strtok_r
|
||||||
|
# elif @UNDEFINE_STRTOK_R@
|
||||||
|
# undef strtok_r
|
||||||
|
# endif
|
||||||
|
# if ! @HAVE_DECL_STRTOK_R@ || @REPLACE_STRTOK_R@
|
||||||
extern char *strtok_r (char *restrict s, char const *restrict delim,
|
extern char *strtok_r (char *restrict s, char const *restrict delim,
|
||||||
char **restrict save_ptr);
|
char **restrict save_ptr);
|
||||||
# endif
|
# endif
|
||||||
|
|
|
@ -77,28 +77,28 @@ fraccompare (char const *a, char const *b, char decimal_point)
|
||||||
if (*a == decimal_point && *b == decimal_point)
|
if (*a == decimal_point && *b == decimal_point)
|
||||||
{
|
{
|
||||||
while (*++a == *++b)
|
while (*++a == *++b)
|
||||||
if (! ISDIGIT (*a))
|
if (! ISDIGIT (*a))
|
||||||
return 0;
|
return 0;
|
||||||
if (ISDIGIT (*a) && ISDIGIT (*b))
|
if (ISDIGIT (*a) && ISDIGIT (*b))
|
||||||
return *a - *b;
|
return *a - *b;
|
||||||
if (ISDIGIT (*a))
|
if (ISDIGIT (*a))
|
||||||
goto a_trailing_nonzero;
|
goto a_trailing_nonzero;
|
||||||
if (ISDIGIT (*b))
|
if (ISDIGIT (*b))
|
||||||
goto b_trailing_nonzero;
|
goto b_trailing_nonzero;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (*a++ == decimal_point)
|
else if (*a++ == decimal_point)
|
||||||
{
|
{
|
||||||
a_trailing_nonzero:
|
a_trailing_nonzero:
|
||||||
while (*a == NUMERIC_ZERO)
|
while (*a == NUMERIC_ZERO)
|
||||||
a++;
|
a++;
|
||||||
return ISDIGIT (*a);
|
return ISDIGIT (*a);
|
||||||
}
|
}
|
||||||
else if (*b++ == decimal_point)
|
else if (*b++ == decimal_point)
|
||||||
{
|
{
|
||||||
b_trailing_nonzero:
|
b_trailing_nonzero:
|
||||||
while (*b == NUMERIC_ZERO)
|
while (*b == NUMERIC_ZERO)
|
||||||
b++;
|
b++;
|
||||||
return - ISDIGIT (*b);
|
return - ISDIGIT (*b);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -113,7 +113,7 @@ fraccompare (char const *a, char const *b, char decimal_point)
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
numcompare (char const *a, char const *b,
|
numcompare (char const *a, char const *b,
|
||||||
int decimal_point, int thousands_sep)
|
int decimal_point, int thousands_sep)
|
||||||
{
|
{
|
||||||
unsigned char tmpa = *a;
|
unsigned char tmpa = *a;
|
||||||
unsigned char tmpb = *b;
|
unsigned char tmpb = *b;
|
||||||
|
@ -124,119 +124,119 @@ numcompare (char const *a, char const *b,
|
||||||
if (tmpa == NEGATION_SIGN)
|
if (tmpa == NEGATION_SIGN)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
tmpa = *++a;
|
tmpa = *++a;
|
||||||
while (tmpa == NUMERIC_ZERO || tmpa == thousands_sep);
|
while (tmpa == NUMERIC_ZERO || tmpa == thousands_sep);
|
||||||
if (tmpb != NEGATION_SIGN)
|
if (tmpb != NEGATION_SIGN)
|
||||||
{
|
{
|
||||||
if (tmpa == decimal_point)
|
if (tmpa == decimal_point)
|
||||||
do
|
do
|
||||||
tmpa = *++a;
|
tmpa = *++a;
|
||||||
while (tmpa == NUMERIC_ZERO);
|
while (tmpa == NUMERIC_ZERO);
|
||||||
if (ISDIGIT (tmpa))
|
if (ISDIGIT (tmpa))
|
||||||
return -1;
|
return -1;
|
||||||
while (tmpb == NUMERIC_ZERO || tmpb == thousands_sep)
|
while (tmpb == NUMERIC_ZERO || tmpb == thousands_sep)
|
||||||
tmpb = *++b;
|
tmpb = *++b;
|
||||||
if (tmpb == decimal_point)
|
if (tmpb == decimal_point)
|
||||||
do
|
do
|
||||||
tmpb = *++b;
|
tmpb = *++b;
|
||||||
while (tmpb == NUMERIC_ZERO);
|
while (tmpb == NUMERIC_ZERO);
|
||||||
return - ISDIGIT (tmpb);
|
return - ISDIGIT (tmpb);
|
||||||
}
|
}
|
||||||
do
|
do
|
||||||
tmpb = *++b;
|
tmpb = *++b;
|
||||||
while (tmpb == NUMERIC_ZERO || tmpb == thousands_sep);
|
while (tmpb == NUMERIC_ZERO || tmpb == thousands_sep);
|
||||||
|
|
||||||
while (tmpa == tmpb && ISDIGIT (tmpa))
|
while (tmpa == tmpb && ISDIGIT (tmpa))
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
tmpa = *++a;
|
tmpa = *++a;
|
||||||
while (tmpa == thousands_sep);
|
while (tmpa == thousands_sep);
|
||||||
do
|
do
|
||||||
tmpb = *++b;
|
tmpb = *++b;
|
||||||
while (tmpb == thousands_sep);
|
while (tmpb == thousands_sep);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((tmpa == decimal_point && !ISDIGIT (tmpb))
|
if ((tmpa == decimal_point && !ISDIGIT (tmpb))
|
||||||
|| (tmpb == decimal_point && !ISDIGIT (tmpa)))
|
|| (tmpb == decimal_point && !ISDIGIT (tmpa)))
|
||||||
return fraccompare (b, a, decimal_point);
|
return fraccompare (b, a, decimal_point);
|
||||||
|
|
||||||
tmp = tmpb - tmpa;
|
tmp = tmpb - tmpa;
|
||||||
|
|
||||||
for (log_a = 0; ISDIGIT (tmpa); ++log_a)
|
for (log_a = 0; ISDIGIT (tmpa); ++log_a)
|
||||||
do
|
do
|
||||||
tmpa = *++a;
|
tmpa = *++a;
|
||||||
while (tmpa == thousands_sep);
|
while (tmpa == thousands_sep);
|
||||||
|
|
||||||
for (log_b = 0; ISDIGIT (tmpb); ++log_b)
|
for (log_b = 0; ISDIGIT (tmpb); ++log_b)
|
||||||
do
|
do
|
||||||
tmpb = *++b;
|
tmpb = *++b;
|
||||||
while (tmpb == thousands_sep);
|
while (tmpb == thousands_sep);
|
||||||
|
|
||||||
if (log_a != log_b)
|
if (log_a != log_b)
|
||||||
return log_a < log_b ? 1 : -1;
|
return log_a < log_b ? 1 : -1;
|
||||||
|
|
||||||
if (!log_a)
|
if (!log_a)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
else if (tmpb == NEGATION_SIGN)
|
else if (tmpb == NEGATION_SIGN)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
tmpb = *++b;
|
tmpb = *++b;
|
||||||
while (tmpb == NUMERIC_ZERO || tmpb == thousands_sep);
|
while (tmpb == NUMERIC_ZERO || tmpb == thousands_sep);
|
||||||
if (tmpb == decimal_point)
|
if (tmpb == decimal_point)
|
||||||
do
|
do
|
||||||
tmpb = *++b;
|
tmpb = *++b;
|
||||||
while (tmpb == NUMERIC_ZERO);
|
while (tmpb == NUMERIC_ZERO);
|
||||||
if (ISDIGIT (tmpb))
|
if (ISDIGIT (tmpb))
|
||||||
return 1;
|
return 1;
|
||||||
while (tmpa == NUMERIC_ZERO || tmpa == thousands_sep)
|
while (tmpa == NUMERIC_ZERO || tmpa == thousands_sep)
|
||||||
tmpa = *++a;
|
tmpa = *++a;
|
||||||
if (tmpa == decimal_point)
|
if (tmpa == decimal_point)
|
||||||
do
|
do
|
||||||
tmpa = *++a;
|
tmpa = *++a;
|
||||||
while (tmpa == NUMERIC_ZERO);
|
while (tmpa == NUMERIC_ZERO);
|
||||||
return ISDIGIT (tmpa);
|
return ISDIGIT (tmpa);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (tmpa == NUMERIC_ZERO || tmpa == thousands_sep)
|
while (tmpa == NUMERIC_ZERO || tmpa == thousands_sep)
|
||||||
tmpa = *++a;
|
tmpa = *++a;
|
||||||
while (tmpb == NUMERIC_ZERO || tmpb == thousands_sep)
|
while (tmpb == NUMERIC_ZERO || tmpb == thousands_sep)
|
||||||
tmpb = *++b;
|
tmpb = *++b;
|
||||||
|
|
||||||
while (tmpa == tmpb && ISDIGIT (tmpa))
|
while (tmpa == tmpb && ISDIGIT (tmpa))
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
tmpa = *++a;
|
tmpa = *++a;
|
||||||
while (tmpa == thousands_sep);
|
while (tmpa == thousands_sep);
|
||||||
do
|
do
|
||||||
tmpb = *++b;
|
tmpb = *++b;
|
||||||
while (tmpb == thousands_sep);
|
while (tmpb == thousands_sep);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((tmpa == decimal_point && !ISDIGIT (tmpb))
|
if ((tmpa == decimal_point && !ISDIGIT (tmpb))
|
||||||
|| (tmpb == decimal_point && !ISDIGIT (tmpa)))
|
|| (tmpb == decimal_point && !ISDIGIT (tmpa)))
|
||||||
return fraccompare (a, b, decimal_point);
|
return fraccompare (a, b, decimal_point);
|
||||||
|
|
||||||
tmp = tmpa - tmpb;
|
tmp = tmpa - tmpb;
|
||||||
|
|
||||||
for (log_a = 0; ISDIGIT (tmpa); ++log_a)
|
for (log_a = 0; ISDIGIT (tmpa); ++log_a)
|
||||||
do
|
do
|
||||||
tmpa = *++a;
|
tmpa = *++a;
|
||||||
while (tmpa == thousands_sep);
|
while (tmpa == thousands_sep);
|
||||||
|
|
||||||
for (log_b = 0; ISDIGIT (tmpb); ++log_b)
|
for (log_b = 0; ISDIGIT (tmpb); ++log_b)
|
||||||
do
|
do
|
||||||
tmpb = *++b;
|
tmpb = *++b;
|
||||||
while (tmpb == thousands_sep);
|
while (tmpb == thousands_sep);
|
||||||
|
|
||||||
if (log_a != log_b)
|
if (log_a != log_b)
|
||||||
return log_a < log_b ? -1 : 1;
|
return log_a < log_b ? -1 : 1;
|
||||||
|
|
||||||
if (!log_a)
|
if (!log_a)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
int
|
int
|
||||||
strnumcmp (char const *a, char const *b,
|
strnumcmp (char const *a, char const *b,
|
||||||
int decimal_point, int thousands_sep)
|
int decimal_point, int thousands_sep)
|
||||||
{
|
{
|
||||||
return numcompare (a, b, decimal_point, thousands_sep);
|
return numcompare (a, b, decimal_point, thousands_sep);
|
||||||
}
|
}
|
||||||
|
|
|
@ -426,5 +426,32 @@ extern int rpl_shutdown (int, int);
|
||||||
|
|
||||||
#endif /* HAVE_SYS_SOCKET_H */
|
#endif /* HAVE_SYS_SOCKET_H */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_ACCEPT4@
|
||||||
|
/* Accept a connection on a socket, with specific opening flags.
|
||||||
|
The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
|
||||||
|
and O_TEXT, O_BINARY (defined in "binary-io.h").
|
||||||
|
See also the Linux man page at
|
||||||
|
<http://www.kernel.org/doc/man-pages/online/pages/man2/accept4.2.html>. */
|
||||||
|
# if @HAVE_ACCEPT4@
|
||||||
|
# define accept4 rpl_accept4
|
||||||
|
# endif
|
||||||
|
extern int accept4 (int sockfd, struct sockaddr *addr, socklen_t *addrlen,
|
||||||
|
int flags);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef accept4
|
||||||
|
# define accept4(s,a,l,f) \
|
||||||
|
(GL_LINK_WARNING ("accept4 is unportable - " \
|
||||||
|
"use gnulib module accept4 for portability"), \
|
||||||
|
accept4 (s, a, l, f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _GL_SYS_SOCKET_H */
|
#endif /* _GL_SYS_SOCKET_H */
|
||||||
#endif /* _GL_SYS_SOCKET_H */
|
#endif /* _GL_SYS_SOCKET_H */
|
||||||
|
|
|
@ -306,6 +306,77 @@ extern int rpl_lstat (const char *name, struct stat *buf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_FCHMODAT@
|
||||||
|
# if !@HAVE_FCHMODAT@
|
||||||
|
extern int fchmodat (int fd, char const *file, mode_t mode, int flag);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef fchmodat
|
||||||
|
# define fchmodat(d,n,m,f) \
|
||||||
|
(GL_LINK_WARNING ("fchmodat is not portable - " \
|
||||||
|
"use gnulib module openat for portability"), \
|
||||||
|
fchmodat (d, n, m, f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_FSTATAT@
|
||||||
|
# if @REPLACE_FSTATAT@
|
||||||
|
# undef fstatat
|
||||||
|
# define fstatat rpl_fstatat
|
||||||
|
# endif
|
||||||
|
# if !@HAVE_FSTATAT@ || @REPLACE_FSTATAT@
|
||||||
|
extern int fstatat (int fd, char const *name, struct stat *st, int flags);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef fstatat
|
||||||
|
# define fstatat(d,n,s,f) \
|
||||||
|
(GL_LINK_WARNING ("fstatat is not portable - " \
|
||||||
|
"use gnulib module openat for portability"), \
|
||||||
|
fstatat (d, n, s, f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_MKDIRAT@
|
||||||
|
# if !@HAVE_MKDIRAT@
|
||||||
|
extern int mkdirat (int fd, char const *file, mode_t mode);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef mkdirat
|
||||||
|
# define mkdirat(d,n,m) \
|
||||||
|
(GL_LINK_WARNING ("mkdirat is not portable - " \
|
||||||
|
"use gnulib module openat for portability"), \
|
||||||
|
mkdirat (d, n, m))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MKFIFOAT@
|
||||||
|
# if !@HAVE_MKFIFOAT@
|
||||||
|
int mkfifoat (int fd, char const *file, mode_t mode);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef mkfifoat
|
||||||
|
# define mkfifoat(d,n,m) \
|
||||||
|
(GL_LINK_WARNING ("mkfifoat is not portable - " \
|
||||||
|
"use gnulib module mkfifoat for portability"), \
|
||||||
|
mkfifoat (d, n, m))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_MKNODAT@
|
||||||
|
# if !@HAVE_MKNODAT@
|
||||||
|
int mknodat (int fd, char const *file, mode_t mode, dev_t dev);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef mknodat
|
||||||
|
# define mknodat(f,n,m,d) \
|
||||||
|
(GL_LINK_WARNING ("mknodat is not portable - " \
|
||||||
|
"use gnulib module mkfifoat for portability"), \
|
||||||
|
mknodat (f, n, m, d))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @REPLACE_FCHDIR@
|
||||||
|
# define fstat rpl_fstat
|
||||||
|
extern int fstat (int fd, struct stat *buf);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if @REPLACE_MKDIR@
|
#if @REPLACE_MKDIR@
|
||||||
# undef mkdir
|
# undef mkdir
|
||||||
# define mkdir rpl_mkdir
|
# define mkdir rpl_mkdir
|
||||||
|
|
|
@ -96,7 +96,7 @@ direxists (const char *dir)
|
||||||
enough space in TMPL. */
|
enough space in TMPL. */
|
||||||
int
|
int
|
||||||
__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
|
__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
|
||||||
int try_tmpdir)
|
int try_tmpdir)
|
||||||
{
|
{
|
||||||
const char *d;
|
const char *d;
|
||||||
size_t dlen, plen;
|
size_t dlen, plen;
|
||||||
|
@ -110,30 +110,30 @@ __path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
|
||||||
{
|
{
|
||||||
plen = strlen (pfx);
|
plen = strlen (pfx);
|
||||||
if (plen > 5)
|
if (plen > 5)
|
||||||
plen = 5;
|
plen = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (try_tmpdir)
|
if (try_tmpdir)
|
||||||
{
|
{
|
||||||
d = __secure_getenv ("TMPDIR");
|
d = __secure_getenv ("TMPDIR");
|
||||||
if (d != NULL && direxists (d))
|
if (d != NULL && direxists (d))
|
||||||
dir = d;
|
dir = d;
|
||||||
else if (dir != NULL && direxists (dir))
|
else if (dir != NULL && direxists (dir))
|
||||||
/* nothing */ ;
|
/* nothing */ ;
|
||||||
else
|
else
|
||||||
dir = NULL;
|
dir = NULL;
|
||||||
}
|
}
|
||||||
if (dir == NULL)
|
if (dir == NULL)
|
||||||
{
|
{
|
||||||
if (direxists (P_tmpdir))
|
if (direxists (P_tmpdir))
|
||||||
dir = P_tmpdir;
|
dir = P_tmpdir;
|
||||||
else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp"))
|
else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp"))
|
||||||
dir = "/tmp";
|
dir = "/tmp";
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
__set_errno (ENOENT);
|
__set_errno (ENOENT);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dlen = strlen (dir);
|
dlen = strlen (dir);
|
||||||
|
@ -169,9 +169,9 @@ static const char letters[] =
|
||||||
|
|
||||||
KIND may be one of:
|
KIND may be one of:
|
||||||
__GT_NOCREATE: simply verify that the name does not exist
|
__GT_NOCREATE: simply verify that the name does not exist
|
||||||
at the time of the call.
|
at the time of the call.
|
||||||
__GT_FILE: create the file using open(O_CREAT|O_EXCL)
|
__GT_FILE: create the file using open(O_CREAT|O_EXCL)
|
||||||
and return a read-write fd. The file is mode 0600.
|
and return a read-write fd. The file is mode 0600.
|
||||||
__GT_BIGFILE: same as __GT_FILE but use open64().
|
__GT_BIGFILE: same as __GT_FILE but use open64().
|
||||||
__GT_DIR: create a directory, which will be mode 0700.
|
__GT_DIR: create a directory, which will be mode 0700.
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ gen_tempname_len (char *tmpl, int kind, size_t x_suffix_len)
|
||||||
|
|
||||||
len = strlen (tmpl);
|
len = strlen (tmpl);
|
||||||
if (len < x_suffix_len || ! check_x_suffix (&tmpl[len - x_suffix_len],
|
if (len < x_suffix_len || ! check_x_suffix (&tmpl[len - x_suffix_len],
|
||||||
x_suffix_len))
|
x_suffix_len))
|
||||||
{
|
{
|
||||||
__set_errno (EINVAL);
|
__set_errno (EINVAL);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -223,60 +223,60 @@ gen_tempname_len (char *tmpl, int kind, size_t x_suffix_len)
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
for (i = 0; i < x_suffix_len; i++)
|
for (i = 0; i < x_suffix_len; i++)
|
||||||
{
|
{
|
||||||
XXXXXX[i] = letters[randint_genmax (rand_src, sizeof letters - 2)];
|
XXXXXX[i] = letters[randint_genmax (rand_src, sizeof letters - 2)];
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (kind)
|
switch (kind)
|
||||||
{
|
{
|
||||||
case __GT_FILE:
|
case __GT_FILE:
|
||||||
fd = small_open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
|
fd = small_open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case __GT_BIGFILE:
|
case __GT_BIGFILE:
|
||||||
fd = large_open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
|
fd = large_open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case __GT_DIR:
|
case __GT_DIR:
|
||||||
fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
|
fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case __GT_NOCREATE:
|
case __GT_NOCREATE:
|
||||||
/* This case is backward from the other three. This function
|
/* This case is backward from the other three. This function
|
||||||
succeeds if __xstat fails because the name does not exist.
|
succeeds if __xstat fails because the name does not exist.
|
||||||
Note the continue to bypass the common logic at the bottom
|
Note the continue to bypass the common logic at the bottom
|
||||||
of the loop. */
|
of the loop. */
|
||||||
if (__lxstat64 (_STAT_VER, tmpl, &st) < 0)
|
if (__lxstat64 (_STAT_VER, tmpl, &st) < 0)
|
||||||
{
|
{
|
||||||
if (errno == ENOENT)
|
if (errno == ENOENT)
|
||||||
{
|
{
|
||||||
__set_errno (save_errno);
|
__set_errno (save_errno);
|
||||||
fd = 0;
|
fd = 0;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Give up now. */
|
/* Give up now. */
|
||||||
fd = -1;
|
fd = -1;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
assert (! "invalid KIND in __gen_tempname");
|
assert (! "invalid KIND in __gen_tempname");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd >= 0)
|
if (fd >= 0)
|
||||||
{
|
{
|
||||||
__set_errno (save_errno);
|
__set_errno (save_errno);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
else if (errno != EEXIST)
|
else if (errno != EEXIST)
|
||||||
{
|
{
|
||||||
fd = -1;
|
fd = -1;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
randint_all_free (rand_src);
|
randint_all_free (rand_src);
|
||||||
|
|
|
@ -30,9 +30,9 @@
|
||||||
|
|
||||||
KIND may be one of:
|
KIND may be one of:
|
||||||
GT_NOCREATE: simply verify that the name does not exist
|
GT_NOCREATE: simply verify that the name does not exist
|
||||||
at the time of the call.
|
at the time of the call.
|
||||||
GT_FILE: create a large file using open(O_CREAT|O_EXCL)
|
GT_FILE: create a large file using open(O_CREAT|O_EXCL)
|
||||||
and return a read-write fd. The file is mode 0600.
|
and return a read-write fd. The file is mode 0600.
|
||||||
GT_DIR: create a directory, which will be mode 0700.
|
GT_DIR: create a directory, which will be mode 0700.
|
||||||
|
|
||||||
We use a clever algorithm to get hard-to-predict names. */
|
We use a clever algorithm to get hard-to-predict names. */
|
||||||
|
|
|
@ -109,6 +109,15 @@
|
||||||
# define STDERR_FILENO 2
|
# define STDERR_FILENO 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Ensure *_OK functions exist. */
|
||||||
|
#ifndef F_OK
|
||||||
|
# define F_OK 0
|
||||||
|
# define X_OK 1
|
||||||
|
# define W_OK 2
|
||||||
|
# define R_OK 4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Declare overridden functions. */
|
/* Declare overridden functions. */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -141,6 +150,72 @@ extern int chown (const char *file, uid_t uid, gid_t gid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_FCHOWNAT@
|
||||||
|
# if @REPLACE_FCHOWNAT@
|
||||||
|
# undef fchownat
|
||||||
|
# define fchownat rpl_fchownat
|
||||||
|
# endif
|
||||||
|
# if !@HAVE_FCHOWNAT@ || @REPLACE_FCHOWNAT@
|
||||||
|
extern int fchownat (int fd, char const *file, uid_t owner, gid_t group, int flag);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef fchownat
|
||||||
|
# define fchownat(d,n,o,g,f) \
|
||||||
|
(GL_LINK_WARNING ("fchownat is not portable - " \
|
||||||
|
"use gnulib module openat for portability"), \
|
||||||
|
fchownat (d, n, o, g, f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_UNLINKAT@
|
||||||
|
# if !@HAVE_UNLINKAT@
|
||||||
|
extern int unlinkat (int fd, char const *file, int flag);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef unlinkat
|
||||||
|
# define unlinkat(d,n,f) \
|
||||||
|
(GL_LINK_WARNING ("unlinkat is not portable - " \
|
||||||
|
"use gnulib module openat for portability"), \
|
||||||
|
unlinkat (d, n, f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if @GNULIB_FACCESSAT@
|
||||||
|
# if !@HAVE_FACCESSAT@
|
||||||
|
int faccessat (int fd, char const *file, int mode, int flag);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef faccessat
|
||||||
|
# define faccessat(d,n,m,f) \
|
||||||
|
(GL_LINK_WARNING ("faccessat is not portable - " \
|
||||||
|
"use gnulib module faccessat for portability"), \
|
||||||
|
faccessat (d, n, m, f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_SYMLINKAT@
|
||||||
|
# if !@HAVE_SYMLINKAT@
|
||||||
|
int symlinkat (char const *contents, int fd, char const *file);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef symlinkat
|
||||||
|
# define symlinkat(c,d,n) \
|
||||||
|
(GL_LINK_WARNING ("symlinkat is not portable - " \
|
||||||
|
"use gnulib module symlinkat for portability"), \
|
||||||
|
symlinkat (c, d, n))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @GNULIB_READLINKAT@
|
||||||
|
# if !@HAVE_READLINKAT@
|
||||||
|
ssize_t readlinkat (int fd, char const *file, char *buf, size_t len);
|
||||||
|
# endif
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef readlinkat
|
||||||
|
# define readlinkat(d,n,b,l) \
|
||||||
|
(GL_LINK_WARNING ("readlinkat is not portable - " \
|
||||||
|
"use gnulib module symlinkat for portability"), \
|
||||||
|
readlinkat (d, n, b, l))
|
||||||
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_CLOSE@
|
#if @GNULIB_CLOSE@
|
||||||
# if @REPLACE_CLOSE@
|
# if @REPLACE_CLOSE@
|
||||||
/* Automatically included by modules that need a replacement for close. */
|
/* Automatically included by modules that need a replacement for close. */
|
||||||
|
@ -181,6 +256,28 @@ extern int dup2 (int oldfd, int newfd);
|
||||||
#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@
|
||||||
|
# define dup3 rpl_dup3
|
||||||
|
# endif
|
||||||
|
extern int dup3 (int oldfd, int newfd, int flags);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef dup3
|
||||||
|
# define dup3(o,n,f) \
|
||||||
|
(GL_LINK_WARNING ("dup3 is unportable - " \
|
||||||
|
"use gnulib module dup3 for portability"), \
|
||||||
|
dup3 (o, n, f))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if @GNULIB_ENVIRON@
|
#if @GNULIB_ENVIRON@
|
||||||
# if !@HAVE_DECL_ENVIRON@
|
# if !@HAVE_DECL_ENVIRON@
|
||||||
/* Set of environment variables and values. An array of strings of the form
|
/* Set of environment variables and values. An array of strings of the form
|
||||||
|
@ -229,11 +326,11 @@ extern int fchdir (int /*fd*/);
|
||||||
# define dup rpl_dup
|
# define dup rpl_dup
|
||||||
extern int dup (int);
|
extern int dup (int);
|
||||||
|
|
||||||
# if @REPLACE_DUP2@
|
/* Gnulib internal hooks needed to maintain the fchdir metadata. */
|
||||||
# undef dup2
|
extern int _gl_register_fd (int fd, const char *filename);
|
||||||
# endif
|
extern void _gl_unregister_fd (int fd);
|
||||||
# define dup2 rpl_dup2_fchdir
|
extern int _gl_register_dup (int oldfd, int newfd);
|
||||||
extern int dup2 (int, int);
|
extern const char *_gl_directory_name (int fd);
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
@ -331,7 +428,8 @@ extern int getdomainname(char *name, size_t len);
|
||||||
|
|
||||||
#if @GNULIB_GETDTABLESIZE@
|
#if @GNULIB_GETDTABLESIZE@
|
||||||
# if !@HAVE_GETDTABLESIZE@
|
# if !@HAVE_GETDTABLESIZE@
|
||||||
/* Return the maximum number of file descriptors in the current process. */
|
/* Return the maximum number of file descriptors in the current process.
|
||||||
|
In POSIX, this is same as sysconf (_SC_OPEN_MAX). */
|
||||||
extern int getdtablesize (void);
|
extern int getdtablesize (void);
|
||||||
# endif
|
# endif
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
@ -500,11 +598,14 @@ extern int lchown (char const *file, uid_t owner, gid_t group);
|
||||||
|
|
||||||
|
|
||||||
#if @GNULIB_LINK@
|
#if @GNULIB_LINK@
|
||||||
|
# if @REPLACE_LINK@
|
||||||
|
# define link rpl_link
|
||||||
|
# endif
|
||||||
/* Create a new hard link for an existing file.
|
/* Create a new hard link for an existing file.
|
||||||
Return 0 if successful, otherwise -1 and errno set.
|
Return 0 if successful, otherwise -1 and errno set.
|
||||||
See POSIX:2001 specification
|
See POSIX:2001 specification
|
||||||
<http://www.opengroup.org/susv3xsh/link.html>. */
|
<http://www.opengroup.org/susv3xsh/link.html>. */
|
||||||
# if !@HAVE_LINK@
|
# if !@HAVE_LINK@ || @REPLACE_LINK@
|
||||||
extern int link (const char *path1, const char *path2);
|
extern int link (const char *path1, const char *path2);
|
||||||
# endif
|
# endif
|
||||||
#elif defined GNULIB_POSIXCHECK
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
@ -534,6 +635,28 @@ extern int link (const char *path1, const char *path2);
|
||||||
#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@
|
||||||
|
# define pipe2 rpl_pipe2
|
||||||
|
# endif
|
||||||
|
extern int pipe2 (int fd[2], int flags);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
# undef pipe2
|
||||||
|
# define pipe2(f,o) \
|
||||||
|
(GL_LINK_WARNING ("pipe2 is unportable - " \
|
||||||
|
"use gnulib module pipe2 for portability"), \
|
||||||
|
pipe2 (f, o))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if @GNULIB_READLINK@
|
#if @GNULIB_READLINK@
|
||||||
/* Read the contents of the symbolic link FILE and place the first BUFSIZE
|
/* 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
|
bytes of it into BUF. Return the number of bytes placed into BUF if
|
||||||
|
@ -579,12 +702,6 @@ extern ssize_t write (int fd, const void *buf, size_t count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef FCHDIR_REPLACEMENT
|
|
||||||
/* gnulib internal function. */
|
|
||||||
extern void _gl_unregister_fd (int fd);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* Set file access and modification times.
|
/* Set file access and modification times.
|
||||||
|
|
||||||
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software
|
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
|
||||||
Foundation, Inc.
|
Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify it
|
This program is free software: you can redistribute it and/or modify it
|
||||||
under the terms of the GNU General Public License as published by the
|
under the terms of the GNU General Public License as published by the
|
||||||
|
@ -44,16 +44,6 @@ struct utimbuf
|
||||||
};
|
};
|
||||||
#endif
|
#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__
|
#ifndef __attribute__
|
||||||
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
|
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
|
||||||
# define __attribute__(x)
|
# define __attribute__(x)
|
||||||
|
|
|
@ -260,7 +260,7 @@ local_wcsnlen (const wchar_t *s, size_t maxlen)
|
||||||
# ifndef decimal_point_char_defined
|
# ifndef decimal_point_char_defined
|
||||||
# define decimal_point_char_defined 1
|
# define decimal_point_char_defined 1
|
||||||
static char
|
static char
|
||||||
decimal_point_char ()
|
decimal_point_char (void)
|
||||||
{
|
{
|
||||||
const char *point;
|
const char *point;
|
||||||
/* Determine it in a multithread-safe way. We know nl_langinfo is
|
/* Determine it in a multithread-safe way. We know nl_langinfo is
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
char const *Version = "7.4";
|
char const *Version = "7.6";
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#line 1
|
#line 1
|
||||||
/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
|
/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
|
||||||
|
|
||||||
Copyright (C) 2006-2008 Free Software Foundation, Inc.
|
Copyright (C) 2006-2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -87,6 +87,8 @@
|
||||||
# undef iswspace
|
# undef iswspace
|
||||||
# undef iswupper
|
# undef iswupper
|
||||||
# undef iswxdigit
|
# undef iswxdigit
|
||||||
|
# undef towlower
|
||||||
|
# undef towupper
|
||||||
|
|
||||||
/* Linux libc5 has <wctype.h> and the functions but they are broken. */
|
/* Linux libc5 has <wctype.h> and the functions but they are broken. */
|
||||||
# if @REPLACE_ISWCNTRL@
|
# if @REPLACE_ISWCNTRL@
|
||||||
|
@ -102,6 +104,8 @@
|
||||||
# define iswspace rpl_iswspace
|
# define iswspace rpl_iswspace
|
||||||
# define iswupper rpl_iswupper
|
# define iswupper rpl_iswupper
|
||||||
# define iswxdigit rpl_iswxdigit
|
# define iswxdigit rpl_iswxdigit
|
||||||
|
# define towlower rpl_towlower
|
||||||
|
# define towupper rpl_towupper
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
|
@ -181,7 +185,50 @@ iswxdigit (wint_t wc)
|
||||||
|| ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
|
|| ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline wint_t
|
||||||
|
towlower (wint_t wc)
|
||||||
|
{
|
||||||
|
return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline wint_t
|
||||||
|
towupper (wint_t wc)
|
||||||
|
{
|
||||||
|
return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
|
||||||
|
}
|
||||||
|
|
||||||
# endif /* ! HAVE_ISWCNTRL */
|
# endif /* ! HAVE_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);
|
||||||
|
}
|
||||||
|
# define towlower rpl_towlower
|
||||||
|
|
||||||
|
static inline wint_t
|
||||||
|
rpl_towupper (wint_t wc)
|
||||||
|
{
|
||||||
|
return (wint_t) (wchar_t) towupper (wc);
|
||||||
|
}
|
||||||
|
# define towupper rpl_towupper
|
||||||
|
|
||||||
|
# endif
|
||||||
|
|
||||||
#endif /* _GL_WCTYPE_H */
|
#endif /* _GL_WCTYPE_H */
|
||||||
#endif /* _GL_WCTYPE_H */
|
#endif /* _GL_WCTYPE_H */
|
||||||
|
|
|
@ -31,11 +31,11 @@ xfreopen (char const *filename, char const *mode, FILE *fp)
|
||||||
if (!freopen (filename, mode, fp))
|
if (!freopen (filename, mode, fp))
|
||||||
{
|
{
|
||||||
char const *f = (filename ? filename
|
char const *f = (filename ? filename
|
||||||
: (fp == stdin ? _("stdin")
|
: (fp == stdin ? _("stdin")
|
||||||
: (fp == stdout ? _("stdout")
|
: (fp == stdout ? _("stdout")
|
||||||
: (fp == stderr ? _("stderr")
|
: (fp == stderr ? _("stderr")
|
||||||
: _("unknown stream")))));
|
: _("unknown stream")))));
|
||||||
error (exit_failure, errno, _("failed to reopen %s with mode %s"),
|
error (exit_failure, errno, _("failed to reopen %s with mode %s"),
|
||||||
quote_n (0, f), quote_n (1, mode));
|
quote_n (0, f), quote_n (1, mode));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue