From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:43169) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T8WYL-0007rF-SV for qemu-devel@nongnu.org; Mon, 03 Sep 2012 09:19:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T8WYE-0002MV-KM for qemu-devel@nongnu.org; Mon, 03 Sep 2012 09:18:57 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44092) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T8WYE-0002MQ-Bn for qemu-devel@nongnu.org; Mon, 03 Sep 2012 09:18:50 -0400 Message-ID: <5044AE33.7040003@redhat.com> Date: Mon, 03 Sep 2012 15:18:43 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1346663926-20188-1-git-send-email-xiawenc@linux.vnet.ibm.com> <1346663926-20188-5-git-send-email-xiawenc@linux.vnet.ibm.com> In-Reply-To: <1346663926-20188-5-git-send-email-xiawenc@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 4/6] libqblock internal used functions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wenchao Xia Cc: kwolf@redhat.com, stefanha@gmail.com, aliguori@us.ibm.com, eblake@redhat.com, qemu-devel@nongnu.org Il 03/09/2012 11:18, Wenchao Xia ha scritto: > This patch contains internal helper codes. > > Signed-off-by: Wenchao Xia > --- > block.c | 2 +- > block.h | 1 + > libqblock/libqblock-helper.c | 92 ++++++++++++++++++++++++++++++++++++++++++ > libqblock/libqblock-helper.h | 57 ++++++++++++++++++++++++++ > 4 files changed, 151 insertions(+), 1 deletions(-) > create mode 100644 libqblock/libqblock-helper.c > create mode 100644 libqblock/libqblock-helper.h > > diff --git a/block.c b/block.c > index 470bdcc..8b312f8 100644 > --- a/block.c > +++ b/block.c > @@ -196,7 +196,7 @@ static void bdrv_io_limits_intercept(BlockDriverState *bs, > } > > /* check if the path starts with ":" */ > -static int path_has_protocol(const char *path) > +int path_has_protocol(const char *path) > { > const char *p; > > diff --git a/block.h b/block.h > index 2e2be11..e7da711 100644 > --- a/block.h > +++ b/block.h > @@ -405,4 +405,5 @@ typedef enum { > #define BLKDBG_EVENT(bs, evt) bdrv_debug_event(bs, evt) > void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event); > > +int path_has_protocol(const char *path); > #endif > diff --git a/libqblock/libqblock-helper.c b/libqblock/libqblock-helper.c > new file mode 100644 > index 0000000..f9e8ce9 > --- /dev/null > +++ b/libqblock/libqblock-helper.c > @@ -0,0 +1,92 @@ > +#include "libqblock-helper.h" > +#include "libqblock-types.h" > +#include "libqblock-error.h" > + > +const char *fmt2str(enum QBlockFormat fmt) > +{ > + const char *ret = NULL; > + switch (fmt) { > + case QB_FMT_COW: > + ret = "cow"; > + break; > + case QB_FMT_QED: > + ret = "qed"; > + break; > + case QB_FMT_QCOW: > + ret = "qcow"; > + break; > + case QB_FMT_QCOW2: > + ret = "qcow2"; > + break; > + case QB_FMT_RAW: > + ret = "raw"; > + break; > + case QB_FMT_RBD: > + ret = "rbd"; > + break; > + case QB_FMT_SHEEPDOG: > + ret = "sheepdog"; > + break; > + case QB_FMT_VDI: > + ret = "vdi"; > + break; > + case QB_FMT_VMDK: > + ret = "vmdk"; > + break; > + case QB_FMT_VPC: > + ret = "vpc"; > + break; > + default: > + break; > + } > + return ret; > +} > + > +enum QBlockFormat str2fmt(const char *fmt) > +{ > + enum QBlockFormat ret = QB_FMT_NONE; > + if (0 == strcmp(fmt, "cow")) { > + ret = QB_FMT_COW; > + } else if (0 == strcmp(fmt, "qed")) { > + ret = QB_FMT_QED; > + } else if (0 == strcmp(fmt, "qcow")) { > + ret = QB_FMT_QCOW; > + } else if (0 == strcmp(fmt, "qcow2")) { > + ret = QB_FMT_QCOW2; > + } else if (0 == strcmp(fmt, "raw")) { > + ret = QB_FMT_RAW; > + } else if (0 == strcmp(fmt, "rbd")) { > + ret = QB_FMT_RBD; > + } else if (0 == strcmp(fmt, "sheepdog")) { > + ret = QB_FMT_SHEEPDOG; > + } else if (0 == strcmp(fmt, "vdi")) { > + ret = QB_FMT_VDI; > + } else if (0 == strcmp(fmt, "vmdk")) { > + ret = QB_FMT_VMDK; > + } else if (0 == strcmp(fmt, "vpc")) { > + ret = QB_FMT_VPC; > + } > + return ret; > +} > + > +void set_broker_err(struct QBroker *broker, int err_ret, > + const char *fmt, ...) > +{ > + va_list ap; > + > + broker->err_ret = err_ret; > + if (err_ret == QB_ERR_INTERNAL_ERR) { > + broker->err_no = -errno; > + } else { > + broker->err_no = 0; > + } > + > + va_start(ap, fmt); > + vsnprintf(broker->err_msg, sizeof(broker->err_msg), fmt, ap); > + va_end(ap); > +} > + > +void set_broker_err_nomem(struct QBroker *broker) > +{ > + set_broker_err(broker, QB_ERR_MEM_ERR, "No Memory."); > +} > diff --git a/libqblock/libqblock-helper.h b/libqblock/libqblock-helper.h > new file mode 100644 > index 0000000..4330472 > --- /dev/null > +++ b/libqblock/libqblock-helper.h > @@ -0,0 +1,57 @@ > +/* > + * QEMU block layer library > + * > + * Copyright IBM, Corp. 2012 > + * > + * Authors: > + * Wenchao Xia > + * > + * This work is licensed under the terms of the GNU LGPL, version 2 or later. > + * See the COPYING.LIB file in the top-level directory. > + * > + */ > + > +#ifndef LIBQBLOCK_HELPER > +#define LIBQBLOCK_HELPER > + > +#include "block.h" > +#include "block_int.h" > + > +#include "libqblock-types.h" > + > +/* this file contains helper function used internally. */ > +#define SECTOR_SIZE (512) > +#define SECTOR_SIZE_MASK (0x01ff) > +#define SECTOR_SIZE_BITS_NUM (9) > +#define FUNC_FREE free > +#define FUNC_MALLOC malloc > +#define FUNC_CALLOC calloc > + > +#define CLEAN_FREE(p) { \ > + FUNC_FREE(p); \ > + (p) = NULL; \ > +} > + > +/* details should be hidden to user */ > +struct QBlockState { > + BlockDriverState *bdrvs; > + /* internal used file name now, if it is not NULL, it means > + image was opened. > + */ > + char *filename; > +}; > + > +#define QB_ERR_STRING_SIZE (1024) > +struct QBroker { > + /* last error */ > + char err_msg[QB_ERR_STRING_SIZE]; > + int err_ret; /* last error return of libqblock. */ > + int err_no; /* 2nd level of error, errno what below reports */ > +}; > + > +const char *fmt2str(enum QBlockFormat fmt); > +enum QBlockFormat str2fmt(const char *fmt); > +void set_broker_err(struct QBroker *broker, int err_ret, > + const char *fmt, ...); > +void set_broker_err_nomem(struct QBroker *broker); > +#endif > Please squash this into patch 1, there is no need to keep separate files. Paolo