diff --git a/examples/dir.cpp b/examples/dir.cpp index 67c7b84..035efd1 100644 --- a/examples/dir.cpp +++ b/examples/dir.cpp @@ -1,17 +1,21 @@ -#include -#include #include +#include +#include #include -#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include) && __has_include() +#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include) +#if __has_include() #include namespace fs = std::filesystem; -#else +#define GHC_USE_STD_FS +#endif +#endif +#ifndef GHC_USE_STD_FS #include namespace fs = ghc::filesystem; #endif -template +template std::time_t to_time_t(TP tp) { // Based on trick from: Nico Josuttis, C++17 - The Complete Guide @@ -23,8 +27,8 @@ static std::string perm_to_str(fs::perms prms) { std::string result; result.reserve(9); - for(int i = 0; i < 9; ++i) { - result = ((static_cast(prms) & (1<(prms) & (1 << i)) ? "xwrxwrxwr"[i] : '-') + result; } return result; } @@ -33,27 +37,24 @@ int main(int argc, char* argv[]) { #ifdef GHC_FILESYSTEM_VERSION fs::u8arguments u8guard(argc, argv); - if(!u8guard.valid()) { + if (!u8guard.valid()) { std::cerr << "Invalid character encoding, UTF-8 based encoding needed." << std::endl; std::exit(EXIT_FAILURE); } #endif - if(argc > 2) { + if (argc > 2) { std::cerr << "USAGE: dir " << std::endl; exit(1); } fs::path dir{"."}; - if(argc == 2) { + if (argc == 2) { dir = fs::u8path(argv[1]); } - for(auto de : fs::directory_iterator(dir)) { + for (auto de : fs::directory_iterator(dir)) { auto ft = to_time_t(de.last_write_time()); auto ftm = *std::localtime(&ft); - std::cout << (de.is_directory() ? "d" : "-") << perm_to_str(de.symlink_status().permissions()) << " " - << std::setw(8) << (de.is_directory() ? "-" : std::to_string(de.file_size())) << " " - << std::put_time(&ftm, "%Y-%m-%d %H:%M:%S") << " " - << de.path().filename().string() - << std::endl; + std::cout << (de.is_directory() ? "d" : "-") << perm_to_str(de.symlink_status().permissions()) << " " << std::setw(8) << (de.is_directory() ? "-" : std::to_string(de.file_size())) << " " << std::put_time(&ftm, "%Y-%m-%d %H:%M:%S") << " " + << de.path().filename().string() << std::endl; } return 0; } diff --git a/examples/du.cpp b/examples/du.cpp index 95b9580..8c0c0fb 100644 --- a/examples/du.cpp +++ b/examples/du.cpp @@ -2,10 +2,14 @@ #include #include -#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include) && __has_include() +#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include) +#if __has_include() #include namespace fs = std::filesystem; -#else +#define GHC_USE_STD_FS +#endif +#endif +#ifndef GHC_USE_STD_FS #include namespace fs = ghc::filesystem; #endif diff --git a/include/ghc/filesystem.hpp b/include/ghc/filesystem.hpp index b7b20cb..0fc29e0 100644 --- a/include/ghc/filesystem.hpp +++ b/include/ghc/filesystem.hpp @@ -1296,13 +1296,13 @@ inline StringType fromUtf8(const std::string& utf8String, const typename StringT return result; } -template ::type* = nullptr> +template ::type size = 1> inline std::string toUtf8(const std::basic_string& unicodeString) { return std::string(unicodeString.begin(), unicodeString.end()); } -template ::type* = nullptr> +template ::type size = 2> inline std::string toUtf8(const std::basic_string& unicodeString) { std::string result; @@ -1324,7 +1324,7 @@ inline std::string toUtf8(const std::basic_string& unicode return result; } -template ::type* = nullptr> +template ::type size = 4> inline std::string toUtf8(const std::basic_string& unicodeString) { std::string result; @@ -1334,10 +1334,10 @@ inline std::string toUtf8(const std::basic_string& unicode return result; } -template -inline std::string toUtf8(const SourceType* unicodeString) +template +inline std::string toUtf8(const charT* unicodeString) { - return toUtf8(std::basic_string>(unicodeString)); + return toUtf8(std::basic_string>(unicodeString)); } } // namespace detail