[winpr,env] fix use of getcwd

do not rely on GNU_SOURCE extensions
This commit is contained in:
akallabeth 2024-11-11 16:26:50 +01:00
parent 08d21e9f09
commit 48a387938d
No known key found for this signature in database
GPG Key ID: A49454A3FC909FD5

View File

@ -24,12 +24,15 @@
#include <winpr/crt.h> #include <winpr/crt.h>
#include <winpr/platform.h> #include <winpr/platform.h>
#include <winpr/error.h> #include <winpr/error.h>
#include <winpr/file.h>
#include <winpr/string.h> #include <winpr/string.h>
#include <winpr/environment.h> #include <winpr/environment.h>
#ifndef _WIN32 #ifndef _WIN32
#include <errno.h>
#ifdef WINPR_HAVE_UNISTD_H #ifdef WINPR_HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif #endif
@ -43,20 +46,35 @@
DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer) DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer)
{ {
char* cwd = NULL;
size_t length = 0; size_t length = 0;
char* cwd = NULL;
char* ccwd = NULL;
cwd = getcwd(NULL, 0); do
{
length += MAX_PATH;
char* tmp = realloc(cwd, length);
if (!tmp)
{
free(cwd);
return 0;
}
cwd = tmp;
if (!cwd) ccwd = getcwd(cwd, length);
} while (!ccwd && (errno == ERANGE));
if (!ccwd)
{
free(cwd);
return 0; return 0;
}
length = strlen(cwd); length = strnlen(cwd, length);
if ((nBufferLength == 0) && (lpBuffer == NULL)) if ((nBufferLength == 0) && (lpBuffer == NULL))
{ {
free(cwd); free(cwd);
return (DWORD)length; return (DWORD)length;
} }
else else