1.1 --- a/include/e2access/image.h Mon Jul 08 21:24:48 2019 +0200
1.2 +++ b/include/e2access/image.h Sun Jul 14 22:04:59 2019 +0200
1.3 @@ -24,6 +24,8 @@
1.4
1.5 #include <ext2fs/ext2fs.h>
1.6
1.7 +
1.8 +
1.9 #ifdef __cplusplus
1.10 extern "C" {
1.11 #endif
1.12 @@ -59,6 +61,8 @@
1.13 void image_set_metadata(struct ext2_inode *inode, int clean, __u16 mode,
1.14 __u16 uid, __u16 gid);
1.15
1.16 +errcode_t image_stat_inode(ext2_filsys fs, ext2_ino_t ino, struct stat *st);
1.17 +
1.18 int _image_isdir(ext2_filsys fs, ext2_ino_t ino);
1.19
1.20 int image_isdir(ext2_filsys fs, const char *name);
2.1 --- a/lib/src/image.c Mon Jul 08 21:24:48 2019 +0200
2.2 +++ b/lib/src/image.c Sun Jul 14 22:04:59 2019 +0200
2.3 @@ -20,6 +20,7 @@
2.4 */
2.5
2.6 #include <string.h>
2.7 +#include <sys/stat.h>
2.8
2.9 #include <ext2fs/ext2fs.h>
2.10
2.11 @@ -270,6 +271,36 @@
2.12 return 0;
2.13 }
2.14
2.15 +/* Copy file metadata into a stat structure. */
2.16 +
2.17 +errcode_t image_stat_inode(ext2_filsys fs, ext2_ino_t ino, struct stat *st)
2.18 +{
2.19 + struct ext2_inode inode;
2.20 + errcode_t retval = ext2fs_read_inode(fs, ino, &inode);
2.21 +
2.22 + if (retval)
2.23 + return retval;
2.24 +
2.25 + st->st_dev = 0; /* device identifier */
2.26 + st->st_ino = ino;
2.27 + st->st_mode = inode.i_mode;
2.28 + st->st_nlink = inode.i_links_count;
2.29 + st->st_uid = inode_uid(inode);
2.30 + st->st_gid = inode_gid(inode);
2.31 + st->st_rdev = 0; /* special file device identifier */
2.32 + st->st_size = EXT2_I_SIZE(&inode);
2.33 + st->st_blksize = fs->blocksize;
2.34 + st->st_blocks = 0; /* number of 512 byte blocks allocated */
2.35 + st->st_atim.tv_sec = inode.i_atime;
2.36 + st->st_atim.tv_nsec = 0; /* nanosecond resolution */
2.37 + st->st_mtim.tv_sec = inode.i_mtime;
2.38 + st->st_mtim.tv_nsec = 0;
2.39 + st->st_ctim.tv_sec = inode.i_ctime;
2.40 + st->st_ctim.tv_nsec = 0;
2.41 +
2.42 + return 0;
2.43 +}
2.44 +
2.45 /* Test object types in the filesystem image. */
2.46
2.47 int _image_isdir(ext2_filsys fs, ext2_ino_t ino)