From 3bcc6276a0c229791ca4a4fee4cf6d8d48ebe824 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Thu, 14 Aug 2008 14:30:05 -0400 Subject: [PATCH] libext2fs: Initialize unset inode timestamps when writing a new inode As Li Zefan reported, the creation timestamp was not getting set on the lost+found inode. This patch makes sure all of the timestamps are appropriately set. Signed-off-by: "Theodore Ts'o" --- lib/ext2fs/inode.c | 10 ++++++++++ lib/ext2fs/mkdir.c | 1 - 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c index ba15dda..b45de87 100644 --- a/lib/ext2fs/inode.c +++ b/lib/ext2fs/inode.c @@ -752,6 +752,14 @@ errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino, int size = EXT2_INODE_SIZE(fs->super); struct ext2_inode_large *large_inode; errcode_t retval; + __u32 t = fs->now ? fs->now : time(NULL); + + if (!inode->i_ctime) + inode->i_ctime = t; + if (!inode->i_mtime) + inode->i_mtime = t; + if (!inode->i_atime) + inode->i_atime = t; if (size == sizeof(struct ext2_inode)) return ext2fs_write_inode_full(fs, ino, inode, @@ -767,6 +775,8 @@ errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino, large_inode = (struct ext2_inode_large *) buf; large_inode->i_extra_isize = sizeof(struct ext2_inode_large) - EXT2_GOOD_OLD_INODE_SIZE; + if (!large_inode->i_crtime) + large_inode->i_crtime = t; retval = ext2fs_write_inode_full(fs, ino, buf, size); free(buf); diff --git a/lib/ext2fs/mkdir.c b/lib/ext2fs/mkdir.c index 34242df..e769ed5 100644 --- a/lib/ext2fs/mkdir.c +++ b/lib/ext2fs/mkdir.c @@ -85,7 +85,6 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum, ext2fs_iblk_set(fs, &inode, 1); inode.i_block[0] = blk; inode.i_links_count = 2; - inode.i_ctime = inode.i_atime = inode.i_mtime = fs->now ? fs->now : time(NULL); inode.i_size = fs->blocksize; /* -- 1.8.3.1