diff options
author | OctaneSnail <os@v12pwr.com> | 2010-06-25 23:47:53 +0400 |
---|---|---|
committer | OctaneSnail <os@v12pwr.com> | 2010-06-25 23:47:53 +0400 |
commit | 0f64bff8ffd3edcd62d7c71c48cd0a91af143e1d (patch) | |
tree | 0b0f3ec29f8c411dabe7b60f49e2c07bb68a454d | |
parent | ec6e3c3c78c3ea32600dcde4a3ce48d1291315e5 (diff) |
Fix end of file detection when reading headers.
-rw-r--r-- | RAR.cpp | 17 |
1 files changed, 4 insertions, 13 deletions
@@ -20,24 +20,15 @@ #include "rar.h" #include "utils.h" -#define READ_ITEM(item) { \ - if (!ReadFile (file, &item, sizeof (item), &read, NULL) || read != sizeof (item)) \ - { \ - DWORD err = GetLastError (); \ - if (!read && !err) return ERROR_HANDLE_EOF; \ - ErrorMsg (err, L"Could not read RAR header"); \ - return S_FALSE; \ - } \ - acc += read; } +#define READ_ITEM(item) READ_ITEM2(&item, sizeof(item)) #define READ_ITEM2(item, size) { \ - if (!ReadFile (file, item, size, &read, NULL) || read != size) \ + if (!ReadFile (file, item, size, &read, NULL)) \ { \ - DWORD err = GetLastError (); \ - if (!read && !err) return ERROR_HANDLE_EOF; \ - ErrorMsg (err, L"Could not read RAR header"); \ + ErrorMsg (GetLastError (), L"Could not read RAR header"); \ return S_FALSE; \ } \ + if (read < size) return ERROR_HANDLE_EOF; \ acc += read; } DWORD ReadHeader (HANDLE file, rar_header_t *dest) |