diff --git a/block/raw-posix.c b/block/raw-posix.c index fa4f83e8fc45f3567b87bf7edbe54930cbc4d2f3..389903e44bc1d060785fc61b398c527f13d294bf 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -852,6 +852,7 @@ again: static int raw_create(const char *filename, QEMUOptionParameter *options) { int fd; + int result = 0; int64_t total_size = 0; /* Read out options */ @@ -864,11 +865,17 @@ static int raw_create(const char *filename, QEMUOptionParameter *options) fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644); - if (fd < 0) - return -EIO; - ftruncate(fd, total_size * 512); - close(fd); - return 0; + if (fd < 0) { + result = -errno; + } else { + if (ftruncate(fd, total_size * 512) != 0) { + result = -errno; + } + if (close(fd) != 0) { + result = -errno; + } + } + return result; } static void raw_flush(BlockDriverState *bs)