You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2015/07/06 23:39:42 UTC

svn commit: r1689505 - in /poi/trunk/src: java/org/apache/poi/poifs/dev/ java/org/apache/poi/poifs/filesystem/ testcases/org/apache/poi/poifs/filesystem/

Author: nick
Date: Mon Jul  6 21:39:42 2015
New Revision: 1689505

URL: http://svn.apache.org/r1689505
Log:
When writing the mini-stream, set the size of it on the root property #58061

Modified:
    poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSHeaderDumper.java
    poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
    poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSMiniStore.java
    poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java

Modified: poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSHeaderDumper.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSHeaderDumper.java?rev=1689505&r1=1689504&r2=1689505&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSHeaderDumper.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/dev/POIFSHeaderDumper.java Mon Jul  6 21:39:42 2015
@@ -160,6 +160,7 @@ public class POIFSHeaderDumper {
 
     public static void displayPropertiesSummary(PropertyTable properties) {
         System.out.println("Mini Stream starts at " + properties.getRoot().getStartBlock());
+        System.out.println("Mini Stream length is " + properties.getRoot().getSize());
         System.out.println();
         
         System.out.println("Properties and their block start:");

Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java?rev=1689505&r1=1689504&r2=1689505&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java Mon Jul  6 21:39:42 2015
@@ -766,6 +766,10 @@ public class NPOIFSFileSystem extends Bl
      *  to their backing blocks 
      */
     private void syncWithDataSource() throws IOException {
+        // Mini Stream + SBATs first, as mini-stream details have
+        //  to be stored in the Root Property
+        _mini_store.syncWithDataSource();
+        
         // Properties
         NPOIFSStream propStream = new NPOIFSStream(this, _header.getPropertyStart());
         _property_table.preWrite();
@@ -786,9 +790,6 @@ public class NPOIFSFileSystem extends Bl
            ByteBuffer block = getBlockAt(bat.getOurBlockIndex());
            BlockAllocationTableWriter.writeBlock(bat, block);
         }
-       
-       // SBATs
-       _mini_store.syncWithDataSource();
     }
     
     /**

Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSMiniStore.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSMiniStore.java?rev=1689505&r1=1689504&r2=1689505&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSMiniStore.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/NPOIFSMiniStore.java Mon Jul  6 21:39:42 2015
@@ -242,12 +242,24 @@ public class NPOIFSMiniStore extends Blo
     }
     
     /**
-     * Writes the SBATs to their backing blocks
+     * Writes the SBATs to their backing blocks, and updates
+     *  the mini-stream size in the properties. Stream size is
+     *  based on full blocks used, not the data within the streams
      */
     protected void syncWithDataSource() throws IOException {
-       for(BATBlock sbat : _sbat_blocks) {
+       int blocksUsed = 0;
+       for (BATBlock sbat : _sbat_blocks) {
           ByteBuffer block = _filesystem.getBlockAt(sbat.getOurBlockIndex());
           BlockAllocationTableWriter.writeBlock(sbat, block);
+          
+          if (!sbat.hasFreeSectors()) {
+              blocksUsed += _filesystem.getBigBlockSizeDetails().getBATEntriesPerBlock();
+          } else {
+              blocksUsed += sbat.getUsedSectors(false);
+          }
        }
+       // Set the size on the root in terms of the number of SBAT blocks
+       // RootProperty.setSize does the sbat -> bytes conversion for us
+       _filesystem._get_property_table().getRoot().setSize(blocksUsed);
     }
 }

Modified: poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java?rev=1689505&r1=1689504&r2=1689505&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java Mon Jul  6 21:39:42 2015
@@ -1428,6 +1428,10 @@ public final class TestNPOIFSFileSystem
        emptyDoc = (DocumentEntry)testDir.getEntry("empty-3");
        assertContentsMatches(empty, emptyDoc);
        
+       // Check that a mini-stream was assigned, with one block used
+       assertEquals(3, testDir.getProperty().getStartBlock()); 
+       assertEquals(64, testDir.getProperty().getSize()); 
+       
        // All done
        fs.close();
    }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org