| #include <windows.h> |
| #include <nt.h> |
| #include <limits.h> |
| #include <errno.h> |
| |
| char *getcwd(char *buf, unsigned int size) { |
| wchar_t wpath[PATH_MAX]; |
| RtlGetCurrentDirectory_U(PATH_MAX, wpath); |
| size_t len = wcslen(wpath) * 2 - 1; |
| if(!size) { |
| if(buf) { |
| //errno = EINVAL; |
| return NULL; |
| } |
| buf = (char *)malloc(PATH_MAX * 2 * sizeof(char)); |
| size = PATH_MAX * 2; |
| } else if(size < len) { |
| //errno = ERANGE; |
| return NULL; |
| } |
| wcstombs(buf, wpath, size); |
| if(len) while(--len) if(buf[len] == '\\') buf[len] = '/'; |
| return buf; |
| } |