On 02.11.2015 12:13, Xiao Guangrong wrote:
It is used to get the size of the specified file, also qemu_fd_getlength()
is introduced to unify the code with raw_getlength() in block/raw-posix.c
Signed-off-by: Xiao Guangrong <guangrong.xiao@xxxxxxxxxxxxxxx>
---
block/raw-posix.c | 7 +------
include/qemu/osdep.h | 2 ++
util/osdep.c | 31 +++++++++++++++++++++++++++++++
3 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/block/raw-posix.c b/block/raw-posix.c
index 918c756..734e6dd 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -1592,18 +1592,13 @@ static int64_t raw_getlength(BlockDriverState *bs)
{
BDRVRawState *s = bs->opaque;
int ret;
- int64_t size;
ret = fd_open(bs);
if (ret < 0) {
return ret;
}
- size = lseek(s->fd, 0, SEEK_END);
- if (size < 0) {
- return -errno;
- }
- return size;
+ return qemu_fd_getlength(s->fd);
}
#endif
diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
index dbc17dc..ca4c3fa 100644
--- a/include/qemu/osdep.h
+++ b/include/qemu/osdep.h
@@ -303,4 +303,6 @@ int qemu_read_password(char *buf, int buf_size);
pid_t qemu_fork(Error **errp);
size_t qemu_file_get_page_size(const char *mem_path, Error **errp);
+int64_t qemu_fd_getlength(int fd);
+size_t qemu_file_getlength(const char *file, Error **errp);
#endif
diff --git a/util/osdep.c b/util/osdep.c
index 0092bb6..5a61e19 100644
--- a/util/osdep.c
+++ b/util/osdep.c
@@ -428,3 +428,34 @@ writev(int fd, const struct iovec *iov, int iov_cnt)
return readv_writev(fd, iov, iov_cnt, true);
}
#endif
+
+int64_t qemu_fd_getlength(int fd)
+{
+ int64_t size;
+
+ size = lseek(fd, 0, SEEK_END);
+ if (size < 0) {
+ return -errno;
+ }
+ return size;
+}
+
+size_t qemu_file_getlength(const char *file, Error **errp)
+{
+ int64_t size;
+ int fd = qemu_open(file, O_RDONLY);
+
+ if (fd < 0) {
+ error_setg_file_open(errp, errno, file);
+ return 0;
+ }
+
+ size = qemu_fd_getlength(fd);
+ if (size < 0) {
+ error_setg_errno(errp, -size, "can't get size of file %s", file);
+ size = 0;
+ }
+
+ qemu_close(fd);
+ return size;
+}
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@xxxxxxxxxxxxx>
--
Best regards,
Vladimir
* now, @virtuozzo.com instead of @parallels.com. Sorry for this inconvenience.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html