From 00af2b26809d9cfb20af348ea7df255780348dd2 Mon Sep 17 00:00:00 2001 From: bellard Date: Thu, 26 Feb 2004 00:20:56 +0000 Subject: [PATCH] added cow.h git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@653 c046a42c-6fe2-441c-8c8c-71466251a162 --- block.c | 2 ++ cow.h | 13 +++++++++++++ qemu-mkcow.c | 22 +++++++++++++++------- vl.h | 13 ------------- 4 files changed, 30 insertions(+), 20 deletions(-) create mode 100644 cow.h diff --git a/block.c b/block.c index 6a1701a..29f316e 100644 --- a/block.c +++ b/block.c @@ -45,6 +45,8 @@ #define NO_THUNK_TYPE_SIZE #include "thunk.h" +#include "cow.h" + struct BlockDriverState { int fd; /* if -1, only COW mappings */ int64_t total_sectors; diff --git a/cow.h b/cow.h new file mode 100644 index 0000000..5b5f497 --- /dev/null +++ b/cow.h @@ -0,0 +1,13 @@ +/* user mode linux compatible COW file */ +#define COW_MAGIC 0x4f4f4f4d /* MOOO */ +#define COW_VERSION 2 + +struct cow_header_v2 { + uint32_t magic; + uint32_t version; + char backing_file[1024]; + int32_t mtime; + uint64_t size; + uint32_t sectorsize; +}; + diff --git a/qemu-mkcow.c b/qemu-mkcow.c index 2cc6332..7968bf9 100644 --- a/qemu-mkcow.c +++ b/qemu-mkcow.c @@ -41,7 +41,7 @@ #include #include -#include "vl.h" +#include "cow.h" #include "bswap.h" @@ -101,13 +101,14 @@ void help(void) int main(int argc, char **argv) { const char *image_filename, *cow_filename; - int cow_fd, c, nb_args; + int cow_fd, c, nb_args, simple_image; int64_t image_size; image_filename = NULL; image_size = 0; + simple_image = 0; for(;;) { - c = getopt(argc, argv, "hf:"); + c = getopt(argc, argv, "hf:s"); if (c == -1) break; switch(c) { @@ -117,6 +118,9 @@ int main(int argc, char **argv) case 'f': image_filename = optarg; break; + case 's': + simple_image = 1; + break; } } if (!image_filename) @@ -131,12 +135,16 @@ int main(int argc, char **argv) image_size = (int64_t)atoi(argv[optind + 1]) * 2 * 1024; } - cow_fd = open(cow_filename, O_RDWR | O_CREAT | O_TRUNC, 0644); + cow_fd = open(cow_filename, O_RDWR | O_CREAT | O_TRUNC | O_LARGEFILE, 0644); if (!cow_fd < 0) return -1; - if (cow_create(cow_fd, image_filename, image_size) < 0) { - fprintf(stderr, "%s: error while formating\n", cow_filename); - exit(1); + if (simple_image) { + ftruncate64(cow_fd, image_size * 512); + } else { + if (cow_create(cow_fd, image_filename, image_size) < 0) { + fprintf(stderr, "%s: error while formating\n", cow_filename); + exit(1); + } } close(cow_fd); return 0; diff --git a/vl.h b/vl.h index c8c22ac..35962d1 100644 --- a/vl.h +++ b/vl.h @@ -58,19 +58,6 @@ void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr); int bdrv_commit(BlockDriverState *bs); void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size); -/* user mode linux compatible COW file */ -#define COW_MAGIC 0x4f4f4f4d /* MOOO */ -#define COW_VERSION 2 - -struct cow_header_v2 { - uint32_t magic; - uint32_t version; - char backing_file[1024]; - int32_t mtime; - uint64_t size; - uint32_t sectorsize; -}; - /* vga.c */ #define VGA_RAM_SIZE (4096 * 1024) -- 2.7.4