]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
displayed decompressed size
authorPaul Cruz <paulcruz74@fb.com>
Mon, 12 Jun 2017 22:51:59 +0000 (15:51 -0700)
committerPaul Cruz <paulcruz74@fb.com>
Mon, 12 Jun 2017 22:51:59 +0000 (15:51 -0700)
programs/fileio.c

index d5da784796363e171d7fda5f22f95be6f9eed80f..d2958954472c3c5519ced3c215a3caf4c717a2ec 100644 (file)
@@ -866,6 +866,7 @@ typedef struct {
     int numActualFrames;
     int numSkippableFrames;
     U64 decompressedSize;
+    int canComputeDecompSize;
     U64 compressedSize;
     int usesCheck;
 } fileInfo_t;
@@ -885,6 +886,7 @@ int getFileInfo(fileInfo_t* info, const char* inFileName){
     info->decompressedSize = 0;
     info->numActualFrames = 0;
     info-> numSkippableFrames = 0;
+    info->canComputeDecompSize = 1;
     /* begin analyzing frame */
     while(1){
         BYTE magicNumberBuffer[4];
@@ -918,7 +920,13 @@ int getFileInfo(fileInfo_t* info, const char* inFileName){
             fread(frameHeader, totalFrameHeaderBytes, 1, srcFile);
 
             /* get decompressed file size */
-            info->decompressedSize += ZSTD_getFrameContentSize(frameHeader, totalFrameHeaderBytes);
+            U64 additional = ZSTD_getFrameContentSize(frameHeader, totalFrameHeaderBytes);
+            if(additional!=ZSTD_CONTENTSIZE_UNKNOWN && additional!=ZSTD_CONTENTSIZE_ERROR){
+                info->decompressedSize += additional;
+            }
+            else{
+                info->canComputeDecompSize = 0;
+            }
 
             /* check if checksum is used */
             if(contentChecksumFlag){
@@ -966,9 +974,14 @@ int FIO_listFile(const char* inFileName, int displayLevel){
             DISPLAY("An error occurred with getting file info\n");
             exit(1);
         }
+
+        double compressedSizeMB = (double)info->compressedSize/(1 MB);
+        double decompressedSizeMB = (double)info->decompressedSize/(1 MB);
+        DISPLAY("%d %d\n", info->canComputeDecompSize, info->usesCheck);
+
         if(displayLevel<=2){
             DISPLAY("Skippable  Non-Skippable  Compressed  Uncompressed  Ratio  Check  Filename\n");
-            DISPLAY("                          %7.2f MB\n", (double)info->compressedSize/(1 MB));
+            DISPLAY("                          %7.2f MB    %7.2f MB\n", compressedSizeMB, decompressedSizeMB);
         }
         else{
             DISPLAY("Compressed Size: %.2f MB (%llu B)\n", (double)info->compressedSize/(1 MB), info->compressedSize);