OSDN Git Service

Merge pull request #11 from yoheie/fix_path_compare
[lha/lha.git] / src / extract.c
index bcbc878..32cbb4f 100644 (file)
@@ -12,13 +12,14 @@ int
 decode_lzhuf(infp, outfp, original_size, packed_size, name, method, read_sizep)
     FILE           *infp;
     FILE           *outfp;
-    size_t          original_size;
-    size_t          packed_size;
+    off_t           original_size;
+    off_t           packed_size;
     char           *name;
     int             method;
-    size_t         *read_sizep;
+    off_t          *read_sizep;
 {
     unsigned int crc;
+    struct interfacing interface;
 
     interface.method = method;
     interface.infile = infp;
@@ -61,17 +62,27 @@ decode_lzhuf(infp, outfp, original_size, packed_size, name, method, read_sizep)
     case LARC4_METHOD_NUM:      /* -lz4- */
         interface.dicbit = LARC4_DICBIT;
         break;
+    case PMARC0_METHOD_NUM:     /* -pm0- */
+        interface.dicbit = PMARC0_DICBIT;
+        break;
+    case PMARC2_METHOD_NUM:     /* -pm2- */
+        interface.dicbit = PMARC2_DICBIT;
+        break;
     default:
         warning("unknown method %d", method);
         interface.dicbit = LZHUFF5_DICBIT; /* for backward compatibility */
         break;
     }
 
-    if (interface.dicbit == 0) { /* LZHUFF0_DICBIT or LARC4_DICBIT */
+    if (interface.dicbit == 0) { /* LZHUFF0_DICBIT or LARC4_DICBIT or PMARC0_DICBIT*/
         start_indicator(name,
                         original_size,
                         verify_mode ? "Testing " : "Melting ",
                         2048);
+
+        if (dump_lzss)
+            printf("no use slide\n");
+
         *read_sizep = copyfile(infp, (verify_mode ? NULL : outfp),
                                original_size, 2, &crc);
     }
@@ -80,6 +91,9 @@ decode_lzhuf(infp, outfp, original_size, packed_size, name, method, read_sizep)
                         original_size,
                         verify_mode ? "Testing " : "Melting ",
                         1 << interface.dicbit);
+        if (dump_lzss)
+            printf("\n");
+
         crc = decode(&interface);
         *read_sizep = interface.read_size;
     }