diff options
author | Michael Meeks <michael.meeks@suse.com> | 2012-01-19 11:05:51 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2012-01-19 11:07:20 +0000 |
commit | 0c17acbb321ced2afe2f0ff6769291549838ebaa (patch) | |
tree | 3abb6f3ba42f3b25d4a2a91179d6978f03fc2f7f /tools | |
parent | 877663b9c262be9b5d8620f756a4cfdf97195279 (diff) |
fix SvStream to not disagree with sal on sizeof struct stat
A temporary tweak to restore build-ability; the oslDirectory
change needs a little more thought & public exposure, but rsc
no longer crashes during compile ...
Diffstat (limited to 'tools')
-rw-r--r-- | tools/source/stream/strmunx.cxx | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/tools/source/stream/strmunx.cxx b/tools/source/stream/strmunx.cxx index c9d4f071c617..8b47282d07b2 100644 --- a/tools/source/stream/strmunx.cxx +++ b/tools/source/stream/strmunx.cxx @@ -64,10 +64,10 @@ namespace { struct LockMutex : public rtl::Static< osl::Mutex, LockMutex > {}; } class InternalStreamLock { - sal_Size m_nStartPos; - sal_Size m_nEndPos; - SvFileStream* m_pStream; - struct stat m_aStat; + sal_Size m_nStartPos; + sal_Size m_nEndPos; + SvFileStream* m_pStream; + osl::DirectoryItem m_aItem; InternalStreamLock( sal_Size, sal_Size, SvFileStream* ); ~InternalStreamLock(); @@ -87,11 +87,11 @@ InternalStreamLock::InternalStreamLock( m_nEndPos( nEnd ), m_pStream( pStream ) { - rtl::OString aFileName(rtl::OUStringToOString(m_pStream->GetFileName(), - osl_getThreadTextEncoding())); - osl_statFilePath( aFileName.getStr(), &m_aStat ); + osl::DirectoryItem::get( m_pStream->GetFileName(), m_aItem ); LockList::get().push_back( this ); #if OSL_DEBUG_LEVEL > 1 + rtl::OString aFileName(rtl::OUStringToOString(m_pStream->GetFileName(), + osl_getThreadTextEncoding())); fprintf( stderr, "locked %s", aFileName.getStr() ); if( m_nStartPos || m_nEndPos ) fprintf(stderr, " [ %ld ... %ld ]", m_nStartPos, m_nEndPos ); @@ -112,7 +112,7 @@ InternalStreamLock::~InternalStreamLock() } #if OSL_DEBUG_LEVEL > 1 rtl::OString aFileName(rtl::OUStringToOString(m_pStream->GetFileName(), - osl_getThreadTextEncoding())); + osl_getThreadTextEncoding())); fprintf( stderr, "unlocked %s", aFileName.getStr() ); if( m_nStartPos || m_nEndPos ) fprintf(stderr, " [ %ld ... %ld ]", m_nStartPos, m_nEndPos ); @@ -125,13 +125,20 @@ sal_Bool InternalStreamLock::LockFile( sal_Size nStart, sal_Size nEnd, SvFileStr #ifndef BOOTSTRAP osl::MutexGuard aGuard( LockMutex::get() ); #endif - rtl::OString aFileName(rtl::OUStringToOString(pStream->GetFileName(), - osl_getThreadTextEncoding())); - struct stat aStat; - if( osl_statFilePath( aFileName.getStr(), &aStat ) != osl_File_E_None ) - return sal_False; + osl::DirectoryItem aItem; + if (osl::DirectoryItem::get( pStream->GetFileName(), aItem) != osl::FileBase::RC::E_None ) + { + SAL_INFO("tools", "Failed to lookup stream for locking"); + return sal_True; + } - if( S_ISDIR( aStat.st_mode ) ) + osl::FileStatus aStatus( osl_FileStatus_Mask_Type ); + if ( aItem.getFileStatus( aStatus ) != osl::FileBase::RC::E_None ) + { + SAL_INFO("tools", "Failed to stat stream for locking"); + return sal_True; + } + if( aStatus.getFileType() == osl::FileStatus::Type::Directory ) return sal_True; InternalStreamLock* pLock = NULL; @@ -139,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( aStat.st_ino == pLock->m_aStat.st_ino ) + if( osl_identicalDirectoryItem( aItem._pData, pLock->m_aItem._pData) ) { sal_Bool bDenyByOptions = sal_False; StreamMode nLockMode = pLock->m_pStream->GetStreamMode(); |