xref: /freebsd-src/contrib/llvm-project/libcxx/src/filesystem/filesystem_error.cpp (revision cb14a3fe5122c879eae1fb480ed7ce82a699ddb6)
106c3fb27SDimitry Andric //===----------------------------------------------------------------------===//
206c3fb27SDimitry Andric //
306c3fb27SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
406c3fb27SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
506c3fb27SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
606c3fb27SDimitry Andric //
706c3fb27SDimitry Andric //===----------------------------------------------------------------------===//
806c3fb27SDimitry Andric 
906c3fb27SDimitry Andric #include <__config>
1006c3fb27SDimitry Andric #include <__utility/unreachable.h>
1106c3fb27SDimitry Andric #include <filesystem>
1206c3fb27SDimitry Andric #include <system_error>
1306c3fb27SDimitry Andric 
1406c3fb27SDimitry Andric #include "format_string.h"
1506c3fb27SDimitry Andric 
1606c3fb27SDimitry Andric _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM
1706c3fb27SDimitry Andric 
~filesystem_error()1806c3fb27SDimitry Andric filesystem_error::~filesystem_error() {}
1906c3fb27SDimitry Andric 
__create_what(int __num_paths)2006c3fb27SDimitry Andric void filesystem_error::__create_what(int __num_paths) {
2106c3fb27SDimitry Andric   const char* derived_what = system_error::what();
2206c3fb27SDimitry Andric   __storage_->__what_      = [&]() -> string {
2306c3fb27SDimitry Andric     switch (__num_paths) {
2406c3fb27SDimitry Andric     case 0:
2506c3fb27SDimitry Andric       return detail::format_string("filesystem error: %s", derived_what);
2606c3fb27SDimitry Andric     case 1:
27*cb14a3feSDimitry Andric       return detail::format_string("filesystem error: %s [" PATH_CSTR_FMT "]", derived_what, path1().c_str());
2806c3fb27SDimitry Andric     case 2:
29*cb14a3feSDimitry Andric       return detail::format_string(
30*cb14a3feSDimitry Andric           "filesystem error: %s [" PATH_CSTR_FMT "] [" PATH_CSTR_FMT "]",
31*cb14a3feSDimitry Andric           derived_what,
32*cb14a3feSDimitry Andric           path1().c_str(),
33*cb14a3feSDimitry Andric           path2().c_str());
3406c3fb27SDimitry Andric     }
3506c3fb27SDimitry Andric     __libcpp_unreachable();
3606c3fb27SDimitry Andric   }();
3706c3fb27SDimitry Andric }
3806c3fb27SDimitry Andric 
3906c3fb27SDimitry Andric _LIBCPP_END_NAMESPACE_FILESYSTEM
40