sal/inc/osl/file.h | 24 ++++++++++++++++++++++++ sal/inc/osl/file.hxx | 26 +++++++++++++++++++++++++- sal/util/sal.map | 2 +- tools/source/stream/strmunx.cxx | 2 +- 4 files changed, 51 insertions(+), 3 deletions(-)
New commits: commit 13a752cdbb9e2c1e2c0f922158f03fc70c12245c Author: Michael Meeks <michael.me...@suse.com> Date: Thu Jan 19 14:01:33 2012 +0000 sal: expose a public API for comparing directory items Windows impl. still pending. diff --git a/sal/inc/osl/file.h b/sal/inc/osl/file.h index 0e0d765..3bcd877 100644 --- a/sal/inc/osl/file.h +++ b/sal/inc/osl/file.h @@ -316,6 +316,30 @@ SAL_DLLPUBLIC oslFileError SAL_CALL osl_acquireDirectoryItem( SAL_DLLPUBLIC oslFileError SAL_CALL osl_releaseDirectoryItem( oslDirectoryItem Item ); +/** Determine if two directory items point the the same underlying file + + The comparison is done first by URL, and then by resolving links to + find the target, and finally by comparing inodes on unix. + + @param pItemA [in] + A directory handle to compare with another handle + + @param pItemB [in] + A directory handle to compare with pItemA + + @return + sal_True: if the items point to an identical resource<br> + sal_False: if the items point to a different resource, or a fatal error occured<br> + + @see osl_getDirectoryItem() + + @since LibreOffice 3.6 +*/ + +SAL_DLLPUBLIC sal_Bool SAL_CALL osl_identicalDirectoryItem( + oslDirectoryItem pItemA, + oslDirectoryItem pItemB ); + /* File types */ typedef enum { diff --git a/sal/inc/osl/file.hxx b/sal/inc/osl/file.hxx index d9a1d89..85393f5 100644 --- a/sal/inc/osl/file.hxx +++ b/sal/inc/osl/file.hxx @@ -1389,9 +1389,9 @@ public: class DirectoryItem: public FileBase { + oslDirectoryItem _pData; public: - oslDirectoryItem _pData; /** Constructor. */ @@ -1529,6 +1529,30 @@ public: return (RC) osl_getFileStatus( _pData, &rStatus._aStatus, rStatus._nMask ); } +/** Determine if two directory items point the the same underlying file + + The comparison is done first by URL, and then by resolving links to + find the target, and finally by comparing inodes on unix. + + @param pItemA [in] + A directory handle to compare with another handle + + @param pItemB [in] + A directory handle to compare with pItemA + + @return + sal_True: if the items point to an identical resource<br> + sal_False: if the items point to a different resource, or a fatal error occured<br> + + @see osl_getDirectoryItem() + + @since LibreOffice 3.6 +*/ + inline sal_Bool isIdenticalTo( const DirectoryItem &pOther ) + { + return osl_identicalDirectoryItem( _pData, pOther._pData ); + } + friend class Directory; }; diff --git a/sal/util/sal.map b/sal/util/sal.map index 02610f5..1e9753b 100644 --- a/sal/util/sal.map +++ b/sal/util/sal.map @@ -613,6 +613,7 @@ LIBO_UDK_3.5 { # symbols available in >= LibO 3.5 LIBO_UDK_3.6 { # symbols available in >= LibO 3.6 global: osl_unmapMappedFile; + osl_identicalDirectoryItem; } UDK_3.10; PRIVATE_1.0 { @@ -647,7 +648,6 @@ PRIVATE_textenc.1 { # LibreOffice 3.6 PRIVATE_file.1 { # LibreOffice 3.6 global: - osl_identicalDirectoryItem; osl_getFileOSHandle; }; diff --git a/tools/source/stream/strmunx.cxx b/tools/source/stream/strmunx.cxx index 850eedc..031aaa5 100644 --- a/tools/source/stream/strmunx.cxx +++ b/tools/source/stream/strmunx.cxx @@ -146,7 +146,7 @@ sal_Bool InternalStreamLock::LockFile( sal_Size nStart, sal_Size nEnd, SvFileStr for( size_t i = 0; i < rLockList.size(); ++i ) { pLock = rLockList[ i ]; - if( osl_identicalDirectoryItem( aItem._pData, pLock->m_aItem._pData) ) + if( aItem.isIdenticalTo( pLock->m_aItem ) ) { sal_Bool bDenyByOptions = sal_False; StreamMode nLockMode = pLock->m_pStream->GetStreamMode(); _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits