[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