diff options
Diffstat (limited to 'ext4_utils/ext4_utils.c')
-rw-r--r-- | ext4_utils/ext4_utils.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/ext4_utils/ext4_utils.c b/ext4_utils/ext4_utils.c index 3d5895e3..0016b652 100644 --- a/ext4_utils/ext4_utils.c +++ b/ext4_utils/ext4_utils.c @@ -137,11 +137,11 @@ static void ext4_write_data_file(void *priv, u64 off, const char *file, } /* Write the filesystem image to a file */ -void write_ext4_image(const char *filename, int gz, int sparse, int crc, - int wipe) +void write_ext4_image(int fd, int gz, int sparse, int crc, int wipe) { int ret = 0; - struct output_file *out = open_output_file(filename, gz, sparse, + + struct output_file *out = open_output_fd(fd, gz, sparse, count_sparse_chunks(), crc, wipe); if (!out) @@ -446,15 +446,11 @@ void ext4_update_free() } } -static u64 get_block_device_size(const char *filename) +static u64 get_block_device_size(int fd) { - int fd = open(filename, O_RDONLY); u64 size = 0; int ret; - if (fd < 0) - return 0; - #if defined(__linux__) ret = ioctl(fd, BLKGETSIZE64, &size); #elif defined(__APPLE__) && defined(__MACH__) @@ -464,22 +460,20 @@ static u64 get_block_device_size(const char *filename) return 0; #endif - close(fd); - if (ret) return 0; return size; } -u64 get_file_size(const char *filename) +u64 get_file_size(int fd) { struct stat buf; int ret; u64 reserve_len = 0; s64 computed_size; - ret = stat(filename, &buf); + ret = fstat(fd, &buf); if (ret) return 0; @@ -489,7 +483,7 @@ u64 get_file_size(const char *filename) if (S_ISREG(buf.st_mode)) computed_size = buf.st_size - reserve_len; else if (S_ISBLK(buf.st_mode)) - computed_size = get_block_device_size(filename) - reserve_len; + computed_size = get_block_device_size(fd) - reserve_len; else computed_size = 0; |