diff --git a/include/ntfs-3g/endians.h b/include/ntfs-3g/endians.h index 8b374968..4c5d7325 100644 --- a/include/ntfs-3g/endians.h +++ b/include/ntfs-3g/endians.h @@ -314,4 +314,6 @@ #define le32_cmpz(a) (!(a)) +#define le64_cmpz(a) (!(a)) + #endif /* defined _NTFS_ENDIANS_H */ diff --git a/ntfsprogs/ntfsclone.c b/ntfsprogs/ntfsclone.c index 90ded142..f6dd8c73 100644 --- a/ntfsprogs/ntfsclone.c +++ b/ntfsprogs/ntfsclone.c @@ -1985,7 +1985,7 @@ static int walk_clusters(ntfs_volume *volume, struct ntfs_walk_cluster *walk) if (wipe) nr_used_mft_records++; - if (ni->mrec->base_mft_record) + if (!le64_cmpz(ni->mrec->base_mft_record)) goto out; walk->image->ni = ni; diff --git a/ntfsprogs/ntfscmp.c b/ntfsprogs/ntfscmp.c index ab07c67a..b91b4b04 100644 --- a/ntfsprogs/ntfscmp.c +++ b/ntfsprogs/ntfscmp.c @@ -363,7 +363,7 @@ static int inode_open(ntfs_volume *vol, MFT_REF mref, ntfs_inode **ni) return NTFSCMP_INODE_OPEN_ERROR; } - if ((*ni)->mrec->base_mft_record) { + if (!le64_cmpz((*ni)->mrec->base_mft_record)) { if (inode_close(*ni) != 0) return NTFSCMP_INODE_CLOSE_ERROR; diff --git a/ntfsprogs/ntfsinfo.c b/ntfsprogs/ntfsinfo.c index 983bf4ae..bc58b0ab 100644 --- a/ntfsprogs/ntfsinfo.c +++ b/ntfsprogs/ntfsinfo.c @@ -2221,7 +2221,7 @@ static void ntfs_dump_inode_general_info(ntfs_inode *inode) (unsigned)le32_to_cpu(mrec->bytes_allocated), (unsigned)le32_to_cpu(mrec->bytes_allocated)); - if (mrec->base_mft_record) { + if (!le64_cmpz(mrec->base_mft_record)) { printf("Base MFT Record:\t %llu (0x%llx)\n", (unsigned long long) MREF_LE(mrec->base_mft_record), diff --git a/ntfsprogs/ntfsresize.c b/ntfsprogs/ntfsresize.c index 0bcc36c5..f6223181 100644 --- a/ntfsprogs/ntfsresize.c +++ b/ntfsprogs/ntfsresize.c @@ -1083,7 +1083,7 @@ static int build_allocation_bitmap(ntfs_volume *vol, ntfsck_t *fsck) return -1; } - if (ni->mrec->base_mft_record) + if (!le64_cmpz(ni->mrec->base_mft_record)) goto close_inode; fsck->ni = ni; @@ -1157,7 +1157,7 @@ static void set_resize_constraints(ntfs_resize_t *resize) (long long)inode); } - if (ni->mrec->base_mft_record) + if (!le64_cmpz(ni->mrec->base_mft_record)) goto close_inode; resize->ni = ni; @@ -1404,7 +1404,7 @@ static void replace_later(ntfs_resize_t *resize, runlist *rl, runlist *head_rl) delayed = (struct DELAYED*)ntfs_malloc(sizeof(struct DELAYED)); if (delayed && (attr_name || !name_len)) { lemref = resize->ctx->mrec->base_mft_record; - if (lemref) + if (!le64_cmpz(lemref)) mref = le64_to_cpu(lemref); else mref = resize->mref; diff --git a/ntfsprogs/ntfswipe.c b/ntfsprogs/ntfswipe.c index 658aaac0..59836941 100644 --- a/ntfsprogs/ntfswipe.c +++ b/ntfsprogs/ntfswipe.c @@ -885,7 +885,7 @@ static s64 wipe_tails(ntfs_volume *vol, int byte, enum action act) continue; } - if (ni->mrec->base_mft_record) { + if (!le64_cmpz(ni->mrec->base_mft_record)) { ntfs_log_verbose("Not base mft record. Skipping\n"); goto close_inode; } @@ -1247,7 +1247,7 @@ static s64 wipe_directory(ntfs_volume *vol, int byte, enum action act) continue; } - if (ni->mrec->base_mft_record) { + if (!le64_cmpz(ni->mrec->base_mft_record)) { if (opts.verbose > 2) ntfs_log_verbose("Not base mft record. Skipping\n"); else diff --git a/ntfsprogs/utils.c b/ntfsprogs/utils.c index 7ac31163..0d766b57 100644 --- a/ntfsprogs/utils.c +++ b/ntfsprogs/utils.c @@ -867,7 +867,7 @@ int utils_is_metadata(ntfs_inode *inode) return 1; file = inode->mrec; - if (file && (file->base_mft_record != 0)) { + if (file && !le64_cmpz(file->base_mft_record)) { num = MREF_LE(file->base_mft_record); if (__metadata(vol, num) == 1) return 1;