Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/rarfilesource.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOctaneSnail <os@v12pwr.com>2012-01-22 00:49:58 +0400
committerOctaneSnail <os@v12pwr.com>2012-01-22 00:49:58 +0400
commit8946b80ea837e3a43dc6b6f74b6d2b6a12b8defb (patch)
treef0629a4bc9c1f3a33aef023291b9e1ffb745b859
parent5cd8056584d21c7e56a3a67a9660f94c3691fe78 (diff)
Don't rely to much on LONG_BLOCK, it's missing in some archives.
-rw-r--r--RAR.cpp25
-rw-r--r--RAR.h1
2 files changed, 15 insertions, 11 deletions
diff --git a/RAR.cpp b/RAR.cpp
index 61dcd7b..1c7d1bb 100644
--- a/RAR.cpp
+++ b/RAR.cpp
@@ -45,17 +45,6 @@ DWORD ReadHeader (HANDLE file, rar_header_t *dest)
dest->ch.flags = fh.flags;
dest->ch.type = fh.type;
- if (fh.flags & LONG_BLOCK)
- {
- READ_ITEM (dword);
- dest->ch.size.QuadPart = (LONGLONG) dword + fh.size;
- }
- else
- {
- dest->ch.size.HighPart = 0;
- dest->ch.size.LowPart = fh.size;
- }
-
switch (fh.type)
{
case HEADER_TYPE_ARCHIVE:
@@ -65,6 +54,7 @@ DWORD ReadHeader (HANDLE file, rar_header_t *dest)
case HEADER_TYPE_FILE:
READ_ITEM (ffh);
+ dest->ch.size.QuadPart = (LONGLONG) ffh.packedSize + fh.size;
dest->fh.size.LowPart = ffh.size;
dest->fh.os = ffh.os;
dest->fh.crc = ffh.crc;
@@ -120,6 +110,19 @@ DWORD ReadHeader (HANDLE file, rar_header_t *dest)
}
}
}
+ break;
+
+ default:
+ if (fh.flags & LONG_BLOCK)
+ {
+ READ_ITEM (dword);
+ dest->ch.size.QuadPart = (LONGLONG) dword + fh.size;
+ }
+ else
+ {
+ dest->ch.size.HighPart = 0;
+ dest->ch.size.LowPart = fh.size;
+ }
}
if (acc > dest->ch.size.QuadPart)
diff --git a/RAR.h b/RAR.h
index c4b5834..06545cd 100644
--- a/RAR.h
+++ b/RAR.h
@@ -41,6 +41,7 @@ typedef struct
typedef struct
{
+ DWORD packedSize;
DWORD size;
BYTE os;
DWORD crc;