57 Commits
Author SHA1 Message Date
Paul Eggert 990fa9d50c open: support O_CLOEXEC
* NEWS, doc/posix-functions/open.texi:
* doc/posix-functions/openat.texi: Document this.
* lib/fcntl.in.h (O_CLOEXEC): Default to a nonzero value.
(GNULIB_defined_O_CLOEXEC): New symbol.
* lib/open.c: Include cloexec.h.
(open): Support O_CLOEXEC.
* lib/openat.c: Include cloexec.h.
(rpl_openat): Support O_CLOEXEC.
* lib/popen-safer.c: Do not include cloexec.h.
(open_noinherit): Remove.
(popen_safer): Use O_CLOEXEC instead of set_cloexec_flag.
* lib/save-cwd.c: Do not include cloexec.h.
(save_cwd): Use O_CLOEXEC instead of set_cloexec_flag.
* m4/open-cloexec.m4: New file.
* m4/open.m4 (gl_FUNC_OPEN): Require gl_PREPROC_O_CLOEXEC.
Replace 'open' if O_CLOEXEC is not present.
* m4/openat.m4 (gl_FUNC_OPENAT): Require gl_PREPROC_O_CLOEXEC.
Replace 'openat' if O_CLOEXEC is not present.
* modules/freopen (Depends-on): Depend on 'open' if replacing freopen.
* modules/open (Files): Add m4/open-cloexec.m4.
(Depends-on): Depend on cloexec if replacing 'open'.
* modules/openat (Files): Add m4/open-cloexec.m4.
(Depends-on): Depend on cloexec if replacing openat.
* modules/popen-safer (Depends-on): Remove cloexec.
* modules/save-cwd (Depends-on): Remove cloexec, and add
fd-safer-flag and 'open'.
2017-08-14 13:05:23 -07:00
Paul Eggert a3fd683de3 version-etc: new year
* build-aux/gendocs.sh (version):
* doc/gendocs_template:
* doc/gendocs_template_min:
* doc/gnulib.texi:
* lib/version-etc.c (COPYRIGHT_YEAR):
Update copyright dates by hand in templates and the like.
* all files: Run 'make update-copyright'.
2017-01-01 02:59:23 +00:00
Paul Eggert 71090a2a31 version-etc: new year
* build-aux/gendocs.sh (version):
* doc/gendocs_template:
* doc/gendocs_template_min:
* doc/gnulib.texi:
* lib/version-etc.c (COPYRIGHT_YEAR):
Update copyright dates by hand in templates and the like.
* all files: Run 'make update-copyright'.
2016-01-01 00:57:21 -08:00
Paul Eggert b9bfe78424 version-etc: new year
* doc/gnulib.texi:
* lib/version-etc.c (COPYRIGHT_YEAR): Update copyright date.
* all files: Run 'make update-copyright'.
2014-12-31 17:47:54 -08:00
Eric Blake 1276a2c5f2 maint: update copyright
I ran 'make update-copyright'.

Signed-off-by: Eric Blake <eblake@redhat.com>
2014-01-01 00:07:10 -07:00
Eric Blake 9fc81090f6 maint: update all copyright year number ranges
Run "make update-copyright".  Compare to commit 1602f0a from last year.

Signed-off-by: Eric Blake <eblake@redhat.com>
2013-01-01 00:50:58 +00:00
Paul Eggert 0c4b4008b9 ftruncate, fts, lstat, openat, raise: no 'static inline'
* lib/ftruncate.c (chsize_nothrow):
* lib/fts.c (opendirat, diropen):
* lib/lstat.c (orig_lstat):
* lib/openat.c (orig_openat):
* lib/raise.c (raise_nothrow):
Now static, not static inline.
* m4/ftruncate.m4 (gl_PREREQ_FTRUNCATE):
* m4/fts.m4 (gl_FUNC_FTS_CORE):
* m4/lstat.m4 (gl_PREREQ_LSTAT):
* m4/openat.m4 (gl_PREREQ_OPENAT):
* m4/raise.m4 (gl_PREREQ_RAISE):
Do not require AC_C_INLINE.
2012-11-29 23:38:56 -08:00
Bruno Haible 639607db00 lstat: Avoid "guessing no" when cross-compiling to glibc systems.
* m4/lstat.m4 (gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): When cross-
compiling, set gl_cv_func_lstat_dereferences_slashed_symlink to
"guessing yes" or "guessing no".
(gl_FUNC_LSTAT): Update.
* m4/fstatat.m4 (gl_FUNC_FSTATAT): Update.
* m4/openat.m4 (gl_FUNC_OPENAT): Update.
* m4/unlinkat.m4 (gl_FUNC_UNLINKAT): Update.
2012-05-04 04:29:15 +02:00
Jim Meyering 1602f0afed maint: update all copyright year number ranges
Run "make update-copyright".
2012-01-01 10:04:58 +01:00
Bruno Haible 75000c499c New modules 'at-internal', 'openat-h', split off from module 'openat'.
* m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_OPENAT. Don't
invoke gl_PREREQ_OPENAT and gl_MODULE_INDICATOR.
* modules/openat (Description): Add reference to POSIX function.
(Files): Remove lib/openat.h, lib/openat-proc.c.
(Depends-on): Add at-internal, openat-h. Remove fdopendir, gettext-h,
intprops, unistd.
(configure.ac): Remove AC_LIBOBJ of openat-proc. Invoke
gl_PREREQ_OPENAT, gl_MODULE_INDICATOR here. Invoke
gl_FCNTL_MODULE_INDICATOR.
(Include): Remove unistd.h, openat.h.
* modules/areadlinkat (Files): Add lib/at-func.c.
(Depends-on): Add at-internal, dosname, errno, extensions, fchdir,
openat-die, openat-h, save-cwd.
* modules/areadlinkat-with-size (Files): Add lib/at-func.c.
(Depends-on): Add at-internal, dosname, errno, extensions, fchdir,
openat-die, openat-h, save-cwd, unistd.
* modules/faccessat (Files): Add lib/at-func.c, lib/openat-priv.h.
(Depends-on): Add at-internal, dosname, errno, fchdir, openat-die,
openat-h, save-cwd. Remove fcntl-h, openat.
* modules/fchmodat (Files): Remove lib/openat.h.
(Depends-on): Add at-internal, openat-h. Remove dirent, fcntl-h,
openat, stdbool, unistd.
* modules/fchownat (Files): Remove lib/openat.h.
(Depends-on): Add at-internal, openat-h. Remove dirent, fcntl-h,
openat, stdbool, sys_stat.
* modules/fdopendir (Files): Remove lib/openat-priv.h,
lib/openat-proc.c.
(Depends-on): Add at-internal.
(condigure.ac): Remove AC_LIBOBJ of openat-proc.
* modules/fstatat (Files): Remove lib/openat.h.
(Depends-on): Add at-internal, openat-h. Remove dirent, openat,
stdbool, unistd.
* modules/fts (Depends-on): Add openat-h.
* modules/linkat (Depends-on): Add at-internal, openat-h. Remove
openat.
* modules/mkdirat (Files): Remove lib/openat.h.
(Depends-on): Add at-internal, openat-h. Remove dirent, fcntl-h,
openat, stdbool, sys_stat.
* modules/mkfifoat (Files): Add lib/at-func.c.
(Depends-on): Add at-internal, dosname, errno, fchdir, openat-die,
openat-h, save-cwd. Remove fcntl-h, openat.
* modules/openat-die (Depends-on): Add openat-h. Remove openat.
* modules/readlinkat (Files): Add lib/at-func.c.
(Depends-on): Add at-internal, dosname, errno, fchdir, openat-die,
openat-h, save-cwd. Remove fcntl-h, openat.
* modules/renameat (Depends-on): Add at-internal, openat-h. Remove
openat.
* modules/selinux-at (Files): Add lib/at-func.c.
(Depends-on): Add at-internal, dosname, errno, extensions, fchdir,
fcntl-h, openat-die, openat-h, save-cwd, unistd. Remove openat.
* modules/symlinkat (Files): Add lib/at-func.c.
(Depends-on): Add at-internal, dosname, errno, fchdir, openat-die,
openat-h, save-cwd. Remove fcntl-h, openat.
* modules/unlinkat (Files): Remove lib/openat.h.
(Depends-on): Add at-internal, openat-h. Remove dirent, openat,
stdbool.
* modules/utimensat (Files): Add lib/at-func.c.
(Depends-on): Add at-internal, dosname, errno, fchdir, fcntl-h,
openat-die, openat-h, save-cwd.
* modules/fchownat-tests (Depends-on): Add openat-h. Remove openat.
* modules/fdutimensat-tests (Depends-on): Add openat.
* modules/fstatat-tests (Depends-on): Add openat-h.
* modules/readlinkat-tests (Depends-on): Add openat.
* modules/symlinkat-tests (Depends-on): Add openat.
2011-11-05 11:35:57 +01:00
Bruno Haible 170fb7e17a New module 'mkdirat', split off from module 'openat'.
* m4/mkdirat.m4: New file. extracted from m4/openat.m4.
* m4/openat.m4 (gl_FUNC_OPENAT): Don't require gl_SYS_STAT_H_DEFAULTS.
Don't test for mkdirat. Don't set GNULIB_MKDIRAT, HAVE_MKDIRAT.
* modules/mkdirat: New file, extracted from modules/openat.
* modules/openat (Files): Remove lib/mkdirat.c.
(Depends-on): Remove mkdir.
(configure.ac): Remove AC_LIBOBJ of mkdirat.
(Include): Remove <sys/stat.h>.
* modules/mkdirat-tests: New file, extracted from modules/openat-tests.
* modules/openat-tests (Files): Remove tests/test-mkdirat.c,
tests/test-mkdir.h.
(Depends-on): Remove ignore-value.
(Makefile.am): Remove rules for test-mkdirat.
* doc/posix-functions/mkdirat.texi: Mention module 'mkdirat' instead
of module 'openat'.
* NEWS: Mention the change.
2011-11-04 13:26:02 +01:00
Bruno Haible 531e3287a3 New module 'fstatat', split off from module 'openat'.
* lib/openat.h (statat, lstatat): Enable only if GNULIB_FSTATAT is
defined.
* m4/fstatat.m4: New file. extracted from m4/openat.m4.
* m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_FSTATAT. Don't invoke
gl_FUNC_FSTATAT.
(gl_FUNC_FSTATAT): Moved to m4/fstatat.m4.
* modules/fstatat: New file, extracted from modules/openat.
* modules/openat (Files): Remove lib/fstatat.c.
(Depends-on): Remove lstat.
(configure.ac): Remove AC_LIBOBJ of fstatat.
* modules/fstatat-tests: New file, extracted from modules/openat-tests.
* modules/openat-tests (Files): Remove tests/test-fstatat.c,
tests/test-lstat.h, tests/test-stat.h.
(Depends-on): Remove getcwd-lgpl.
(Makefile.am): Remove rules for test-fstatat.
* doc/posix-functions/fstatat.texi: Mention module 'fstatat' instead
of module 'openat'.
* NEWS: Mention the change.
* modules/getcwd (Depends-on): Add fstatat.
* modules/linkat (Depends-on): Likewise.
* modules/mkfifoat-tests (Depends-on): Likewise.
* modules/utimensat (Depends-on): Add fstatat. Remove openat.
2011-11-04 10:55:30 +01:00
Bruno Haible 84c3f9cf54 New module 'unlinkat', split off from module 'openat'.
* m4/unlinkat.m4: New file, extracted from m4/openat.m4.
* m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_UNLINKAT,
REPLACE_UNLINKAT, HAVE_UNLINKAT. Don't test for unlinkat.
* modules/unlinkat: New file, extracted from modules/openat. Correct
the dependency conditions.
* modules/openat (Files): Remove lib/unlinkat.c.
(Depends-on): Remove rmdir, unlink.
(configure.ac): Remove AC_LIBOBJ of unlinkat.
* modules/unlinkat-tests: New file, extracted from modules/openat-tests.
* modules/openat-tests (Files): Remove tests/test-unlinkat.c,
tests/test-rmdir.h, tests/test-unlink.h.
(Depends-on): Remove unlinkdir.
(Makefile.am): Remove rules for test-unlinkat.
* doc/posix-functions/unlinkat.texi: Mention module 'unlinkat' instead
of module 'openat'.
* NEWS: Mention the change.
* modules/linkat-tests (Depends-on): Add unlinkat.
* modules/mkfifoat-tests (Depends-on): Likewise.
* modules/readlinkat-tests (Depends-on): Likewise.
2011-11-02 22:55:16 +01:00
Bruno Haible afe598a51a New module 'fchmodat', split off from module 'openat'.
* lib/openat.h (chmodat, lchmodat): Enable only if GNULIB_FCHMODAT is
defined.
* m4/fchmodat.m4: New file, extracted from m4/openat.m4.
* m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_FCHMODAT. Don't test
for fchmodat, lchmod. Don't set HAVE_FCHMODAT.
* modules/fchmodat: New file, extracted from modules/openat.
* modules/openat (Files): Remove lib/fchmodat.c.
(configure.ac): Remove AC_LIBOBJ of fchmodat.
* modules/fchmodat-tests: New file, extracted from modules/openat-tests.
* modules/openat-tests (Files): Remove tests/test-fchmodat.c.
(Makefile.am): Remove rules for test-fchmodat.
* doc/posix-functions/fchmodat.texi: Mention module 'fchmodat' instead
of module 'openat'.
* NEWS: Mention the change.
2011-11-02 10:07:20 +01:00
Bruno Haible f2c5670871 New module 'fchownat', split off from module 'openat'.
* lib/openat.h (chownat, lchownat): Enable only if GNULIB_FCHOWNAT is
defined.
* m4/fchownat.m4: New file, extracted from m4/openat.m4.
* m4/openat.m4 (gl_FUNC_OPENAT): Don't set GNULIB_FCHOWNAT. Don't
invoke gl_FUNC_FCHOWNAT.
(gl_FUNC_FCHOWNAT_DEREF_BUG, gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG,
gl_FUNC_FCHOWNAT): Moved to m4/fchownat.m4.
* modules/fchownat: New file, extracted from modules/openat.
* modules/openat (Files): Remove lib/fchownat.c.
(Depends-on): Remove lchown.
(configure.ac): Remove AC_LIBOBJ of fchownat.
* modules/fchownat-tests: New file, extracted from modules/openat-tests.
* modules/openat-tests (Files): Remove tests/test-fchownat.c,
tests/test-chown.h, tests/test-lchown.h, tests/nap.h.
(Depends-on): Remove mgetgroups, usleep, stat-time.
(configure.ac): Remove test for getegid.
(Makefile.am): Remove rules for test-fchownat.
* doc/posix-functions/fchownat.texi: Mention module 'fchownat' instead
of module 'openat'.
* NEWS: Mention the change.
2011-11-01 11:07:09 +01:00
Jim Meyering f6fe351fc5 getcwd: don't fail in a deep directory on a system without openat
Before this change, getcwd would fail when called from a directory
of depth PATH_MAX / 3 or greater.  That was due to the fact that
the non-openat implementation used "..", "../..", "../../..", etc.
to access ancestor directories.  With too many, that string would
be longer than PATH_MAX.
* lib/getcwd.c (HAVE_OPENAT_SUPPORT): Define also when we are
using gnulib's openat replacement.
* m4/openat.m4: Set GNULIB_OPENAT, so getcwd.c knows when
we're using the replacement function.
2011-09-19 16:42:10 +02:00
Paul Eggert 204072b3f5 openat: test for fstatat (..., 0) bug
Further testing with tar suggests that fstatat (..., 0)
does not work in general, on AIX 7.1; see
<http://lists.gnu.org/archive/html/bug-tar/2011-09/msg00023.html>.
So, give up entirely on AIX 7.1's fstatat, and fall back on our
replacement fstatat (which is what older AIX releases were using
anyway).
* lib/fstatat.c (fstatat) [HAVE_FSTATAT]: Do not undef.  The only
use is now changed to orig_fstatat.  This was probably the right
thing to do anyway.
(FSTATAT_AT_FDCWD_0_BROKEN): Remove; no longer used.
(rpl_fstatat) [FSTATAT_ZERO_FLAG_BROKEN]: Remove.
(rpl_fstatat): Simplify, assuming !FSTATAT_ZERO_FLAG_BROKEN.
(AT_FUNC_NAME) [FSTATAT_ZERO_FLAG_BROKEN]: Now rpl_fstatat.
* m4/openat.m4 (gl_FUNC_FSTATAT): Test for the more-general bug
and define FSTATAT_ZERO_FLAG_BROKEN, not FSTATAT_AT_FDCWD_0_BROKEN,
if the bug is found.
2011-09-03 20:18:22 -07:00
Paul Eggert e91216b238 openat: test for fstatat (AT_FDCWD, ..., 0) bug
This tests for another fstatat bug on AIX 7.1:
fstatat (AT_FDCWD, ..., 0) does not work.  See
<http://lists.gnu.org/archive/html/bug-tar/2011-09/msg00015.html>.
* lib/fstatat.c (FSTATAT_AT_FDCWD_0_BROKEN)
(LSTAT_FOLLOWS_SLASHED_SYMLINK): Default to 0.
(rpl_fstatat): Adjust so that it works around either (or both)
bugs if present.
* m4/openat.m4 (gl_FUNC_FSTATAT): Test for this fstatat bug.
2011-09-03 10:03:57 -07:00
Paul Eggert de1fa2ac9a openat: work around AIX 7.1 fstatat issue
This should fix the problem that was not properly fixed
in the previous change, dated 2011-08-30.
* lib/fstatat.c: Include <sys/stat.h> twice, the first with
__need_system_stat_h defined.
(orig_fstatat) [HAVE_FSTATAT]: New function.
(rpl_fstatat): Go back to the old way of doing things,
except call orig_fstatat instead of fstatat.
* m4/openat.m4 (gl_FUNC_FSTATAT): Remove unnecessary check for openat.
Remove unnecessary check whether fstatat fills in st_size etc.
2011-09-01 12:53:28 -07:00
Paul Eggert 0ba19fcc5f openat: work around AIX 7.1 fstatat bug
Problem reported by Kevin Brott for GNU tar, in the thread containing
<http://lists.gnu.org/archive/html/bug-tar/2011-08/msg00015.html>.
* lib/fstatat.c (rpl_fstatat): Do not invoke underlying fstatat if
FSTATAT_ST_SIZE_ETC_BROKEN.
(fstatat) [FSTATAT_ST_SIZE_ETC_BROKEN && HAVE_FSTATAT]: #define to
rpl_fstatat.
* m4/openat.m4 (gl_FUNC_FSTATAT): New macro, with the fstatat-relevant
part of gl_FUNC_OPENAT.  Also, check for the AIX 7.1 bug, and use
AC_CHECK_FUNCS_ONCE for fstatat.
(gl_FUNC_OPENAT): Use it.  Use AC_CHECK_FUNCS_ONCE for
fchmodat, mkdirat, openat and unlinkat.
2011-08-30 16:39:37 -07:00
Bruno Haible ce4994a0f2 openat: Respect rules for use of AC_LIBOBJ.
* m4/openat.m4 (gl_FUNC_OPENAT): Call AC_CHECK_FUNCS instead of
AC_REPLACE_FUNCS. Move AC_LIBOBJ invocations from here...
* modules/openat (configure.ac): ... to here.
2011-06-16 00:06:35 +02:00
Bruno Haible 15fe5bb631 lstat, openat: Respect rules for use of AC_LIBOBJ.
* m4/lstat.m4 (gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Renamed from
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK. Set variable
gl_cv_func_lstat_dereferences_slashed_symlink. Don't invoke AC_LIBOBJ.
(gl_PREREQ_LSTAT): New macro, extracted from gl_FUNC_LSTAT.
(gl_FUNC_LSTAT): Update. Remove gl_PREREQ_LSTAT code.
* modules/lstat (configure.ac): Invoke AC_LIBOBJ and gl_PREREQ_LSTAT
here.
* m4/openat.m4 (gl_FUNC_OPENAT): Update.
2011-06-16 00:06:25 +02:00
Jim Meyering d60f3b0c6b maint: update almost all copyright ranges to include 2011
Run the new "make update-copyright" rule.
2011-01-01 22:12:59 +01:00
Bruno Haible a14bd22364 openat: Work around glibc bug with fchownat() and empty file names.
* m4/openat.m4 (gl_FUNC_FCHOWNAT_EMPTY_FILENAME_BUG): New macro.
(gl_FUNC_FCHOWNAT): Invoke it.
* lib/fchownat.c (rpl_fchownat): Handle the empty file name specially.
* doc/posix-functions/fchownat.texi: Document the glibc bug.
Reported by Gary V. Vaughan <gary@gnu.org>.
2010-11-13 15:25:14 +01:00
Bruno Haible 7a9b9587b5 openat: Ensure autoconf macro ordering.
* m4/openat.m4 (gl_FUNC_FCHOWNAT_DEREF_BUG): Require
gl_USE_SYSTEM_EXTENSIONS.
(gl_FUNC_FCHOWNAT): Require gl_UNISTD_H_DEFAULTS.
2010-11-13 15:22:05 +01:00
Bruno Haible fae6c4abe3 fchownat: Replace also when chown has the trailing slash bug. 2010-07-31 16:01:58 +02:00
Jim Meyering d6116655f3 openat: correct formatting (no semantic change)
* m4/openat.m4 (gl_FUNC_FCHOWNAT): Correct formatting in AC_DEFINE.
Suggested by Bruno Haible.
2010-04-12 06:16:17 +02:00
Bruno Haible 15a0c625ac fchownat: Fix a C++ test error on Solaris 8. 2010-04-10 22:30:16 +02:00
Jim Meyering b2e2010c7c update nearly all FSF copyright year lists to include 2010
Use the same procedure as for 2009, outlined in
http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/20081
2010-01-01 10:42:00 +01:00
Bruno Haible 69fe567051 Use AC_C_INLINE instead of module 'inline' where possible. 2009-12-31 17:28:37 +01:00
Bruno Haible 441aa3044f Use spaces for indentation, not tabs. 2009-12-10 20:28:30 +01:00
Eric Blake c13ca15f1a openat: detect Solaris fchownat bug
Solaris 9 fchownat(dir,"name/",uid,gid,flag) has same bugs as
chown and lchown.

* lib/fchownat.c (rpl_fchownat): Work around Solaris bug.  Avoid
penalizing glibc chownat when only lchownat is broken.
* m4/openat.m4 (gl_FUNC_FCHOWNAT): Replace fchownat if there are
trailing slash bugs.
* doc/posix-functions/fchownat.texi (fchownat): Document the bug.
* modules/openat-tests (Files): Include more files.
(Depends-on): Add mgetgroups, sleep, stat-time.
(configure.ac): Add additional checks.
(Makefile.am): Build new test.
* tests/test-fchownat.c: New file.

Signed-off-by: Eric Blake <ebb9@byu.net>
2009-11-14 11:46:51 -07:00
Eric Blake 3cfa87074a openat: fix GNU/Hurd bug in unlinkat
unlinkat(fd,"file/",0) mistakenly succeeded.

* m4/openat.m4 (gl_FUNC_OPENAT): Replace unlinkat if unlink is
broken.
* doc/posix-functions/unlink.texi (unlink): Document this.
* doc/posix-functions/unlinkat.texi (unlinkat): Likewise.

Signed-off-by: Eric Blake <ebb9@byu.net>
2009-10-06 22:09:49 -06:00
Eric Blake 4c45e93c58 openat: fix openat bugs on Solaris 9
openat(fd,"file/",O_RDONLY) mistakenly succeeded.

* lib/openat.c (rpl_openat): Work around Solaris 9 bug.
* m4/openat.m4 (gl_FUNC_OPENAT): Also replace openat on Solaris.
* modules/openat (Depends-on): Add open.
* m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Provide new default.
* modules/fcntl-h (Makefile.am): Substitute it.
* lib/fcntl.in.h (openat): Declare replacement.
* doc/posix-functions/openat.texi (openat): Document this.

Signed-off-by: Eric Blake <ebb9@byu.net>
2009-09-19 13:53:27 -06:00
Eric Blake 82bf7d1b42 openat: move fstatat and unlinkat into correct files
Code motion, should be no semantic changes.

* m4/openat.m4 (gl_FUNC_OPENAT): Adjust which files will be
compiled.
* lib/openat.c (fstatat, unlinkat): Move...
* lib/fstatat.c (fstatat): ...into correct files.
* lib/unlinkat.c (unlinkat): Likewise.

Signed-off-by: Eric Blake <ebb9@byu.net>
2009-09-19 13:49:59 -06:00
Eric Blake 22d7496bac openat: fix unlinkat bugs on Solaris 9
unlinkat(fd,"file/",0) mistakenly succeeded.

* lib/unlinkat.c (unlinkat): New file.
* modules/openat (Depends-on): Add unlink.
(Files): Distribute it.
* m4/openat.m4 (gl_FUNC_OPENAT): Mark unlinkat for replacement if
trailing slash behavior is broken.
* m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Add witness.
* modules/unistd (Makefile.am): Substitute it.
* lib/unistd.in.h (unlinkat): Declare replacement.
* doc/posix-functions/unlinkat.texi (unlinkat): Document this.

Signed-off-by: Eric Blake <ebb9@byu.net>
2009-09-19 13:42:31 -06:00
Bruno Haible 1e2ae3ac85 Remove dependency from unistd_h.m4, sys_stat_h.m4, fcntl_h.m4 to openat.m4. 2009-09-07 01:33:12 +02:00
Eric Blake 52c658e924 openat: declare in POSIX headers
* NEWS: Mention this.
* modules/openat (configure.ac): Declare witnesses.
(Depends-on): Add fcntl-h, sys_stat, unistd.
(Include): Mention correct headers.
* modules/fcntl-h (Depends-on): Add link-warning.
(Files): Add openat.m4.
(Makefile.am): Substitute witnesses.
* modules/sys_stat (Files, Makefile.am): Likewise.
* modules/unistd (Files, Makefile.am): Likewise.
* m4/openat.m4 (gl_FUNC_OPENAT, gl_FUNC_FCHOWNAT): Set witnesses.
(gl_OPENAT_DEFAULTS): New macro.
* m4/fcntl_h.m4 (gl_FCNTL_H_DEFAULTS): Use it.
* m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Likewise.
* m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Likewise.
(SYS_STAT_H): Remove unused variable.
* doc/posix-headers/fcntl.texi (fcntl.h): Update content.
* lib/fcntl--.h (includes): Remove unneeded header.
* lib/openat-safer.c (includes): Likewise.
* lib/openat.h (AT_FDCWD, AT_SYMLINK_NOFOLLOW, AT_REMOVEDIR)
(openat, fstatat, unlinkat, mkdirat, fchmodat, fchownat): Move to
appropriate headers.
(__OPENAT_PREFIX): Delete.
* lib/fcntl.in.h (openat): Provide declaration.
(AT_FDCWD): Fix Solaris bug.
(AT_SYMLINK_NOFOLLOW, AT_REMOVEDIR): Provide macros.
* lib/sys_stat.in.h (fstatat, mkdirat): Provide declaration.
* lib/fchmodat.c (includes):  Adjust to find declaration.
* lib/fchownat.c (includes): Likewise.
* lib/mkdirat.c (includes): Likewise.
* lib/fstatat.c (includes): Likewise.  Ensure original fstatat is
still visible.

Signed-off-by: Eric Blake <ebb9@byu.net>
2009-09-03 21:20:42 -06:00
Eric Blake d1aa3e4028 fdopendir: split into its own module
* lib/openat.c (fdopendir): Move...
* lib/fdopendir.c: ...into new file.
* modules/fdopendir: New module.
* m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): New file.
* modules/openat (Depends-on): Add fdopendir.
* m4/openat.m4 (gl_FUNC_OPENAT): No longer need to check for
fdopendir here.
* modules/savedir (Depends-on): Only need fdopendir, not full
openat.
* lib/savedir.c (include): Use <dirent.h>, not "openat.h".
* lib/openat.h (fdopendir): Drop prototype.
* lib/dirent.in.h (fdopendir): Provide prototype.
* m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): Add replacements.
* modules/dirent (Makefile.am): Substitute them.
* MODULES.html.sh (File system functions): Mention it.
* doc/posix-functions/fdopendir.texi (fdopendir): Likewise.
* modules/fdopendir-tests: New file.
* tests/test-fdopendir.c: Likewise.

Signed-off-by: Eric Blake <ebb9@byu.net>
2009-09-02 19:14:47 -06:00
Bruno Haible 2514e7d5af Simplify use of mode_t varargs. 2009-05-22 13:48:52 +02:00
Jim Meyering 42d1eda5dc many *.m4 files: improve m4 quoting
99% of this change was performed by running the following commands:
git ls-files | grep '\.m4$' | xargs perl -pi \
  -e 's/(AC_\w+\()([^[()]+?)([,)])/$1\[$2]$3/g;' \
  -e 's/(AC_\w+\((?:\[[^,]+?\], ){1})([^,[()]+?)([,)])/$1\[$2]$3/g;' \
  -e 's/(AC_\w+\((?:\[[^,]+?\], ){2})([^,[()]+?)([,)])/$1\[$2]$3/g;' \
  -e 's/(AC_\w+\((?:\[[^,]+?\], ){3})([^,[()]+?)([,)])/$1\[$2]$3/g'
perl -pi -e 's/\[\.\.\.\]/.../' m4/onceonly.m4

The remainder were to add Copyright dates, increment serial numbers,
undo some changes in comments, exclude m4/intl.m4, and add quotes
around the "1" in ",1" where the unusual spacing prohibited the
above regexps from doing the job.  For more details, see
<http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/16175>.
2009-01-14 11:24:37 +01:00
Eric Blake e2f83854bc Use native fstatat on cygwin 1.7.0.
* m4/openat.m4 (gl_FUNC_OPENAT): Make sure lstat check is made
first.

Signed-off-by: Eric Blake <ebb9@byu.net>
2008-04-25 14:52:38 -06:00
Jim Meyering 70f8dfe9ab Fix buggy test for the fchownat-deref bug.
* m4/openat.m4 (gl_FUNC_FCHOWNAT_DEREF_BUG): Create the dangling
symlink required for the run-test.  Without it, this test would
always declare that fchownat doesn't work, and client code would
unnecessarily use the replacement function with fixed libc.
(gl_FUNC_FCHOWNAT): Eliminate a variable that wasn't initialized.
Reported by Greg Schafer.
2007-05-20 07:33:32 +00:00
Sergey Poznyakoff 54e0653130 (gl_FUNC_OPENAT): Do not require openat-die 2007-05-12 08:54:34 +00:00
Bruno Haible f67b37c4af 2007-01-24 Bruno Haible <bruno@clisp.org>
Don't AC_REQUIRE autoconf macros that invoke AC_LIBOBJ. See
        <http://lists.gnu.org/archive/html/bug-gnulib/2006-10/msg00279.html>.
        * m4/argp.m4 (gl_ARGP): Invoke, don't require, gl_GETOPT_SUBSTITUTE.
        * m4/fts.m4 (gl_FUNC_FTS, gl_FUNC_FTS_LGPL): Invoke, don't require,
        gl_FUNC_FTS_CORE.
        (gl_FUNC_FTS_CORE): Invoke, don't require, gl_FUNC_OPENAT.
        * m4/lstat.m4 (gl_FUNC_LSTAT): Invoke, don't require,
        AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK.
        * m4/memcmp.m4 (gl_FUNC_MEMCMP): Invoke, don't require, AC_FUNC_MEMCMP.
        * m4/mktime.m4 (gl_FUNC_MKTIME): Invoke, don't require, AC_FUNC_MKTIME.
        * m4/openat.m4 (gl_FUNC_OPENAT): Invoke, don't require,
        gl_FUNC_FCHOWNAT.
        * m4/strftime.m4 (gl_FUNC_GNU_STRFTIME): Invoke, don't require,
        gl_FUNC_STRFTIME.
        * m4/strtod.m4 (gl_FUNC_STRTOD): Invoke, don't require, AC_FUNC_STRTOD.
        Reported by Ralf Wildenhues.
2007-01-25 03:25:54 +00:00
Bruno Haible a6e76f4eab 2007-01-24 Bruno Haible <bruno@clisp.org>
Drop AC_REQUIRE calls that are redundant with the module dependencies.
        * m4/canon-host.m4 (gl_PREREQ_CANON_HOST): Don't require
        gl_GETADDRINFO.
        * m4/chdir-long.m4 (gl_PREREQ_CHDIR_LONG): Don't require AM_STDBOOL_H,
        gl_FUNC_MEMPCPY, gl_FUNC_OPENAT, gl_FUNC_MEMRCHR.
        * m4/openat.m4 (gl_PREREQ_OPENAT): Don't require gl_SAVE_CWD.
2007-01-25 03:22:41 +00:00
Jim Meyering 242003f655 Work around an fchownat bug in glibc-2.4:
http://lists.ubuntu.com/archives/ubuntu-users/2006-September/093218.html
This bug would cause "chown -RP ... DIR" to follow symlinks in DIR,
in spite of the -P option.
* m4/openat.m4 (gl_FUNC_FCHOWNAT, gl_FUNC_FCHOWNAT_DEREF_BUG):
New macros.
(gl_PREREQ_OPENAT): Require gl_FUNC_FCHOWNAT.
* modules/openat (Files): Add lib/fchownat.c.
* lib/openat.c (fchownat): Don't define here.  Move to...
* lib/fchownat.c: ...this new file.
2006-12-24 17:08:04 +00:00
Paul Eggert bc9a52afd8 * m4/openat.m4 (gl_FUNC_OPENAT): Don't compile mkdirat
and fchmodat unconditionally, since glibc 2.4 has them.
Problem reported by Arkadiusz Miskiewicz.
2006-12-12 07:37:26 +00:00
Paul Eggert 229b2a01d8 * lib/openat.h (rpl_fstatat): New macro, if
[HAVE_OPENAT && ! LSTAT_FOLLOWS_SLASHED_SYMLINK.
(fstatat): Define to rpl_fstatat under the same conditions,
unless COMPILING_FSTATAT.
* m4/openat.m4 (gl_FUNC_OPENAT): Compile fstatat.c too, if fstatat
seems to have the bug.
* lib/fstatat.c: New file.
* modules/openat (Files): Add it.
2006-11-20 22:01:30 +00:00
Paul Eggert 75ff6c9d9a [lib/ChangeLog]
Work around bug in Solaris 10 /proc file system:
/proc/self/fd/NNN/.. isn't the parent directory of
the directory whose file descriptor is NNN.  This needs to
be worked around at run time, not compile time, since a
program might be built on Solaris 8, where things work, and
run on Solaris 10.
* openat-priv.h (BUILD_PROC_NAME): Remove.  All callers changed
to use the following interface instead:
(OPENAT_BUFFER_SIZE): New macro.
(openat_proc_name): New function.
* at-func.c (AT_FUNC_NAME): Adjust to above changes.
* openat.c (openat_permissive, openat_needs_fchdir, fdopendir):
Likewise.
* openat-proc.c: New file.
[ChangeLog]
* modules/openat (Files): Add lib/openat-proc.c.
(Depends-on): Add same-inode, stdbool.
[m4/ChangeLog]
* openat.m4 (gl_FUNC_OPENAT): Add AC_LIBOBJ(openat-proc).
2006-09-30 00:37:48 +00:00