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; }