diff options
Diffstat (limited to 'RAR.cpp')
-rw-r--r-- | RAR.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
@@ -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) |