Author: fanningpj
Date: Sat Nov 30 10:47:53 2024
New Revision: 1922232

URL: http://svn.apache.org/viewvc?rev=1922232&view=rev
Log:
[github-735] POIFS: optimise occupied size calc. Thanks to Emmanuel Bourg. This 
closes #735

Modified:
    
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/POIFSMiniStore.java
    poi/trunk/poi/src/main/java/org/apache/poi/poifs/storage/BATBlock.java

Modified: 
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/POIFSMiniStore.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/POIFSMiniStore.java?rev=1922232&r1=1922231&r2=1922232&view=diff
==============================================================================
--- 
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/POIFSMiniStore.java 
(original)
+++ 
poi/trunk/poi/src/main/java/org/apache/poi/poifs/filesystem/POIFSMiniStore.java 
Sat Nov 30 10:47:53 2024
@@ -266,10 +266,9 @@ public class POIFSMiniStore extends Bloc
         int entriesPerBlock = 
_filesystem.getBigBlockSizeDetails().getBATEntriesPerBlock();
         for (int sbatIndex = _sbat_blocks.size() - 1; sbatIndex >= 0; 
sbatIndex--) {
             BATBlock sbat = _sbat_blocks.get(sbatIndex);
-            for (int miniBlockIndex = entriesPerBlock - 1; miniBlockIndex >= 
0; miniBlockIndex--) {
-                if (sbat.getValueAt(miniBlockIndex) != 
POIFSConstants.UNUSED_BLOCK) {
-                    return (sbatIndex * entriesPerBlock) + miniBlockIndex + 1;
-                }
+            int occupiedSize = sbat.getOccupiedSize();
+            if (occupiedSize > 0) {
+                return (sbatIndex * entriesPerBlock) + occupiedSize;
             }
         }
 

Modified: poi/trunk/poi/src/main/java/org/apache/poi/poifs/storage/BATBlock.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/storage/BATBlock.java?rev=1922232&r1=1922231&r2=1922232&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/poifs/storage/BATBlock.java 
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/poifs/storage/BATBlock.java Sat 
Nov 30 10:47:53 2024
@@ -202,15 +202,12 @@ public final class BATBlock implements B
      * @since POI 5.0.0
      */
     public int getOccupiedSize() {
-        int usedSectors = _values.length;
         for (int k = _values.length - 1; k >= 0; k--) {
-            if(_values[k] == POIFSConstants.UNUSED_BLOCK) {
-                usedSectors--;
-            } else {
-                break;
+            if (_values[k] != POIFSConstants.UNUSED_BLOCK) {
+                return k + 1;
             }
         }
-        return usedSectors;
+        return 0;
     }
 
     public int getValueAt(int relativeOffset) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to