diff options
Diffstat (limited to 'block-dmg.c')
-rw-r--r-- | block-dmg.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/block-dmg.c b/block-dmg.c index a16ab92..8c9d0da 100644 --- a/block-dmg.c +++ b/block-dmg.c @@ -1,8 +1,8 @@ /* * QEMU Block driver for DMG images - * + * * Copyright (c) 2004 Johannes E. Schindelin - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights @@ -21,14 +21,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -#include "vl.h" +#include "qemu-common.h" #include "block_int.h" #include "bswap.h" #include <zlib.h> typedef struct BDRVDMGState { int fd; - + /* each chunk contains a certain number of sectors, * offsets[i] is the offset in the .dmg file, * lengths[i] is the length of the compressed chunk, @@ -73,27 +73,27 @@ static off_t read_uint32(int fd) return be32_to_cpu(buffer); } -static int dmg_open(BlockDriverState *bs, const char *filename) +static int dmg_open(BlockDriverState *bs, const char *filename, int flags) { BDRVDMGState *s = bs->opaque; off_t info_begin,info_end,last_in_offset,last_out_offset; uint32_t count; uint32_t max_compressed_size=1,max_sectors_per_chunk=1,i; - s->fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE); + s->fd = open(filename, O_RDONLY | O_BINARY); if (s->fd < 0) - return -1; + return -errno; bs->read_only = 1; s->n_chunks = 0; s->offsets = s->lengths = s->sectors = s->sectorcounts = 0; - + /* read offset of info blocks */ if(lseek(s->fd,-0x1d8,SEEK_END)<0) { dmg_close: close(s->fd); /* open raw instead */ bs->drv=&bdrv_raw; - return bs->drv->bdrv_open(bs,filename); + return bs->drv->bdrv_open(bs, filename, flags); } info_begin=read_off(s->fd); if(info_begin==0) @@ -125,11 +125,11 @@ dmg_close: goto dmg_close; chunk_count = (count-204)/40; new_size = sizeof(uint64_t) * (s->n_chunks + chunk_count); - s->types = realloc(s->types, new_size/2); - s->offsets = realloc(s->offsets, new_size); - s->lengths = realloc(s->lengths, new_size); - s->sectors = realloc(s->sectors, new_size); - s->sectorcounts = realloc(s->sectorcounts, new_size); + s->types = qemu_realloc(s->types, new_size/2); + s->offsets = qemu_realloc(s->offsets, new_size); + s->lengths = qemu_realloc(s->lengths, new_size); + s->sectors = qemu_realloc(s->sectors, new_size); + s->sectorcounts = qemu_realloc(s->sectorcounts, new_size); for(i=s->n_chunks;i<s->n_chunks+chunk_count;i++) { s->types[i] = read_uint32(s->fd); @@ -167,7 +167,7 @@ dmg_close: goto dmg_close; s->current_chunk = s->n_chunks; - + return 0; } @@ -227,7 +227,7 @@ static inline int dmg_read_chunk(BDRVDMGState *s,int sector_num) if (ret != s->lengths[chunk]) return -1; - + s->zstream.next_in = s->compressed_chunk; s->zstream.avail_in = s->lengths[chunk]; s->zstream.next_out = s->uncompressed_chunk; @@ -253,7 +253,7 @@ static inline int dmg_read_chunk(BDRVDMGState *s,int sector_num) return 0; } -static int dmg_read(BlockDriverState *bs, int64_t sector_num, +static int dmg_read(BlockDriverState *bs, int64_t sector_num, uint8_t *buf, int nb_sectors) { BDRVDMGState *s = bs->opaque; |