1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include <__config> 10 #include <__utility/unreachable.h> 11 #include <filesystem> 12 #include <system_error> 13 14 #include "format_string.h" 15 16 _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM 17 18 filesystem_error::~filesystem_error() {} 19 20 void filesystem_error::__create_what(int __num_paths) { 21 const char* derived_what = system_error::what(); 22 __storage_->__what_ = [&]() -> string { 23 switch (__num_paths) { 24 case 0: 25 return detail::format_string("filesystem error: %s", derived_what); 26 case 1: 27 return detail::format_string("filesystem error: %s [" PATH_CSTR_FMT "]", derived_what, path1().c_str()); 28 case 2: 29 return detail::format_string( 30 "filesystem error: %s [" PATH_CSTR_FMT "] [" PATH_CSTR_FMT "]", 31 derived_what, 32 path1().c_str(), 33 path2().c_str()); 34 } 35 __libcpp_unreachable(); 36 }(); 37 } 38 39 _LIBCPP_END_NAMESPACE_FILESYSTEM 40