Author: bodewig
Date: Mon Aug 15 11:14:58 2011
New Revision: 1157779

URL: http://svn.apache.org/viewvc?rev=1157779&view=rev
Log:
add dump to ArchiveStreamFactory

Modified:
    
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
    
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java

Modified: 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java?rev=1157779&r1=1157778&r2=1157779&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
 (original)
+++ 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
 Mon Aug 15 11:14:58 2011
@@ -27,6 +27,7 @@ import org.apache.commons.compress.archi
 import org.apache.commons.compress.archivers.ar.ArArchiveOutputStream;
 import org.apache.commons.compress.archivers.cpio.CpioArchiveInputStream;
 import org.apache.commons.compress.archivers.cpio.CpioArchiveOutputStream;
+import org.apache.commons.compress.archivers.dump.DumpArchiveInputStream;
 import org.apache.commons.compress.archivers.jar.JarArchiveInputStream;
 import org.apache.commons.compress.archivers.jar.JarArchiveOutputStream;
 import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
@@ -83,6 +84,11 @@ public class ArchiveStreamFactory {
      */
     public static final String CPIO = "cpio";
     /**
+     * Constant used to identify the Unix DUMP archive format.
+     * @since Commons Compress 1.3
+     */
+    public static final String DUMP = "dump";
+    /**
      * Constant used to identify the JAR archive format.
      * @since Commons Compress 1.1
      */
@@ -101,7 +107,7 @@ public class ArchiveStreamFactory {
     /**
      * Create an archive input stream from an archiver name and an input 
stream.
      * 
-     * @param archiverName the archive name, i.e. "ar", "zip", "tar", "jar" or 
"cpio"
+     * @param archiverName the archive name, i.e. "ar", "zip", "tar", "jar", 
"dump" or "cpio"
      * @param in the input stream
      * @return the archive input stream
      * @throws ArchiveException if the archiver name is not known
@@ -134,6 +140,9 @@ public class ArchiveStreamFactory {
         if (CPIO.equalsIgnoreCase(archiverName)) {
             return new CpioArchiveInputStream(in);
         }
+        if (DUMP.equalsIgnoreCase(archiverName)) {
+            return new DumpArchiveInputStream(in);
+        }
         
         throw new ArchiveException("Archiver: " + archiverName + " not 
found.");
     }
@@ -209,7 +218,17 @@ public class ArchiveStreamFactory {
             } else if (CpioArchiveInputStream.matches(signature, 
signatureLength)) {
                 return new CpioArchiveInputStream(in);
             }
-            // Tar needs a bigger buffer to check the signature; read the 
first block
+
+            // Dump needs a bigger buffer to check the signature;
+            final byte[] dumpsig = new byte[32];
+            in.mark(dumpsig.length);
+            signatureLength = in.read(dumpsig);
+            in.reset();
+            if (DumpArchiveInputStream.matches(dumpsig, signatureLength)) {
+                return new DumpArchiveInputStream(in);
+            }
+
+            // Tar needs an even bigger buffer to check the signature; read 
the first block
             final byte[] tarheader = new byte[512];
             in.mark(tarheader.length);
             signatureLength = in.read(tarheader);

Modified: 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java?rev=1157779&r1=1157778&r2=1157779&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java
 (original)
+++ 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java
 Mon Aug 15 11:14:58 2011
@@ -18,6 +18,7 @@
  */
 package org.apache.commons.compress.archivers.dump;
 
+import org.apache.commons.compress.archivers.ArchiveException;
 import org.apache.commons.compress.archivers.ArchiveInputStream;
 
 import java.io.IOException;
@@ -69,10 +70,11 @@ public class DumpArchiveInputStream exte
      * @param is
      * @throws Exception
      */
-    public DumpArchiveInputStream(InputStream is) throws IOException {
+    public DumpArchiveInputStream(InputStream is) throws ArchiveException {
         this.raw = new TapeInputStream(is);
         this.hasHitEOF = false;
 
+        try {
         // read header, verify it's a dump archive.
         byte[] headerBytes = raw.readRecord();
 
@@ -92,6 +94,9 @@ public class DumpArchiveInputStream exte
         // skip past CLRI and BITS segments since we don't handle them yet.
         readCLRI();
         readBITS();
+        } catch (IOException ex) {
+            throw new ArchiveException(ex.getMessage(), ex);
+        }
 
         // put in a dummy record for the root node.
         Dirent root = new Dirent(2, 2, 4, ".");


Reply via email to