@@ -162,16 +162,28 @@ #ifdef OF_HAVE_FILES - (OFString *)currentDirectoryPath { # if defined(OF_WINDOWS) OFString *ret; - wchar_t *buffer = _wgetcwd(NULL, 0); - @try { - ret = [OFString stringWithUTF16String: buffer]; - } @finally { - free(buffer); + if ([OFSystemInfo isWindowsNT]) { + wchar_t *buffer = _wgetcwd(NULL, 0); + + @try { + ret = [OFString stringWithUTF16String: buffer]; + } @finally { + free(buffer); + } + } else { + char *buffer = _getcwd(NULL, 0); + + @try { + ret = [OFString stringWithCString: buffer + encoding: [OFLocale encoding]]; + } @finally { + free(buffer); + } } return ret; # elif defined(OF_AMIGAOS) char buffer[512]; @@ -480,16 +492,11 @@ - (void)changeCurrentDirectoryPath: (OFString *)path { if (path == nil) @throw [OFInvalidArgumentException exception]; -# if defined(OF_WINDOWS) - if (_wchdir(path.UTF16String) != 0) - @throw [OFChangeCurrentDirectoryPathFailedException - exceptionWithPath: path - errNo: errno]; -# elif defined(OF_AMIGAOS) +# ifdef OF_AMIGAOS BPTR lock, oldLock; if ((lock = Lock([path cStringWithEncoding: [OFLocale encoding]], SHARED_LOCK)) == 0) { int errNo; @@ -519,11 +526,21 @@ else UnLock(oldLock); dirChanged = true; # else - if (chdir([path cStringWithEncoding: [OFLocale encoding]]) != 0) + int status; + +# ifdef OF_WINDOWS + if ([OFSystemInfo isWindowsNT]) + status = _wchdir(path.UTF16String); + else +# endif + status = chdir( + [path cStringWithEncoding: [OFLocale encoding]]); + + if (status != 0) @throw [OFChangeCurrentDirectoryPathFailedException exceptionWithPath: path errNo: errno]; # endif }