From 43b4d8a4e14fdaf09a9dc5f20667b45aac583b37 Mon Sep 17 00:00:00 2001 From: szaka Date: Mon, 6 Feb 2006 20:51:17 +0000 Subject: [PATCH] --metadata sets timestamps to the Epoch time as mkntfs does with -T. This increases the compressed image sizes by only 0.3-0.8% but ntfsclone creates now the exact same metadata images as mkntfs, which fact can be used for QA. --- ntfsprogs/ntfsclone.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/ntfsprogs/ntfsclone.c b/ntfsprogs/ntfsclone.c index 58b796d2..cfd89dad 100644 --- a/ntfsprogs/ntfsclone.c +++ b/ntfsprogs/ntfsclone.c @@ -68,6 +68,7 @@ #include "inode.h" #include "dir.h" #include "runlist.h" +#include "ntfstime.h" #include "utils.h" #include "version.h" @@ -710,7 +711,7 @@ static void restore_image(void) } } -static void wipe_index_root_timestamps(ATTR_RECORD *attr) +static void wipe_index_root_timestamps(ATTR_RECORD *attr, s64 timestamp) { INDEX_ENTRY *entry; INDEX_ROOT *iroot; @@ -723,10 +724,10 @@ static void wipe_index_root_timestamps(ATTR_RECORD *attr) if (iroot->type == AT_FILE_NAME) { - entry->key.file_name.creation_time = 0; - entry->key.file_name.last_access_time = 0; - entry->key.file_name.last_data_change_time = 0; - entry->key.file_name.last_mft_change_time = 0; + entry->key.file_name.creation_time = timestamp; + entry->key.file_name.last_access_time = timestamp; + entry->key.file_name.last_data_change_time = timestamp; + entry->key.file_name.last_mft_change_time = timestamp; } else if (ntfs_names_are_equal(NTFS_INDEX_Q, sizeof(NTFS_INDEX_Q) / 2 - 1, @@ -743,22 +744,22 @@ static void wipe_index_root_timestamps(ATTR_RECORD *attr) * till we only check for quota version 2 ... */ if (le32_to_cpu(quota_q->version) == 2) - quota_q->change_time = 0; + quota_q->change_time = timestamp; } entry = (INDEX_ENTRY*)((u8*)entry + le16_to_cpu(entry->length)); } } -#define WIPE_TIMESTAMPS(atype, attr) \ +#define WIPE_TIMESTAMPS(atype, attr, timestamp) \ do { \ atype *ats; \ ats = (atype *)((char *)(attr) + (attr)->value_offset); \ \ - ats->creation_time = 0; \ - ats->last_data_change_time = 0; \ - ats->last_mft_change_time= 0; \ - ats->last_access_time = 0; \ + ats->creation_time = (timestamp); \ + ats->last_data_change_time = (timestamp); \ + ats->last_mft_change_time= (timestamp); \ + ats->last_access_time = (timestamp); \ \ wiped_timestamp_data += 32; \ \ @@ -767,15 +768,16 @@ do { \ static void wipe_timestamps(ntfs_walk_clusters_ctx *image) { ATTR_RECORD *a = image->ctx->attr; + s64 timestamp = utc2ntfs(0); if (a->type == AT_FILE_NAME) - WIPE_TIMESTAMPS(FILE_NAME_ATTR, a); + WIPE_TIMESTAMPS(FILE_NAME_ATTR, a, timestamp); else if (a->type == AT_STANDARD_INFORMATION) - WIPE_TIMESTAMPS(STANDARD_INFORMATION, a); + WIPE_TIMESTAMPS(STANDARD_INFORMATION, a, timestamp); else if (a->type == AT_INDEX_ROOT) - wipe_index_root_timestamps(a); + wipe_index_root_timestamps(a, timestamp); } static void wipe_resident_data(ntfs_walk_clusters_ctx *image)