From 044f2104f9cc6d64f0e8fec478cb71f916030bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Pierre=20Andr=C3=A9?= Date: Wed, 6 Apr 2016 10:40:28 +0200 Subject: [PATCH] Redefined file_offset on 64 bits in ntfsrecover.h The log file offsets are apparently stored on 64 bits, though the file size is unlikely to reach 2MB. --- ntfsprogs/ntfsrecover.c | 6 +++--- ntfsprogs/ntfsrecover.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ntfsprogs/ntfsrecover.c b/ntfsprogs/ntfsrecover.c index d4d6e185..d1262aa9 100644 --- a/ntfsprogs/ntfsrecover.c +++ b/ntfsprogs/ntfsrecover.c @@ -1101,7 +1101,7 @@ static const struct BUFFER *findprevious(CONTEXT *ctx, const struct BUFFER *buf) prevblk = (logfilesz >> blockbits) - 1; else { rph = &buf->block.record; - prevblk = (le32_to_cpu(rph->copy.file_offset) + prevblk = (sle64_to_cpu(rph->copy.file_offset) >> blockbits) - 1; /* * If an initial block leads to block 4, it @@ -2371,8 +2371,8 @@ static void showheadrcrd(u32 blk, const RECORD_PAGE_HEADER *rph) printf("usa_count %04x\n", (int)le16_to_cpu(rph->usa_count)); if (blk < 4) - printf("file_offset %08lx\n", - (long)le32_to_cpu(rph->copy.file_offset)); + printf("file_offset %016llx\n", + (long long)sle64_to_cpu(rph->copy.file_offset)); else { diff = sle64_to_cpu(rph->copy.last_lsn) - synced_lsn; printf("last_lsn %016llx" diff --git a/ntfsprogs/ntfsrecover.h b/ntfsprogs/ntfsrecover.h index 732e57ac..7ac84f43 100644 --- a/ntfsprogs/ntfsrecover.h +++ b/ntfsprogs/ntfsrecover.h @@ -202,7 +202,7 @@ typedef struct { /* size 40 */ le16 usa_count; union { leLSN last_lsn; - le32 file_offset; + sle64 file_offset; } __attribute__((__packed__)) copy; le32 flags; le16 page_count;