Hash :
cb7317d7
Author :
Date :
2009-10-06T16:08:46
mkdir, mkdirat: fix cygwin 1.5.x bug
mkdir("dir/./",mode) mistakenly succeeded.
* lib/mkdir.c (rpl_mkdir) [FUNC_MKDIR_DOT_BUG]: Work around bug.
* m4/mkdir-slash.m4 (gl_FUNC_MKDIR_TRAILING_SLASH): Move...
* m4/mkdir.m4 (gl_FUNC_MKDIR): ...here, and add check for cygwin
bug.
(gl_PREREQ_MKDIR): Delete unused macro.
* modules/mkdir (Files): Track file rename.
(configure.ac): Update macro name.
* modules/openat (Depends-on): Add mkdir.
* doc/posix-functions/mkdir.texi (mkdir): Document the bug.
Signed-off-by: Eric Blake <ebb9@byu.net>
@node mkdir
@section @code{mkdir}
@findex mkdir
POSIX specification: @url{http://www.opengroup.org/onlinepubs/9699919799/functions/mkdir.html}
Gnulib module: mkdir
Portability problems fixed by Gnulib:
@itemize
@item
When the argument ends in a slash, the function call fails on some platforms.
@item
This function mistakenly succeeds on @samp{mkdir("d/./",mode)} on
some platforms:
Cygwin 1.5.x, mingw.
@item
On Windows platforms (excluding Cygwin), this function is called @code{_mkdir}
and takes only one argument. The fix (without Gnulib) is to define a macro
like this:
@smallexample
#define mkdir ((int (*)()) _mkdir)
@end smallexample
or
@smallexample
#define mkdir(path,mode) _mkdir (path)
@end smallexample
@end itemize
Portability problems not fixed by Gnulib:
@itemize
@end itemize