stgelem.cxx (297a844a) | stgelem.cxx (40300343) |
---|---|
1/************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance --- 100 unchanged lines hidden (view full) --- 109 nReserved = 0; 110 nThreshold = 4096; 111 nDataFAT = 0; 112 nDataFATSize = 0; 113 nMasterChain = STG_EOF; 114 115 SetTOCStart( STG_EOF ); 116 SetDataFATStart( STG_EOF ); | 1/************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance --- 100 unchanged lines hidden (view full) --- 109 nReserved = 0; 110 nThreshold = 4096; 111 nDataFAT = 0; 112 nDataFATSize = 0; 113 nMasterChain = STG_EOF; 114 115 SetTOCStart( STG_EOF ); 116 SetDataFATStart( STG_EOF ); |
117 for( short i = 0; i < 109; i++ ) | 117 for( short i = 0; i < cFATPagesInHeader; i++ ) |
118 SetFATPage( i, STG_FREE ); 119} 120 121sal_Bool StgHeader::Load( StgIo& rIo ) 122{ 123 sal_Bool bResult = sal_False; 124 if ( rIo.GetStrm() ) 125 { --- 18 unchanged lines hidden (view full) --- 144 r >> nFATSize // 2C total number of FAT pages 145 >> nTOCstrm // 30 starting page for the TOC stream 146 >> nReserved // 34 147 >> nThreshold // 38 minimum file size for big data 148 >> nDataFAT // 3C page # of 1st data FAT block 149 >> nDataFATSize // 40 # of data FATpages 150 >> nMasterChain // 44 chain to the next master block 151 >> nMaster; // 48 # of additional master blocks | 118 SetFATPage( i, STG_FREE ); 119} 120 121sal_Bool StgHeader::Load( StgIo& rIo ) 122{ 123 sal_Bool bResult = sal_False; 124 if ( rIo.GetStrm() ) 125 { --- 18 unchanged lines hidden (view full) --- 144 r >> nFATSize // 2C total number of FAT pages 145 >> nTOCstrm // 30 starting page for the TOC stream 146 >> nReserved // 34 147 >> nThreshold // 38 minimum file size for big data 148 >> nDataFAT // 3C page # of 1st data FAT block 149 >> nDataFATSize // 40 # of data FATpages 150 >> nMasterChain // 44 chain to the next master block 151 >> nMaster; // 48 # of additional master blocks |
152 for( short i = 0; i < 109; i++ ) | 152 for( short i = 0; i < cFATPagesInHeader; i++ ) |
153 r >> nMasterFAT[ i ]; 154 155 return ( r.GetErrorCode() == ERRCODE_NONE && Check() ); 156} 157 158sal_Bool StgHeader::Store( StgIo& rIo ) 159{ 160 if( !bDirty ) --- 9 unchanged lines hidden (view full) --- 170 << nFATSize // 2C total number of FAT pages 171 << nTOCstrm // 30 starting page for the TOC stream 172 << nReserved // 34 173 << nThreshold // 38 minimum file size for big data 174 << nDataFAT // 3C page # of 1st data FAT block 175 << nDataFATSize // 40 # of data FAT pages 176 << nMasterChain // 44 chain to the next master block 177 << nMaster; // 48 # of additional master blocks | 153 r >> nMasterFAT[ i ]; 154 155 return ( r.GetErrorCode() == ERRCODE_NONE && Check() ); 156} 157 158sal_Bool StgHeader::Store( StgIo& rIo ) 159{ 160 if( !bDirty ) --- 9 unchanged lines hidden (view full) --- 170 << nFATSize // 2C total number of FAT pages 171 << nTOCstrm // 30 starting page for the TOC stream 172 << nReserved // 34 173 << nThreshold // 38 minimum file size for big data 174 << nDataFAT // 3C page # of 1st data FAT block 175 << nDataFATSize // 40 # of data FAT pages 176 << nMasterChain // 44 chain to the next master block 177 << nMaster; // 48 # of additional master blocks |
178 for( short i = 0; i < 109; i++ ) | 178 for( short i = 0; i < cFATPagesInHeader; i++ ) |
179 r << nMasterFAT[ i ]; 180 bDirty = !rIo.Good(); 181 return sal_Bool( !bDirty ); 182} 183 184static bool lcl_wontoverflow(short shift) 185{ 186 return shift >= 0 && shift < (short)sizeof(short) * 8 - 1; --- 5 unchanged lines hidden (view full) --- 192 return sal_Bool( memcmp( cSignature, cStgSignature, 8 ) == 0 193 && (short) ( nVersion >> 16 ) == 3 ) 194 && nPageSize == 9 195 && lcl_wontoverflow(nPageSize) 196 && lcl_wontoverflow(nDataPageSize) 197 && nFATSize > 0 198 && nTOCstrm >= 0 199 && nThreshold > 0 | 179 r << nMasterFAT[ i ]; 180 bDirty = !rIo.Good(); 181 return sal_Bool( !bDirty ); 182} 183 184static bool lcl_wontoverflow(short shift) 185{ 186 return shift >= 0 && shift < (short)sizeof(short) * 8 - 1; --- 5 unchanged lines hidden (view full) --- 192 return sal_Bool( memcmp( cSignature, cStgSignature, 8 ) == 0 193 && (short) ( nVersion >> 16 ) == 3 ) 194 && nPageSize == 9 195 && lcl_wontoverflow(nPageSize) 196 && lcl_wontoverflow(nDataPageSize) 197 && nFATSize > 0 198 && nTOCstrm >= 0 199 && nThreshold > 0 |
200 && ( nDataFAT == -2 || ( nDataFAT >= 0 && nDataFATSize > 0 ) ) 201 && ( nMasterChain == -2 || ( nMasterChain >=0 && nMaster > 109 ) ) | 200 && ( nDataFAT == STG_EOF || ( nDataFAT >= 0 && nDataFATSize > 0 ) ) 201 && ( nMasterChain == STG_EOF || ( nMasterChain >=0 && nMaster > 0 ) ) |
202 && nMaster >= 0; 203} 204 205sal_Int32 StgHeader::GetFATPage( short n ) const 206{ | 202 && nMaster >= 0; 203} 204 205sal_Int32 StgHeader::GetFATPage( short n ) const 206{ |
207 if( n >= 0 && n < 109 ) | 207 if( n >= 0 && n < cFATPagesInHeader ) |
208 return nMasterFAT[ n ]; 209 else 210 return STG_EOF; 211} 212 213void StgHeader::SetFATPage( short n, sal_Int32 nb ) 214{ | 208 return nMasterFAT[ n ]; 209 else 210 return STG_EOF; 211} 212 213void StgHeader::SetFATPage( short n, sal_Int32 nb ) 214{ |
215 if( n >= 0 && n < 109 ) | 215 if( n >= 0 && n < cFATPagesInHeader ) |
216 { 217 if( nMasterFAT[ n ] != nb ) 218 bDirty = sal_True, nMasterFAT[ n ] = nb; 219 } 220} 221 222void StgHeader::SetClassId( const ClsId& r ) 223{ --- 207 unchanged lines hidden (view full) --- 431 >> nAtime[ 1 ] // 6C creation and access time 432 >> nPage1 // 74 starting block (either direct or translated) 433 >> nSize // 78 file size 434 >> nUnknown; // 7C unknown 435 436 sal_uInt16 n = nNameLen; 437 if( n ) 438 n = ( n >> 1 ) - 1; | 216 { 217 if( nMasterFAT[ n ] != nb ) 218 bDirty = sal_True, nMasterFAT[ n ] = nb; 219 } 220} 221 222void StgHeader::SetClassId( const ClsId& r ) 223{ --- 207 unchanged lines hidden (view full) --- 431 >> nAtime[ 1 ] // 6C creation and access time 432 >> nPage1 // 74 starting block (either direct or translated) 433 >> nSize // 78 file size 434 >> nUnknown; // 7C unknown 435 436 sal_uInt16 n = nNameLen; 437 if( n ) 438 n = ( n >> 1 ) - 1; |
439 if( n > 31 || (nSize < 0 && cType != STG_STORAGE) || ( nPage1 < 0 && nPage1 != -2 ) ) | 439 if ( n > 31 || 440 (nSize < 0 && cType != STG_STORAGE) || 441 ( nPage1 < 0 && nPage1 != STG_EOF ) ) |
440 { 441 // the size makes no sence for the substorage 442 // TODO/LATER: actually the size should be an unsigned value, but in this case it would mean a stream of more than 2Gb 443 return sal_False; 444 } 445 446 aName = String( nName, n ); 447 // I don't know the locale, so en_US is hopefully fine --- 28 unchanged lines hidden --- | 442 { 443 // the size makes no sence for the substorage 444 // TODO/LATER: actually the size should be an unsigned value, but in this case it would mean a stream of more than 2Gb 445 return sal_False; 446 } 447 448 aName = String( nName, n ); 449 // I don't know the locale, so en_US is hopefully fine --- 28 unchanged lines hidden --- |