From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NUQI8-0006A8-LG for qemu-devel@nongnu.org; Mon, 11 Jan 2010 14:51:08 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NUQI3-000674-PY for qemu-devel@nongnu.org; Mon, 11 Jan 2010 14:51:07 -0500 Received: from [199.232.76.173] (port=34025 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NUQI3-00066z-Hq for qemu-devel@nongnu.org; Mon, 11 Jan 2010 14:51:03 -0500 Received: from mail-qy0-f189.google.com ([209.85.221.189]:50649) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NUQI3-0003Kt-4A for qemu-devel@nongnu.org; Mon, 11 Jan 2010 14:51:03 -0500 Received: by qyk27 with SMTP id 27so9583684qyk.20 for ; Mon, 11 Jan 2010 11:51:02 -0800 (PST) Message-ID: <4B4B8124.5020500@codemonkey.ws> Date: Mon, 11 Jan 2010 13:51:00 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] dmg: fix ->open failure References: <20100111130654.GA24241@lst.de> In-Reply-To: <20100111130654.GA24241@lst.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Christoph Hellwig Cc: qemu-devel@nongnu.org On 01/11/2010 07:06 AM, Christoph Hellwig wrote: > Currently the dmg image format driver simply opens the images as raw > if any kind of failure happens. This is contrarty to the behaviour > of all other image formats which just return an error and let the > block core deal with it. > > Signed-off-by: Christoph Hellwig > Applied. Thanks. Regards, Anthony Liguori > Index: qemu/block/dmg.c > =================================================================== > --- qemu.orig/block/dmg.c 2010-01-11 14:00:25.945021645 +0100 > +++ qemu/block/dmg.c 2010-01-11 14:03:03.006036707 +0100 > @@ -90,24 +90,21 @@ static int dmg_open(BlockDriverState *bs > > /* read offset of info blocks */ > if(lseek(s->fd,-0x1d8,SEEK_END)<0) { > -dmg_close: > - close(s->fd); > - /* open raw instead */ > - bs->drv=bdrv_find_format("raw"); > - return bs->drv->bdrv_open(bs, filename, flags); > + goto fail; > } > + > info_begin=read_off(s->fd); > if(info_begin==0) > - goto dmg_close; > + goto fail; > if(lseek(s->fd,info_begin,SEEK_SET)<0) > - goto dmg_close; > + goto fail; > if(read_uint32(s->fd)!=0x100) > - goto dmg_close; > + goto fail; > if((count = read_uint32(s->fd))==0) > - goto dmg_close; > + goto fail; > info_end = info_begin+count; > if(lseek(s->fd,0xf8,SEEK_CUR)<0) > - goto dmg_close; > + goto fail; > > /* read offsets */ > last_in_offset = last_out_offset = 0; > @@ -116,14 +113,14 @@ dmg_close: > > count = read_uint32(s->fd); > if(count==0) > - goto dmg_close; > + goto fail; > type = read_uint32(s->fd); > if(type!=0x6d697368 || count<244) > lseek(s->fd,count-4,SEEK_CUR); > else { > int new_size, chunk_count; > if(lseek(s->fd,200,SEEK_CUR)<0) > - goto dmg_close; > + goto fail; > chunk_count = (count-204)/40; > new_size = sizeof(uint64_t) * (s->n_chunks + chunk_count); > s->types = qemu_realloc(s->types, new_size/2); > @@ -142,7 +139,7 @@ dmg_close: > chunk_count--; > i--; > if(lseek(s->fd,36,SEEK_CUR)<0) > - goto dmg_close; > + goto fail; > continue; > } > read_uint32(s->fd); > @@ -163,11 +160,14 @@ dmg_close: > s->compressed_chunk = qemu_malloc(max_compressed_size+1); > s->uncompressed_chunk = qemu_malloc(512*max_sectors_per_chunk); > if(inflateInit(&s->zstream) != Z_OK) > - goto dmg_close; > + goto fail; > > s->current_chunk = s->n_chunks; > > return 0; > +fail: > + close(s->fd); > + return -1; > } > > static inline int is_sector_in_chunk(BDRVDMGState* s, > > > >