1.1 --- a/libe2access/lib/src/image.c Sat Jan 08 00:16:20 2022 +0100
1.2 +++ b/libe2access/lib/src/image.c Fri Jan 14 01:10:35 2022 +0100
1.3 @@ -1,7 +1,7 @@
1.4 /*
1.5 * Filesystem access functions.
1.6 *
1.7 - * Copyright (C) 2019, 2021 Paul Boddie <paul@boddie.org.uk>
1.8 + * Copyright (C) 2019, 2021, 2022 Paul Boddie <paul@boddie.org.uk>
1.9 *
1.10 * This program is free software; you can redistribute it and/or
1.11 * modify it under the terms of the GNU General Public License as
1.12 @@ -77,19 +77,6 @@
1.13 return ext2fs_write_new_inode(fs, *ino_file, &inode_file);
1.14 }
1.15
1.16 -/* Set the mode, user and group metadata for a file. */
1.17 -
1.18 -void image_set_metadata(struct ext2_inode *inode, int clean, __u16 mode,
1.19 - __u16 uid, __u16 gid)
1.20 -{
1.21 - if (clean)
1.22 - memset(inode, 0, sizeof(*inode));
1.23 -
1.24 - inode->i_mode = mode;
1.25 - inode->i_uid = uid;
1.26 - inode->i_gid = gid;
1.27 -}
1.28 -
1.29 /* Find an object in the given directory with the given name in the filesystem
1.30 image, updating the name reference to refer to the next component. */
1.31
1.32 @@ -313,36 +300,6 @@
1.33 return 0;
1.34 }
1.35
1.36 -/* Copy file metadata into a stat structure. */
1.37 -
1.38 -errcode_t image_stat_inode(ext2_filsys fs, ext2_ino_t ino, struct stat *st)
1.39 -{
1.40 - struct ext2_inode inode;
1.41 - errcode_t retval = ext2fs_read_inode(fs, ino, &inode);
1.42 -
1.43 - if (retval)
1.44 - return retval;
1.45 -
1.46 - st->st_dev = 0; /* device identifier */
1.47 - st->st_ino = ino;
1.48 - st->st_mode = inode.i_mode;
1.49 - st->st_nlink = inode.i_links_count;
1.50 - st->st_uid = inode_uid(inode);
1.51 - st->st_gid = inode_gid(inode);
1.52 - st->st_rdev = 0; /* special file device identifier */
1.53 - st->st_size = EXT2_I_SIZE(&inode);
1.54 - st->st_blksize = fs->blocksize;
1.55 - st->st_blocks = 0; /* number of 512 byte blocks allocated */
1.56 - st->st_atim.tv_sec = inode.i_atime;
1.57 - st->st_atim.tv_nsec = 0; /* nanosecond resolution */
1.58 - st->st_mtim.tv_sec = inode.i_mtime;
1.59 - st->st_mtim.tv_nsec = 0;
1.60 - st->st_ctim.tv_sec = inode.i_ctime;
1.61 - st->st_ctim.tv_nsec = 0;
1.62 -
1.63 - return 0;
1.64 -}
1.65 -
1.66 /* Remove an inode. */
1.67
1.68 errcode_t image_remove_by_inode(ext2_filsys fs, ext2_ino_t ino)
1.69 @@ -391,6 +348,49 @@
1.70 sizeof(inode));
1.71 }
1.72
1.73 +/* Set the mode, user and group metadata for a file. */
1.74 +
1.75 +void image_set_metadata(struct ext2_inode *inode, int clean, __u16 mode,
1.76 + __u16 uid, __u16 gid)
1.77 +{
1.78 + if (clean)
1.79 + memset(inode, 0, sizeof(*inode));
1.80 +
1.81 + inode->i_mode = mode;
1.82 + inode->i_uid = uid;
1.83 + inode->i_gid = gid;
1.84 +}
1.85 +
1.86 +/* Copy file metadata into a stat structure. */
1.87 +
1.88 +errcode_t image_stat_inode(ext2_filsys fs, ext2_ino_t ino, struct stat *st)
1.89 +{
1.90 + struct ext2_inode inode;
1.91 + errcode_t retval = ext2fs_read_inode(fs, ino, &inode);
1.92 +
1.93 + if (retval)
1.94 + return retval;
1.95 +
1.96 + st->st_dev = 0; /* device identifier */
1.97 + st->st_ino = ino;
1.98 + st->st_mode = inode.i_mode;
1.99 + st->st_nlink = inode.i_links_count;
1.100 + st->st_uid = inode_uid(inode);
1.101 + st->st_gid = inode_gid(inode);
1.102 + st->st_rdev = 0; /* special file device identifier */
1.103 + st->st_size = EXT2_I_SIZE(&inode);
1.104 + st->st_blksize = fs->blocksize;
1.105 + st->st_blocks = 0; /* number of 512 byte blocks allocated */
1.106 + st->st_atim.tv_sec = inode.i_atime;
1.107 + st->st_atim.tv_nsec = 0; /* nanosecond resolution */
1.108 + st->st_mtim.tv_sec = inode.i_mtime;
1.109 + st->st_mtim.tv_nsec = 0;
1.110 + st->st_ctim.tv_sec = inode.i_ctime;
1.111 + st->st_ctim.tv_nsec = 0;
1.112 +
1.113 + return 0;
1.114 +}
1.115 +
1.116 /* Unlink a directory entry by name. */
1.117
1.118 errcode_t image_unlink_by_name(ext2_filsys fs, ext2_ino_t ino_parent,