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 ---