diff options
Diffstat (limited to 'win32')
-rw-r--r-- | win32/win32.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/win32/win32.c b/win32/win32.c index b817cdf4ea..c044efdd22 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -2611,15 +2611,22 @@ rb_w32_getcwd(char *buffer, int size) { int length; char *bp; + int save_errno = errno; #undef getcwd + errno = 0; + SetLastError(0); if (getcwd(buffer, size) == NULL) { + if (!errno) + errno = GetLastError() ? map_errno(GetLastError()) : ERANGE; return NULL; } length = strlen(buffer); if (length >= size) { + errno = ERANGE; return NULL; } + errno = save_errno; for (bp = buffer; *bp != '\0'; bp = CharNext(bp)) { if (*bp == '\\') { |