Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src-draft/trunk]: src/external/apache2/llvm/dist/libcxx/src/filesystem Drop ...



details:   https://anonhg.NetBSD.org/src-all/rev/2d8ab3db09f5
branches:  trunk
changeset: 983529:2d8ab3db09f5
user:      Joerg Sonnenberger <joerg%bec.de@localhost>
date:      Thu Feb 04 16:07:23 2021 +0100

description:
Drop a template layer and use format string checks instead

diffstat:

 external/apache2/llvm/dist/libcxx/src/filesystem/directory_iterator.cpp |   6 +-
 external/apache2/llvm/dist/libcxx/src/filesystem/filesystem_common.h    |  42 +++++-----
 external/apache2/llvm/dist/libcxx/src/filesystem/operations.cpp         |  23 ++--
 3 files changed, 35 insertions(+), 36 deletions(-)

diffs (160 lines):

diff -r b8c17959b928 -r 2d8ab3db09f5 external/apache2/llvm/dist/libcxx/src/filesystem/directory_iterator.cpp
--- a/external/apache2/llvm/dist/libcxx/src/filesystem/directory_iterator.cpp   Thu Feb 04 16:06:45 2021 +0100
+++ b/external/apache2/llvm/dist/libcxx/src/filesystem/directory_iterator.cpp   Thu Feb 04 16:07:23 2021 +0100
@@ -272,7 +272,7 @@
     path root = move(__imp_->__root_);
     __imp_.reset();
     if (m_ec)
-      err.report(m_ec, "at root \"%s\"", root);
+      err.report(m_ec, "at root \"%s\"", root.c_str());
   }
   return *this;
 }
@@ -359,7 +359,7 @@
   if (m_ec) {
     path root = move(stack.top().__root_);
     __imp_.reset();
-    err.report(m_ec, "at root \"%s\"", root);
+    err.report(m_ec, "at root \"%s\"", root.c_str());
   } else {
     __imp_.reset();
   }
@@ -404,7 +404,7 @@
     } else {
       path at_ent = move(curr_it.__entry_.__p_);
       __imp_.reset();
-      err.report(m_ec, "attempting recursion into \"%s\"", at_ent);
+      err.report(m_ec, "attempting recursion into \"%s\"", at_ent.c_str());
     }
   }
   return false;
diff -r b8c17959b928 -r 2d8ab3db09f5 external/apache2/llvm/dist/libcxx/src/filesystem/filesystem_common.h
--- a/external/apache2/llvm/dist/libcxx/src/filesystem/filesystem_common.h      Thu Feb 04 16:06:45 2021 +0100
+++ b/external/apache2/llvm/dist/libcxx/src/filesystem/filesystem_common.h      Thu Feb 04 16:07:23 2021 +0100
@@ -57,7 +57,7 @@
 
 namespace {
 
-static string format_string_imp(const char* msg, ...) {
+static __attribute__((__format__(__printf__, 1, 0))) string format_string_impl(const char* msg, va_list args) {
   // we might need a second shot at this, so pre-emptivly make a copy
   struct GuardVAList {
     va_list& target;
@@ -73,9 +73,6 @@
         va_end(target);
     }
   };
-  va_list args;
-  va_start(args, msg);
-  GuardVAList args_guard(args);
 
   va_list args_cp;
   va_copy(args_cp, args);
@@ -108,17 +105,10 @@
   return result;
 }
 
-const path::value_type* unwrap(path::string_type const& s) { return s.c_str(); }
-const path::value_type* unwrap(path const& p) { return p.native().c_str(); }
-template <class Arg>
-Arg const& unwrap(Arg const& a) {
-  static_assert(!is_class<Arg>::value, "cannot pass class here");
-  return a;
-}
-
-template <class... Args>
-string format_string(const char* fmt, Args const&... args) {
-  return format_string_imp(fmt, unwrap(args)...);
+static __attribute__((__format__(__printf__, 1, 2))) string format_string(const char* msg, ...) {
+    va_list args;
+    va_start(args, msg);
+    return format_string_impl(msg, args);
 }
 
 error_code capture_errno() {
@@ -190,14 +180,15 @@
     _LIBCPP_UNREACHABLE();
   }
 
-  template <class... Args>
-  T report(const error_code& ec, const char* msg, Args const&... args) const {
+  __attribute__((__format__(__printf__, 3, 0)))
+  T report_impl(const error_code& ec, const char* msg, va_list args) const {
     if (ec_) {
+      va_end(args);
       *ec_ = ec;
       return error_value<T>();
     }
     string what =
-        string("in ") + func_name_ + ": " + format_string(msg, args...);
+        string("in ") + func_name_ + ": " + format_string_impl(msg, args);
     switch (bool(p1_) + bool(p2_)) {
     case 0:
       __throw_filesystem_error(what, ec);
@@ -209,11 +200,20 @@
     _LIBCPP_UNREACHABLE();
   }
 
+  __attribute__((__format__(__printf__, 3, 4)))
+  T report(const error_code& ec, const char* msg, ...) const {
+    va_list args;
+    va_start(args, msg);
+    return report_impl(ec, msg, args);
+  }
+
   T report(errc const& err) const { return report(make_error_code(err)); }
 
-  template <class... Args>
-  T report(errc const& err, const char* msg, Args const&... args) const {
-    return report(make_error_code(err), msg, args...);
+  __attribute__((__format__(__printf__, 3, 4)))
+  T report(errc const& err, const char* msg, ...) const {
+    va_list args;
+    va_start(args, msg);
+    return report_impl(make_error_code(err), msg, args);
   }
 
 private:
diff -r b8c17959b928 -r 2d8ab3db09f5 external/apache2/llvm/dist/libcxx/src/filesystem/operations.cpp
--- a/external/apache2/llvm/dist/libcxx/src/filesystem/operations.cpp   Thu Feb 04 16:06:45 2021 +0100
+++ b/external/apache2/llvm/dist/libcxx/src/filesystem/operations.cpp   Thu Feb 04 16:07:23 2021 +0100
@@ -987,16 +987,15 @@
   if (detail::mkdir(p.c_str(), attr_stat.st_mode) == 0)
     return true;
 
-  if (errno == EEXIST) {
-    error_code mec = capture_errno();
-    error_code ignored_ec;
-    const file_status st = status(p, ignored_ec);
-    if (!is_directory(st)) {
-      err.report(mec);
-    }
-  } else {
-    err.report(capture_errno());
-  }
+  if (errno != EEXIST)
+    return err.report(capture_errno());
+
+  mec = capture_errno();
+  error_code ignored_ec;
+  st = status(p, ignored_ec);
+  if (!is_directory(st))
+    return err.report(mec);
+
   return false;
 }
 
@@ -1360,11 +1359,11 @@
   error_code m_ec;
   file_status st = detail::posix_stat(p, &m_ec);
   if (!status_known(st))
-    return err.report(m_ec, "cannot access path \"" PS_FMT "\"", p);
+    return err.report(m_ec, "cannot access path \"" PS_FMT "\"", p.c_str());
 
   if (!exists(st) || !is_directory(st))
     return err.report(errc::not_a_directory, "path \"" PS_FMT "\" is not a directory",
-                      p);
+                      p.c_str());
 
   return p;
 }



Home | Main Index | Thread Index | Old Index