mirror of
https://git.savannah.gnu.org/git/gnulib.git
synced 2025-08-17 12:41:05 +03:00
getcwd: fix mingw bugs
On mingw, getcwd(NULL,1) succeeds, even though glibc documents that with a non-zero size, the allocation will not exceed that many bytes. On mingw, getcwd has the wrong signature. However, we don't have to check for this if anything else triggers the replacement. Also, fix a type bug that crept into the original getcwd-lgpl commit. * m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Detect one mingw bug. * doc/posix-functions/getcwd.texi (getcwd): Document the problems. * lib/getcwd-lgpl.c (rpl_getcwd): Fix return type. Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
2011-04-27 Eric Blake <eblake@redhat.com>
|
||||||
|
|
||||||
|
getcwd: fix mingw bugs
|
||||||
|
* m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Detect one mingw bug.
|
||||||
|
* doc/posix-functions/getcwd.texi (getcwd): Document the problems.
|
||||||
|
* lib/getcwd-lgpl.c (rpl_getcwd): Fix return type.
|
||||||
|
|
||||||
2011-04-27 Bruno Haible <bruno@clisp.org>
|
2011-04-27 Bruno Haible <bruno@clisp.org>
|
||||||
|
|
||||||
mkstemps: Ensure declaration on MacOS X 10.5.
|
mkstemps: Ensure declaration on MacOS X 10.5.
|
||||||
|
@@ -11,7 +11,12 @@ Portability problems fixed by either Gnulib module @code{getcwd} or
|
|||||||
@itemize
|
@itemize
|
||||||
@item
|
@item
|
||||||
On glibc platforms, @code{getcwd (NULL, n)} allocates memory for the result.
|
On glibc platforms, @code{getcwd (NULL, n)} allocates memory for the result.
|
||||||
On other platforms, this call is not allowed.
|
On some other platforms, this call is not allowed. Conversely, mingw fails
|
||||||
|
to honor non-zero @code{n}.
|
||||||
|
@item
|
||||||
|
On some platforms, the prototype for @code{getcwd} uses @code{int}
|
||||||
|
instead of @code{size_t} for the size argument:
|
||||||
|
mingw.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
Portability problems fixed by Gnulib module @code{getcwd}:
|
Portability problems fixed by Gnulib module @code{getcwd}:
|
||||||
|
@@ -53,7 +53,7 @@ rpl_getcwd (char *buf, size_t size)
|
|||||||
if (!buf)
|
if (!buf)
|
||||||
{
|
{
|
||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
return -1;
|
return NULL;
|
||||||
}
|
}
|
||||||
result = getcwd (buf, size);
|
result = getcwd (buf, size);
|
||||||
if (!result)
|
if (!result)
|
||||||
|
10
m4/getcwd.m4
10
m4/getcwd.m4
@@ -6,7 +6,7 @@
|
|||||||
# with or without modifications, as long as this notice is preserved.
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
# Written by Paul Eggert.
|
# Written by Paul Eggert.
|
||||||
# serial 5
|
# serial 6
|
||||||
|
|
||||||
AC_DEFUN([gl_FUNC_GETCWD_NULL],
|
AC_DEFUN([gl_FUNC_GETCWD_NULL],
|
||||||
[
|
[
|
||||||
@@ -20,7 +20,8 @@ AC_DEFUN([gl_FUNC_GETCWD_NULL],
|
|||||||
# endif
|
# endif
|
||||||
]], [[
|
]], [[
|
||||||
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||||
/* mingw cwd does not start with '/', but getcwd does allocate. */
|
/* mingw cwd does not start with '/', but getcwd does allocate.
|
||||||
|
However, mingw fails to honor non-zero size. */
|
||||||
#else
|
#else
|
||||||
if (chdir ("/") != 0)
|
if (chdir ("/") != 0)
|
||||||
return 1;
|
return 1;
|
||||||
@@ -36,6 +37,9 @@ AC_DEFUN([gl_FUNC_GETCWD_NULL],
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
/* If size is non-zero, allocation must fail if size is too small */
|
||||||
|
if (getcwd (NULL, 1))
|
||||||
|
return 5;
|
||||||
]])],
|
]])],
|
||||||
[gl_cv_func_getcwd_null=yes],
|
[gl_cv_func_getcwd_null=yes],
|
||||||
[gl_cv_func_getcwd_null=no],
|
[gl_cv_func_getcwd_null=no],
|
||||||
@@ -45,8 +49,6 @@ AC_DEFUN([gl_FUNC_GETCWD_NULL],
|
|||||||
*-gnu*) gl_cv_func_getcwd_null="guessing yes";;
|
*-gnu*) gl_cv_func_getcwd_null="guessing yes";;
|
||||||
# Guess yes on Cygwin.
|
# Guess yes on Cygwin.
|
||||||
cygwin*) gl_cv_func_getcwd_null="guessing yes";;
|
cygwin*) gl_cv_func_getcwd_null="guessing yes";;
|
||||||
# Guess yes on mingw.
|
|
||||||
mingw*) gl_cv_func_getcwd_null="guessing yes";;
|
|
||||||
# If we don't know, assume the worst.
|
# If we don't know, assume the worst.
|
||||||
*) gl_cv_func_getcwd_null="guessing no";;
|
*) gl_cv_func_getcwd_null="guessing no";;
|
||||||
esac
|
esac
|
||||||
|
Reference in New Issue
Block a user