From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O9FcN-000163-1o for qemu-devel@nongnu.org; Tue, 04 May 2010 06:44:47 -0400 Received: from [140.186.70.92] (port=41366 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O9FcJ-00014M-9D for qemu-devel@nongnu.org; Tue, 04 May 2010 06:44:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O9FcH-0002oG-EJ for qemu-devel@nongnu.org; Tue, 04 May 2010 06:44:42 -0400 Received: from verein.lst.de ([213.95.11.210]:37867) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O9FcE-0002nZ-U7 for qemu-devel@nongnu.org; Tue, 04 May 2010 06:44:41 -0400 Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id o44AicWY006446 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Tue, 4 May 2010 12:44:38 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-7.2) id o44Aicve006445 for qemu-devel@nongnu.org; Tue, 4 May 2010 12:44:38 +0200 Date: Tue, 4 May 2010 12:44:38 +0200 From: Christoph Hellwig Message-ID: <20100504104438.GC6388@lst.de> References: <20100504104351.GA6342@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20100504104351.GA6342@lst.de> Subject: [Qemu-devel] [PATCH 3/6] cloop: use pread List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Use pread instead of lseek + read in preparation of using the qemu block API. Signed-off-by: Christoph Hellwig Index: qemu-kevin/block/cloop.c =================================================================== --- qemu-kevin.orig/block/cloop.c 2010-05-03 13:01:09.035025542 +0200 +++ qemu-kevin/block/cloop.c 2010-05-03 13:01:57.918284307 +0200 @@ -62,23 +62,22 @@ static int cloop_open(BlockDriverState * bs->read_only = 1; /* read header */ - if(lseek(s->fd,128,SEEK_SET)<0) { -cloop_close: - close(s->fd); - return -1; + if (pread(s->fd, &s->block_size, 4, 128) < 4) { + goto cloop_close; } - if(read(s->fd,&s->block_size,4)<4) - goto cloop_close; - s->block_size=be32_to_cpu(s->block_size); - if(read(s->fd,&s->n_blocks,4)<4) - goto cloop_close; - s->n_blocks=be32_to_cpu(s->n_blocks); + s->block_size = be32_to_cpu(s->block_size); + + if (pread(s->fd, &s->n_blocks, 4, 128 + 4) < 4) { + goto cloop_close; + } + s->n_blocks = be32_to_cpu(s->n_blocks); /* read offsets */ - offsets_size=s->n_blocks*sizeof(uint64_t); - s->offsets=(uint64_t*)qemu_malloc(offsets_size); - if(read(s->fd,s->offsets,offsets_size)n_blocks * sizeof(uint64_t); + s->offsets = qemu_malloc(offsets_size); + if (pread(s->fd, s->offsets, offsets_size, 128 + 4 + 4) < offsets_size) { goto cloop_close; + } for(i=0;in_blocks;i++) { s->offsets[i]=be64_to_cpu(s->offsets[i]); if(i>0) { @@ -98,6 +97,10 @@ cloop_close: s->sectors_per_block = s->block_size/512; bs->total_sectors = s->n_blocks*s->sectors_per_block; return 0; + +cloop_close: + close(s->fd); + return -1; } static inline int cloop_read_block(BDRVCloopState *s,int block_num) @@ -106,8 +109,7 @@ static inline int cloop_read_block(BDRVC int ret; uint32_t bytes = s->offsets[block_num+1]-s->offsets[block_num]; - lseek(s->fd, s->offsets[block_num], SEEK_SET); - ret = read(s->fd, s->compressed_block, bytes); + ret = pread(s->fd, s->compressed_block, bytes, s->offsets[block_num]); if (ret != bytes) return -1;