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