From a91af78c1f98ef519f54c6539defe8945fd5b428 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Thu, 16 May 2013 21:35:49 +0200 Subject: [PATCH] Preserve modification dates when extracting initrd. --- sortix/initrd.cpp | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/sortix/initrd.cpp b/sortix/initrd.cpp index c00a0039..7d1cd785 100644 --- a/sortix/initrd.cpp +++ b/sortix/initrd.cpp @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2011, 2012. + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013. This file is part of Sortix. @@ -22,6 +22,20 @@ *******************************************************************************/ +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + #include #include #include @@ -33,16 +47,6 @@ #include #include -#include -#include -#include -#include - -#include -#include -#include -#include - #include "initrd.h" namespace Sortix { @@ -323,13 +327,16 @@ static bool ExtractNode(ioctx_t* ctx, uint32_t ino, Ref node) return false; if ( node->chown(ctx, inode->uid, inode->gid) < 0 ) return false; - // TODO: utimens. if ( INITRD_S_ISDIR(inode->mode) ) if ( !ExtractDir(ctx, ino, node) ) return false; if ( INITRD_S_ISREG(inode->mode) ) if ( !ExtractFile(ctx, ino, node) ) return false; + struct timespec ctime = timespec_make((time_t) inode->ctime, 0); + struct timespec mtime = timespec_make((time_t) inode->mtime, 0); + if ( node->utimens(ctx, &mtime, &ctime, &mtime) < 0 ) + return false; return true; }