From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:33876) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T8jgX-0007Ij-Rb for qemu-devel@nongnu.org; Mon, 03 Sep 2012 23:20:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T8jgW-0007uv-EW for qemu-devel@nongnu.org; Mon, 03 Sep 2012 23:20:17 -0400 Received: from e23smtp03.au.ibm.com ([202.81.31.145]:44686) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T8jgV-0007rh-Kk for qemu-devel@nongnu.org; Mon, 03 Sep 2012 23:20:16 -0400 Received: from /spool/local by e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 4 Sep 2012 13:18:53 +1000 Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay03.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q843Je4l28115186 for ; Tue, 4 Sep 2012 13:19:40 +1000 Received: from d23av03.au.ibm.com (loopback [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q843JePE023779 for ; Tue, 4 Sep 2012 13:19:40 +1000 Message-ID: <50457345.1070808@linux.vnet.ibm.com> Date: Tue, 04 Sep 2012 11:19:33 +0800 From: Wenchao Xia 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> <5044AE33.7040003@redhat.com> In-Reply-To: <5044AE33.7040003@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH 4/6] libqblock internal used functions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: kwolf@redhat.com, stefanha@gmail.com, aliguori@us.ibm.com, eblake@redhat.com, qemu-devel@nongnu.org 于 2012-9-3 21:18, Paolo Bonzini 写道: > 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 > OK. It was done for make a patch smaller to easy reviewing. -- Best Regards Wenchao Xia