Commit 00af2b26809d9cfb20af348ea7df255780348dd2
1 parent
a735aa31
added cow.h
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@653 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
30 additions
and
20 deletions
block.c
cow.h
0 → 100644
qemu-mkcow.c
| ... | ... | @@ -41,7 +41,7 @@ |
| 41 | 41 | #include <sys/stat.h> |
| 42 | 42 | #include <netinet/in.h> |
| 43 | 43 | |
| 44 | -#include "vl.h" | |
| 44 | +#include "cow.h" | |
| 45 | 45 | |
| 46 | 46 | #include "bswap.h" |
| 47 | 47 | |
| ... | ... | @@ -101,13 +101,14 @@ void help(void) |
| 101 | 101 | int main(int argc, char **argv) |
| 102 | 102 | { |
| 103 | 103 | const char *image_filename, *cow_filename; |
| 104 | - int cow_fd, c, nb_args; | |
| 104 | + int cow_fd, c, nb_args, simple_image; | |
| 105 | 105 | int64_t image_size; |
| 106 | 106 | |
| 107 | 107 | image_filename = NULL; |
| 108 | 108 | image_size = 0; |
| 109 | + simple_image = 0; | |
| 109 | 110 | for(;;) { |
| 110 | - c = getopt(argc, argv, "hf:"); | |
| 111 | + c = getopt(argc, argv, "hf:s"); | |
| 111 | 112 | if (c == -1) |
| 112 | 113 | break; |
| 113 | 114 | switch(c) { |
| ... | ... | @@ -117,6 +118,9 @@ int main(int argc, char **argv) |
| 117 | 118 | case 'f': |
| 118 | 119 | image_filename = optarg; |
| 119 | 120 | break; |
| 121 | + case 's': | |
| 122 | + simple_image = 1; | |
| 123 | + break; | |
| 120 | 124 | } |
| 121 | 125 | } |
| 122 | 126 | if (!image_filename) |
| ... | ... | @@ -131,12 +135,16 @@ int main(int argc, char **argv) |
| 131 | 135 | image_size = (int64_t)atoi(argv[optind + 1]) * 2 * 1024; |
| 132 | 136 | } |
| 133 | 137 | |
| 134 | - cow_fd = open(cow_filename, O_RDWR | O_CREAT | O_TRUNC, 0644); | |
| 138 | + cow_fd = open(cow_filename, O_RDWR | O_CREAT | O_TRUNC | O_LARGEFILE, 0644); | |
| 135 | 139 | if (!cow_fd < 0) |
| 136 | 140 | return -1; |
| 137 | - if (cow_create(cow_fd, image_filename, image_size) < 0) { | |
| 138 | - fprintf(stderr, "%s: error while formating\n", cow_filename); | |
| 139 | - exit(1); | |
| 141 | + if (simple_image) { | |
| 142 | + ftruncate64(cow_fd, image_size * 512); | |
| 143 | + } else { | |
| 144 | + if (cow_create(cow_fd, image_filename, image_size) < 0) { | |
| 145 | + fprintf(stderr, "%s: error while formating\n", cow_filename); | |
| 146 | + exit(1); | |
| 147 | + } | |
| 140 | 148 | } |
| 141 | 149 | close(cow_fd); |
| 142 | 150 | return 0; | ... | ... |
vl.h
| ... | ... | @@ -58,19 +58,6 @@ void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr); |
| 58 | 58 | int bdrv_commit(BlockDriverState *bs); |
| 59 | 59 | void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size); |
| 60 | 60 | |
| 61 | -/* user mode linux compatible COW file */ | |
| 62 | -#define COW_MAGIC 0x4f4f4f4d /* MOOO */ | |
| 63 | -#define COW_VERSION 2 | |
| 64 | - | |
| 65 | -struct cow_header_v2 { | |
| 66 | - uint32_t magic; | |
| 67 | - uint32_t version; | |
| 68 | - char backing_file[1024]; | |
| 69 | - int32_t mtime; | |
| 70 | - uint64_t size; | |
| 71 | - uint32_t sectorsize; | |
| 72 | -}; | |
| 73 | - | |
| 74 | 61 | /* vga.c */ |
| 75 | 62 | |
| 76 | 63 | #define VGA_RAM_SIZE (4096 * 1024) | ... | ... |