diff options
Diffstat (limited to 'sal/osl/unx/uunxapi.cxx')
-rw-r--r-- | sal/osl/unx/uunxapi.cxx | 74 |
1 files changed, 55 insertions, 19 deletions
diff --git a/sal/osl/unx/uunxapi.cxx b/sal/osl/unx/uunxapi.cxx index 45de25280980..1005140a2c91 100644 --- a/sal/osl/unx/uunxapi.cxx +++ b/sal/osl/unx/uunxapi.cxx @@ -31,7 +31,7 @@ #include <osl/detail/android-bootstrap.h> #endif -static OString OUStringToOString(const OUString& s) +OString osl::OUStringToOString(const OUString& s) { return OUStringToOString(s, osl_getThreadTextEncoding()); } @@ -156,9 +156,9 @@ static OString macxp_resolveAliasAndConvert(OString const & p) } #endif /* MACOSX */ -int osl::access(const OUString& pustrPath, int mode) +int osl::access(const OString& pstrPath, int mode) { - OString fn = OUStringToOString(pustrPath); + OString fn = pstrPath; #ifdef ANDROID if (fn == "/assets" || fn.startsWith("/assets/")) { @@ -194,16 +194,29 @@ int osl::access(const OUString& pustrPath, int mode) return result; } -bool osl::realpath(const OUString& pustrFileName, OUString& ppustrResolvedName) +namespace { + +OString toOString(OString const & s) { return s; } + +OString toOString(OUString const & s) { return osl::OUStringToOString(s); } + +template<typename T> T fromOString(OString const &) = delete; + +template<> OString fromOString(OString const & s) { return s; } + +template<> OUString fromOString(OString const & s) +{ return OStringToOUString(s, osl_getThreadTextEncoding()); } + +template<typename T> bool realpath_(const T& pstrFileName, T& ppstrResolvedName) { - OString fn = OUStringToOString(pustrFileName); + OString fn = toOString(pstrFileName); #ifdef ANDROID if (fn == "/assets" || fn.startsWith("/assets/")) { - if (osl::access(pustrFileName, F_OK) == -1) + if (osl::access(fn, F_OK) == -1) return false; - ppustrResolvedName = pustrFileName; + ppstrResolvedName = pstrFileName; return true; } @@ -216,7 +229,7 @@ bool osl::realpath(const OUString& pustrFileName, OUString& ppustrResolvedName) accessFilePathState *state = prepare_to_access_file_path(fn.getStr()); char rp[PATH_MAX]; - bool bRet = ::realpath(fn.getStr(), rp); + bool bRet = realpath(fn.getStr(), rp); int saved_errno = errno; if (!bRet) SAL_INFO("sal.file", "realpath(" << fn.getStr() << "): " << UnixErrnoString(saved_errno)); @@ -227,8 +240,7 @@ bool osl::realpath(const OUString& pustrFileName, OUString& ppustrResolvedName) if (bRet) { - ppustrResolvedName = OStringToOUString(OString(static_cast<sal_Char*>(rp)), - osl_getThreadTextEncoding()); + ppstrResolvedName = fromOString<T>(OString(static_cast<sal_Char*>(rp))); } errno = saved_errno; @@ -236,6 +248,18 @@ bool osl::realpath(const OUString& pustrFileName, OUString& ppustrResolvedName) return bRet; } +} + +bool osl::realpath(const OUString& pustrFileName, OUString& ppustrResolvedName) +{ + return realpath_(pustrFileName, ppustrResolvedName); +} + +bool osl::realpath(const OString& pstrFileName, OString& ppstrResolvedName) +{ + return realpath_(pstrFileName, ppstrResolvedName); +} + int stat_c(const char* cpPath, struct stat* buf) { #ifdef ANDROID @@ -286,9 +310,11 @@ int lstat_c(const char* cpPath, struct stat* buf) return result; } -int osl::lstat(const OUString& pustrPath, struct stat& buf) +namespace { + +template<typename T> int lstat_(const T& pstrPath, struct stat& buf) { - OString fn = OUStringToOString(pustrPath); + OString fn = toOString(pstrPath); #ifdef MACOSX fn = macxp_resolveAliasAndConvert(fn); @@ -297,20 +323,30 @@ int osl::lstat(const OUString& pustrPath, struct stat& buf) return lstat_c(fn.getStr(), &buf); } -int osl::mkdir(const OUString& path, mode_t mode) +} + +int osl::lstat(const OUString& pustrPath, struct stat& buf) +{ + return lstat_(pustrPath, buf); +} + +int osl::lstat(const OString& pstrPath, struct stat& buf) { - OString fn = OUStringToOString(path); + return lstat_(pstrPath, buf); +} - accessFilePathState *state = prepare_to_access_file_path(fn.getStr()); +int osl::mkdir(const OString& path, mode_t mode) +{ + accessFilePathState *state = prepare_to_access_file_path(path.getStr()); - int result = ::mkdir(OUStringToOString(path).getStr(), mode); + int result = ::mkdir(path.getStr(), mode); int saved_errno = errno; if (result == -1) - SAL_INFO("sal.file", "mkdir(" << OUStringToOString(path).getStr() << ",0" << std::oct << mode << std::dec << "): " << UnixErrnoString(saved_errno)); + SAL_INFO("sal.file", "mkdir(" << path << ",0" << std::oct << mode << std::dec << "): " << UnixErrnoString(saved_errno)); else - SAL_INFO("sal.file", "mkdir(" << OUStringToOString(path).getStr() << ",0" << std::oct << mode << std::dec << "): OK"); + SAL_INFO("sal.file", "mkdir(" << path << ",0" << std::oct << mode << std::dec << "): OK"); - done_accessing_file_path(fn.getStr(), state); + done_accessing_file_path(path.getStr(), state); errno = saved_errno; |