Get_current_directory() allocate buffer if needed
This commit is contained in:
parent
f90a2331dd
commit
a69ad46902
15
src/io.c
15
src/io.c
@ -886,7 +886,18 @@ char * Get_current_directory(char * buf, word * buf_unicode, size_t size)
|
||||
|
||||
return buf;
|
||||
#elif defined(WIN32)
|
||||
/// @TODO allocate buf if needed
|
||||
if (buf == NULL)
|
||||
{
|
||||
size = (size_t)GetCurrentDirectoryA(0, buf);
|
||||
if (size == 0)
|
||||
return NULL;
|
||||
buf = malloc(size);
|
||||
if (buf == NULL)
|
||||
{
|
||||
GFX2_Log(GFX2_ERROR, "Failed to allocate %lu bytes.\n", (unsigned long)size);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
if (GetCurrentDirectoryA(size, buf) == 0)
|
||||
return NULL;
|
||||
if (buf_unicode != NULL)
|
||||
@ -903,6 +914,8 @@ char * Get_current_directory(char * buf, word * buf_unicode, size_t size)
|
||||
return buf;
|
||||
#else
|
||||
char * ret = getcwd(buf, size);
|
||||
if (ret == NULL)
|
||||
GFX2_Log(GFX2_ERROR, "getcwd(%p, %lu) failed !\n", buf, (unsigned long)size);
|
||||
#ifdef ENABLE_FILENAMES_ICONV
|
||||
if (ret != NULL && buf_unicode != NULL)
|
||||
{
|
||||
|
||||
4
src/io.h
4
src/io.h
@ -183,6 +183,10 @@ void Release_lock_file(const char *file_directory);
|
||||
|
||||
///
|
||||
/// Return the current directory, equivalent to getcwd()
|
||||
/// @param buf destination buffer. can be NULL
|
||||
/// @param buf_unicode destination buffer for the unicode version of the path
|
||||
/// @param size destination buffer size, ignored if buf is NULL
|
||||
/// @return NULL for error, buf or a malloc'ed buffer
|
||||
char * Get_current_directory(char * buf, word * buf_unicode, size_t size);
|
||||
|
||||
///
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user