buf->st_dev = buf->st_rdev = 0;
} else {
wchar_t cur_path[MAXPATHLEN+1];
- DWORD len = sizeof(cur_path);
- wchar_t *tmp = cur_path;
-
- while(1) {
- DWORD r = GetCurrentDirectoryW(len, tmp);
- if (r < len) {
- if (tmp[1] == L':') {
- if (pathw[0] >= L'A' && pathw[0] <= L'Z') {
- buf->st_dev = buf->st_rdev = pathw[0] - L'A';
- } else {
- buf->st_dev = buf->st_rdev = pathw[0] - L'a';
- }
+
+ if (NULL != _wgetcwd(cur_path, sizeof(cur_path)/sizeof(wchar_t))) {
+ if (cur_path[1] == L':') {
+ if (pathw[0] >= L'A' && pathw[0] <= L'Z') {
+ buf->st_dev = buf->st_rdev = pathw[0] - L'A';
} else {
- buf->st_dev = buf->st_rdev = -1;
+ buf->st_dev = buf->st_rdev = pathw[0] - L'a';
}
- break;
- } else if (!r) {
- buf->st_dev = buf->st_rdev = -1;
- break;
} else {
- len = r+1;
- tmp = (wchar_t*)malloc(len*sizeof(wchar_t));
+ buf->st_dev = buf->st_rdev = -1;
}
- }
- if (tmp != cur_path) {
- free(tmp);
+ } else {
+ buf->st_dev = buf->st_rdev = -1;
}
}