New module 'chdir'.
authorBruno Haible <bruno@clisp.org>
Fri, 23 Sep 2011 10:32:41 +0000 (12:32 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 23 Sep 2011 10:36:08 +0000 (12:36 +0200)
* modules/chdir: New file.
* lib/unistd.in.h: Include <io.h>, <direct.h> also for chdir.
(chdir): New declaration.
* m4/unistd_h.m4 (gl_UNISTD_H): Test whether chdir is declared.
(gl_UNISTD_H_DEFAULTS): Initialize GNULIB_CHDIR.
* modules/unistd (Makefile.am): Substitute GNULIB_CHDIR.
* tests/test-unistd-c++.cc: Check signature of chdir.
* doc/posix-functions/chdir.texi: Mention problem on native Windows.
* modules/chdir-long (Depends-on): Add chdir.
* modules/fchdir (Depends-on): Likewise.
* modules/rename (Depends-on): Likewise.
* modules/savewd (Depends-on): Likewise.

ChangeLog
doc/posix-functions/chdir.texi
lib/unistd.in.h
m4/unistd_h.m4
modules/chdir [new file with mode: 0644]
modules/chdir-long
modules/fchdir
modules/rename
modules/savewd
modules/unistd
tests/test-unistd-c++.cc

index 0afd833..f95f275 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,19 @@
 2011-09-23  Bruno Haible  <bruno@clisp.org>
 
+       New module 'chdir'.
+       * modules/chdir: New file.
+       * lib/unistd.in.h: Include <io.h>, <direct.h> also for chdir.
+       (chdir): New declaration.
+       * m4/unistd_h.m4 (gl_UNISTD_H): Test whether chdir is declared.
+       (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_CHDIR.
+       * modules/unistd (Makefile.am): Substitute GNULIB_CHDIR.
+       * tests/test-unistd-c++.cc: Check signature of chdir.
+       * doc/posix-functions/chdir.texi: Mention problem on native Windows.
+       * modules/chdir-long (Depends-on): Add chdir.
+       * modules/fchdir (Depends-on): Likewise.
+       * modules/rename (Depends-on): Likewise.
+       * modules/savewd (Depends-on): Likewise.
+
        rmdir: Support for mingw, MSVC 9.
        * lib/unistd.in.h: Include <io.h> and <direct.h> also for rmdir.
        * doc/posix-functions/getcwd.texi: Mention problem on native Windows.
index 2a507ac..d3b3c3f 100644 (file)
@@ -8,6 +8,10 @@ Gnulib module: ---
 
 Portability problems fixed by Gnulib:
 @itemize
+@item
+This function is declared in different header files (namely, @code{<io.h>} or
+@code{<direct.h>}) on some platforms:
+mingw, MSVC 9.
 @end itemize
 
 Portability problems not fixed by Gnulib:
index 6b7b377..bb514db 100644 (file)
 # include <stdlib.h>
 #endif
 
-/* Native Windows platforms declare getcwd, rmdir in
+/* Native Windows platforms declare chdir, getcwd, rmdir in
    <io.h> and/or <direct.h>, not in <unistd.h>.  */
-#if ((@GNULIB_GETCWD@ || @GNULIB_RMDIR@ || defined GNULIB_POSIXCHECK) \
+#if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \
+      || defined GNULIB_POSIXCHECK) \
      && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
 # include <io.h>     /* mingw32, mingw64 */
 # include <direct.h> /* mingw64, MSVC 9 */
@@ -232,6 +233,18 @@ _GL_WARN_ON_USE (access, "the access function is a security risk - "
 #endif
 
 
+#if @GNULIB_CHDIR@
+_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIASWARN (chdir);
+#elif defined GNULIB_POSIXCHECK
+# undef chdir
+# if HAVE_RAW_DECL_CHDIR
+_GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - "
+                 "use gnulib module chdir for portability");
+# endif
+#endif
+
+
 #if @GNULIB_CHOWN@
 /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
    to GID (if GID is not -1).  Follow symbolic links.
index 720e0fd..79ae9e9 100644 (file)
@@ -1,4 +1,4 @@
-# unistd_h.m4 serial 59
+# unistd_h.m4 serial 60
 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -39,7 +39,7 @@ AC_DEFUN([gl_UNISTD_H],
 #  include <io.h>
 # endif
 #endif
-    ]], [chown dup2 dup3 environ euidaccess faccessat fchdir fchownat
+    ]], [chdir chown dup2 dup3 environ euidaccess faccessat fchdir fchownat
     fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups
     gethostname getlogin getlogin_r getpagesize getusershell setusershell
     endusershell group_member lchown link linkat lseek pipe pipe2 pread pwrite
@@ -58,6 +58,7 @@ AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
 
 AC_DEFUN([gl_UNISTD_H_DEFAULTS],
 [
+  GNULIB_CHDIR=0;                AC_SUBST([GNULIB_CHDIR])
   GNULIB_CHOWN=0;                AC_SUBST([GNULIB_CHOWN])
   GNULIB_CLOSE=0;                AC_SUBST([GNULIB_CLOSE])
   GNULIB_DUP2=0;                 AC_SUBST([GNULIB_DUP2])
diff --git a/modules/chdir b/modules/chdir
new file mode 100644 (file)
index 0000000..b827339
--- /dev/null
@@ -0,0 +1,21 @@
+Description:
+chdir() function: switch to another current directory
+
+Files:
+
+Depends-on:
+unistd
+
+configure.ac:
+gl_UNISTD_MODULE_INDICATOR([chdir])
+
+Makefile.am:
+
+Include:
+<unistd.h>
+
+License:
+LGPLv2+
+
+Maintainer:
+Bruno Haible
index 7f54760..74d9c33 100644 (file)
@@ -10,6 +10,7 @@ m4/pathmax.m4
 Depends-on:
 unistd
 pathmax
+chdir
 atexit          [test $gl_cv_have_arbitrary_file_name_length_limit = yes]
 fchdir          [test $gl_cv_have_arbitrary_file_name_length_limit = yes]
 fcntl-h         [test $gl_cv_have_arbitrary_file_name_length_limit = yes]
index 7b7cb04..80b2bb8 100644 (file)
@@ -7,6 +7,7 @@ m4/fchdir.m4
 
 Depends-on:
 unistd
+chdir            [test $HAVE_FCHDIR = 0]
 close            [test $HAVE_FCHDIR = 0]
 dirent           [test $HAVE_FCHDIR = 0]
 dirfd            [test $HAVE_FCHDIR = 0]
index 52ca382..582d630 100644 (file)
@@ -8,6 +8,7 @@ m4/rename.m4
 Depends-on:
 stdio
 canonicalize-lgpl [test $REPLACE_RENAME = 1]
+chdir             [test $REPLACE_RENAME = 1]
 dirname-lgpl      [test $REPLACE_RENAME = 1]
 lstat             [test $REPLACE_RENAME = 1]
 rmdir             [test $REPLACE_RENAME = 1]
index 1e95b41..9a7b8c7 100644 (file)
@@ -7,6 +7,7 @@ lib/savewd.c
 m4/savewd.m4
 
 Depends-on:
+chdir
 dosname
 errno
 fchdir
index 77ce7a8..3d31734 100644 (file)
@@ -30,6 +30,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
              -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+             -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \
              -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \
              -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
              -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \
index fb7425b..b82b0e8 100644 (file)
 #include "signature.h"
 
 
+#if GNULIB_TEST_CHDIR
+SIGNATURE_CHECK (GNULIB_NAMESPACE::chdir, int, (const char *));
+#endif
+
 #if GNULIB_TEST_CHOWN
 SIGNATURE_CHECK (GNULIB_NAMESPACE::chown, int, (const char *, uid_t, gid_t));
 #endif