X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FKM_fileio.cpp;h=b9257abda88d7d9c87bd929cbce7a9bd806c47c7;hb=f6761c9d335a482925d7ad9b1b72543684afcb77;hp=d00031c3c4ab3416a645253ef1daa58d684f9096;hpb=d28ab84e2422180474aa3e80cc98097dca25aca0;p=asdcplib.git diff --git a/src/KM_fileio.cpp b/src/KM_fileio.cpp index d00031c..b9257ab 100644 --- a/src/KM_fileio.cpp +++ b/src/KM_fileio.cpp @@ -57,6 +57,7 @@ struct iovec { # if defined(__linux__) # include # else +# include # include # endif @@ -212,7 +213,7 @@ Kumu::FileSize(const std::string& pathname) // static PathCompList_t& -s_PathMakeCanonical(PathCompList_t& CList, char separator, bool is_absolute) +s_PathMakeCanonical(PathCompList_t& CList, bool is_absolute) { PathCompList_t::iterator ci, ri; // component and removal iterators @@ -246,7 +247,7 @@ Kumu::PathMakeCanonical(const std::string& Path, char separator) { PathCompList_t CList; bool is_absolute = PathIsAbsolute(Path, separator); - s_PathMakeCanonical(PathToComponents(Path, CList, separator), separator, is_absolute); + s_PathMakeCanonical(PathToComponents(Path, CList, separator), is_absolute); if ( is_absolute ) return ComponentsToAbsolutePath(CList, separator); @@ -349,10 +350,10 @@ Kumu::PathMakeAbsolute(const std::string& Path, char separator) } PathCompList_t CList; - CList.push_back(cwd_buf); + PathToComponents(cwd_buf, CList); CList.push_back(Path); - return ComponentsToAbsolutePath(s_PathMakeCanonical(CList, separator, true), separator); + return ComponentsToAbsolutePath(s_PathMakeCanonical(CList, true), separator); } // @@ -428,6 +429,28 @@ Kumu::PathSetExtension(const std::string& Path, const std::string& Extension) // return Basename + "." + Extension; } +// +std::string +Kumu::PathJoin(const std::string& Path1, const std::string& Path2, char separator) +{ + return Path1 + separator + Path2; +} + +// +std::string +Kumu::PathJoin(const std::string& Path1, const std::string& Path2, const std::string& Path3, char separator) +{ + return Path1 + separator + Path2 + separator + Path3; +} + +// +std::string +Kumu::PathJoin(const std::string& Path1, const std::string& Path2, + const std::string& Path3, const std::string& Path4, char separator) +{ + return Path1 + separator + Path2 + separator + Path3 + separator + Path4; +} + // Kumu::PathList_t& Kumu::FindInPaths(const IPathMatch& Pattern, const Kumu::PathList_t& SearchPaths, @@ -1377,7 +1400,6 @@ Result_t Kumu::CreateDirectoriesInPath(const std::string& Path) { bool abs = PathIsAbsolute(Path); - assert(abs); PathCompList_t PathComps, TmpPathComps; PathToComponents(Path, PathComps); @@ -1433,7 +1455,9 @@ Kumu::DeleteFile(const std::string& filename) Result_t h__DeletePath(const std::string& pathname) { - fprintf(stderr, "h__DeletePath %s\n", pathname.c_str()); + if ( pathname.empty() ) + return RESULT_NULL_STR; + Result_t result = RESULT_OK; if ( ! PathIsDirectory(pathname) ) @@ -1504,17 +1528,17 @@ Kumu::DeletePath(const std::string& pathname) Result_t Kumu::FreeSpaceForPath(const std::string& path, Kumu::fsize_t& free_space, Kumu::fsize_t& total_space) -{ +{ #ifdef KM_WIN32 - ULARGE_INTEGER lTotalNumberOfBytes; + ULARGE_INTEGER lTotalNumberOfBytes; ULARGE_INTEGER lTotalNumberOfFreeBytes; BOOL fResult = ::GetDiskFreeSpaceEx(path.c_str(), NULL, &lTotalNumberOfBytes, &lTotalNumberOfFreeBytes); - if (fResult) { + if (fResult) { free_space = static_cast(lTotalNumberOfFreeBytes.QuadPart); total_space = static_cast(lTotalNumberOfBytes.QuadPart); return RESULT_OK; - } + } HRESULT LastError = ::GetLastError(); DefaultLogSink().Error("FreeSpaceForPath GetDiskFreeSpaceEx %s: %lu\n", path.c_str(), ::GetLastError());