diff options
| author | Frederick Martian <fredmartian@gmail.com> | 2025-10-25 17:08:35 +0200 |
|---|---|---|
| committer | Andrey Kleshchev <117672381+akleshchev@users.noreply.github.com> | 2025-12-10 20:33:58 +0200 |
| commit | 3ca3ea75c333078013914e174564340f894573e2 (patch) | |
| tree | c12dfa3492102e87c153a997d946c1d173a35666 /indra/llcommon | |
| parent | 79f21027371f32a9268ce8d944e3d4727ddd8b55 (diff) | |
Add a new static function LLFile::size() to determine the size of a file_name.
Replace LLAPRFile::remove(), LLAPRFile::size() and LLAPRFile::isExist() with according functions from LLFile and retire these LLAPRFile methods and the never used LLAPRFile::rename(), LLAPRFile::makeDir() and LLAPRFile::removeDir() functions.
Also clean up remarks about the threading safety of the APRCachePool, which is not used in these locations anymore.
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/llapr.cpp | 118 | ||||
| -rw-r--r-- | indra/llcommon/llapr.h | 9 | ||||
| -rw-r--r-- | indra/llcommon/llfile.cpp | 39 | ||||
| -rw-r--r-- | indra/llcommon/llfile.h | 7 |
4 files changed, 46 insertions, 127 deletions
diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp index eeff2694a7..cffd6b7bc0 100644 --- a/indra/llcommon/llapr.cpp +++ b/indra/llcommon/llapr.cpp @@ -628,124 +628,6 @@ S32 LLAPRFile::writeEx(const std::string& filename, const void *buf, S32 offset, return (S32)bytes_written; } -//static -bool LLAPRFile::remove(const std::string& filename, LLVolatileAPRPool* pool) -{ - apr_status_t s; - - LLAPRFilePoolScope scope(pool); - s = apr_file_remove(filename.c_str(), scope.getVolatileAPRPool()); - - if (s != APR_SUCCESS) - { - ll_apr_warn_status(s); - LL_WARNS("APR") << " Attempting to remove filename: " << filename << LL_ENDL; - return false; - } - return true; -} - -//static -bool LLAPRFile::rename(const std::string& filename, const std::string& newname, LLVolatileAPRPool* pool) -{ - apr_status_t s; - - LLAPRFilePoolScope scope(pool); - s = apr_file_rename(filename.c_str(), newname.c_str(), scope.getVolatileAPRPool()); - - if (s != APR_SUCCESS) - { - ll_apr_warn_status(s); - LL_WARNS("APR") << " Attempting to rename filename: " << filename << LL_ENDL; - return false; - } - return true; -} - -//static -bool LLAPRFile::isExist(const std::string& filename, LLVolatileAPRPool* pool, apr_int32_t flags) -{ - apr_file_t* apr_file; - apr_status_t s; - - LLAPRFilePoolScope scope(pool); - s = apr_file_open(&apr_file, filename.c_str(), flags, APR_OS_DEFAULT, scope.getVolatileAPRPool()); - - if (s != APR_SUCCESS || !apr_file) - { - return false; - } - else - { - apr_file_close(apr_file) ; - return true; - } -} - -//static -S32 LLAPRFile::size(const std::string& filename, LLVolatileAPRPool* pool) -{ - apr_file_t* apr_file; - apr_finfo_t info; - apr_status_t s; - - LLAPRFilePoolScope scope(pool); - s = apr_file_open(&apr_file, filename.c_str(), APR_READ, APR_OS_DEFAULT, scope.getVolatileAPRPool()); - - if (s != APR_SUCCESS || !apr_file) - { - return 0; - } - else - { - apr_status_t s = apr_file_info_get(&info, APR_FINFO_SIZE, apr_file); - - apr_file_close(apr_file) ; - - if (s == APR_SUCCESS) - { - return (S32)info.size; - } - else - { - return 0; - } - } -} - -//static -bool LLAPRFile::makeDir(const std::string& dirname, LLVolatileAPRPool* pool) -{ - apr_status_t s; - - LLAPRFilePoolScope scope(pool); - s = apr_dir_make(dirname.c_str(), APR_FPROT_OS_DEFAULT, scope.getVolatileAPRPool()); - - if (s != APR_SUCCESS) - { - ll_apr_warn_status(s); - LL_WARNS("APR") << " Attempting to make directory: " << dirname << LL_ENDL; - return false; - } - return true; -} - -//static -bool LLAPRFile::removeDir(const std::string& dirname, LLVolatileAPRPool* pool) -{ - apr_status_t s; - - LLAPRFilePoolScope scope(pool); - s = apr_file_remove(dirname.c_str(), scope.getVolatileAPRPool()); - - if (s != APR_SUCCESS) - { - ll_apr_warn_status(s); - LL_WARNS("APR") << " Attempting to remove directory: " << dirname << LL_ENDL; - return false; - } - return true; -} // //end of static components of LLAPRFile //******************************************************************************************************************************* diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h index 11e474b5dd..5477cfcacd 100644 --- a/indra/llcommon/llapr.h +++ b/indra/llcommon/llapr.h @@ -185,19 +185,10 @@ private: static apr_status_t close(apr_file_t* file) ; static S32 seek(apr_file_t* file, apr_seek_where_t where, S32 offset); public: - // returns false if failure: - static bool remove(const std::string& filename, LLVolatileAPRPool* pool = NULL); - static bool rename(const std::string& filename, const std::string& newname, LLVolatileAPRPool* pool = NULL); - static bool isExist(const std::string& filename, LLVolatileAPRPool* pool = NULL, apr_int32_t flags = APR_READ); - static S32 size(const std::string& filename, LLVolatileAPRPool* pool = NULL); - static bool makeDir(const std::string& dirname, LLVolatileAPRPool* pool = NULL); - static bool removeDir(const std::string& dirname, LLVolatileAPRPool* pool = NULL); - // Returns bytes read/written, 0 if read/write fails: static S32 readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL); static S32 writeEx(const std::string& filename, const void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL); // offset<0 means append //******************************************************************************************************************************* }; - #endif // LL_LLAPR_H diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp index a539e4fe28..4ef39674c2 100644 --- a/indra/llcommon/llfile.cpp +++ b/indra/llcommon/llfile.cpp @@ -498,6 +498,45 @@ int LLFile::stat(const std::string& filename, llstat* filestatus, int suppress_e } // static +S64 LLFile::size(const std::string& filename, int suppress_error) +{ +#if LL_WINDOWS + std::wstring utf16filename = utf8path_to_wstring(filename); + HANDLE file_handle = CreateFileW(utf16filename.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (INVALID_HANDLE_VALUE != file_handle) + { + LARGE_INTEGER file_size; + if (GetFileSizeEx(file_handle, &file_size)) + { + CloseHandle(file_handle); + return file_size.QuadPart; + } + } + // Get last error before calling the CloseHandle() function + int rc = set_errno_from_oserror(GetLastError()); + if (INVALID_HANDLE_VALUE != file_handle) + { + CloseHandle(file_handle); + } +#else + llstat filestatus; + int rc = ::stat(filename.c_str(), &filestatus); + if (rc == 0) + { + if (S_ISREG(filestatus.st_mode) + { + return filestatus.st_size; + } + // We got something else than a file + rc = -1; + errno = EACCES; + } +#endif + warnif("size", filename, rc, suppress_error); + return 0; +} + +// static unsigned short LLFile::getattr(const std::string& filename, bool dontFollowSymLink, int suppress_error) { #if LL_WINDOWS diff --git a/indra/llcommon/llfile.h b/indra/llcommon/llfile.h index 04a2946ac4..61ec8a5e4e 100644 --- a/indra/llcommon/llfile.h +++ b/indra/llcommon/llfile.h @@ -148,6 +148,13 @@ public: /// @returns 0 on failure and a st_mode value with either S_IFDIR or S_IFREG set otherwise /// together with the three access bits which under Windows only the write bit is relevant. + /// get the size of a file in bytes + static S64 size(const std::string& filename, int suppress_error = ENOENT); + ///> returns the size of a file in bytes + /// we pass by default ENOENT in the optional 'suppress_error' parameter to not spam the log with + /// warnings when the file does not exist + /// @returns the file size on success and 0 on failure. + /// check if filename is an existing directory static bool isdir(const std::string& filename); ///< @returns true if the path is for an existing directory |
