return fd;
}
+static void
+verify_device_size(
+ int dev_fd,
+ bool is_file,
+ xfs_rfsblock_t nr_blocks,
+ uint32_t blocksize)
+{
+ if (is_file) {
+ /* ensure regular files are correctly sized */
+ if (ftruncate(dev_fd, nr_blocks * blocksize))
+ fatal("cannot set filesystem image size: %s\n",
+ strerror(errno));
+ } else {
+ /* ensure device is sufficiently large enough */
+ char lb[XFS_MAX_SECTORSIZE] = { 0 };
+ off64_t off;
+
+ off = nr_blocks * blocksize - sizeof(lb);
+ if (pwrite(dev_fd, lb, sizeof(lb), off) < 0)
+ fatal("failed to write last block, is target too "
+ "small? (error: %s)\n", strerror(errno));
+ }
+}
+
static void
read_header_v1(
union mdrestore_headers *h,
((struct xfs_dsb*)block_buffer)->sb_inprogress = 1;
- if (is_target_file) {
- /* ensure regular files are correctly sized */
-
- if (ftruncate(ddev_fd, sb.sb_dblocks * sb.sb_blocksize))
- fatal("cannot set filesystem image size: %s\n",
- strerror(errno));
- } else {
- /* ensure device is sufficiently large enough */
-
- char lb[XFS_MAX_SECTORSIZE] = { 0 };
- off64_t off;
-
- off = sb.sb_dblocks * sb.sb_blocksize - sizeof(lb);
- if (pwrite(ddev_fd, lb, sizeof(lb), off) < 0)
- fatal("failed to write last block, is target too "
- "small? (error: %s)\n", strerror(errno));
- }
+ verify_device_size(ddev_fd, is_target_file, sb.sb_dblocks,
+ sb.sb_blocksize);
bytes_read = 0;