| @node getcwd |
| @section @code{getcwd} |
| @findex getcwd |
| |
| POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html} |
| |
| Gnulib module: getcwd or getcwd-lgpl |
| |
| Portability problems fixed by either Gnulib module @code{getcwd} or |
| @code{getcwd-lgpl}: |
| @itemize |
| @item |
| This function is declared in different header files (namely, @code{<io.h>} or |
| @code{<direct.h>}) on some platforms: |
| mingw, MSVC 14. |
| @item |
| On glibc and Solaris 11.4 platforms, |
| @code{getcwd (NULL, n)} allocates memory for the result. |
| On some other platforms, this call is not allowed. |
| @item |
| On some platforms, the prototype for @code{getcwd} uses @code{int} |
| instead of @code{size_t} for the size argument when using non-standard |
| headers, and the declaration is missing from @code{<unistd.h>}: |
| mingw, MSVC 14. |
| @item |
| On some platforms, @code{getcwd (buf, 0)} crashes: |
| MSVC 14. |
| @item |
| On some platforms, @code{getcwd (buf, 0)} fails with @code{ERANGE} |
| instead of the required @code{EINVAL}: |
| mingw. |
| @end itemize |
| |
| Portability problems fixed by Gnulib module @code{getcwd}: |
| @itemize |
| @item |
| This function is missing on some older platforms. |
| @item |
| This function does not handle long file names (greater than @code{PATH_MAX}) |
| correctly on some platforms: |
| glibc on Linux 2.4.20, Mac OS X 10.5, FreeBSD 6.4, NetBSD 5.1, OpenBSD 4.9, AIX 7.1. |
| @end itemize |
| |
| Portability problems not fixed by Gnulib: |
| @itemize |
| @item |
| When using @code{getcwd(NULL, nonzero)}, some platforms, such as glibc |
| or cygwin, allocate exactly @code{nonzero} bytes and fail with |
| @code{ERANGE} if it was not big enough, while other platforms, such as |
| FreeBSD, mingw, or MSVC 14, ignore the size argument and allocate whatever size |
| is necessary. If this call succeeds, an application cannot portably |
| access beyond the string length of the result. |
| @end itemize |