[libcxx-commits] [PATCH] D91169: [14/N] [libcxx] Implement the current_path function for windows
Martin Storsjö via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Jan 19 08:21:51 PST 2021
mstorsjo updated this revision to Diff 317578.
mstorsjo added a comment.
Moved to a `getcwd` helper in posix_compat.h, change existing code to use `path::value_type` instead of hardcoded `char`.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D91169/new/
https://reviews.llvm.org/D91169
Files:
libcxx/src/filesystem/operations.cpp
libcxx/src/filesystem/posix_compat.h
Index: libcxx/src/filesystem/posix_compat.h
===================================================================
--- libcxx/src/filesystem/posix_compat.h
+++ libcxx/src/filesystem/posix_compat.h
@@ -277,6 +277,10 @@
}
int close(int fd) { return _close(fd); }
int chdir(const wchar_t *path) { return _wchdir(path); }
+
+wchar_t *getcwd(wchar_t *buff, size_t size) {
+ return _wgetcwd(buff, size);
+}
#else
int symlink_file(const char *oldname, const char *newname) {
return ::symlink(oldname, newname);
@@ -288,6 +292,7 @@
using ::close;
using ::fstat;
using ::ftruncate;
+using ::getcwd;
using ::link;
using ::lstat;
using ::mkdir;
Index: libcxx/src/filesystem/operations.cpp
===================================================================
--- libcxx/src/filesystem/operations.cpp
+++ libcxx/src/filesystem/operations.cpp
@@ -1018,12 +1018,16 @@
path __current_path(error_code* ec) {
ErrorHandler<path> err("current_path", ec);
+#if defined(_LIBCPP_WIN32API)
+ auto size = MAX_PATH;
+#else
auto size = ::pathconf(".", _PC_PATH_MAX);
_LIBCPP_ASSERT(size >= 0, "pathconf returned a 0 as max size");
+#endif
- auto buff = unique_ptr<char[]>(new char[size + 1]);
- char* ret;
- if ((ret = ::getcwd(buff.get(), static_cast<size_t>(size))) == nullptr)
+ auto buff = unique_ptr<path::value_type[]>(new path::value_type[size + 1]);
+ path::value_type* ret;
+ if ((ret = detail::getcwd(buff.get(), static_cast<size_t>(size))) == nullptr)
return err.report(capture_errno(), "call to getcwd failed");
return {buff.get()};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91169.317578.patch
Type: text/x-patch
Size: 1560 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210119/66c3e59e/attachment.bin>
More information about the libcxx-commits
mailing list