From patchwork Mon Sep 3 09:18:44 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wayne Xia X-Patchwork-Id: 181342 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id B47092C0091 for ; Mon, 3 Sep 2012 19:38:17 +1000 (EST) Received: from localhost ([::1]:46447 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T8Srr-00061S-A7 for incoming@patchwork.ozlabs.org; Mon, 03 Sep 2012 05:22:51 -0400 Received: from eggs.gnu.org ([208.118.235.92]:42557) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T8Sr2-0003wH-8Q for qemu-devel@nongnu.org; Mon, 03 Sep 2012 05:22:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T8Sqw-0007oM-7P for qemu-devel@nongnu.org; Mon, 03 Sep 2012 05:22:00 -0400 Received: from e23smtp09.au.ibm.com ([202.81.31.142]:41663) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T8Sqv-0007oG-BB for qemu-devel@nongnu.org; Mon, 03 Sep 2012 05:21:54 -0400 Received: from /spool/local by e23smtp09.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 3 Sep 2012 19:20:16 +1000 Received: from d23relay05.au.ibm.com (202.81.31.247) by e23smtp09.au.ibm.com (202.81.31.206) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 3 Sep 2012 19:20:15 +1000 Received: from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.235.138]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q839Cfml14680316 for ; Mon, 3 Sep 2012 19:12:41 +1000 Received: from d23av02.au.ibm.com (loopback [127.0.0.1]) by d23av02.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q839Lk65018398 for ; Mon, 3 Sep 2012 19:21:47 +1000 Received: from RedHat62GAWSWenchao ([9.115.122.34]) by d23av02.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q839JI4k012127; Mon, 3 Sep 2012 19:21:44 +1000 From: Wenchao Xia To: qemu-devel@nongnu.org Date: Mon, 3 Sep 2012 17:18:44 +0800 Message-Id: <1346663926-20188-5-git-send-email-xiawenc@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1346663926-20188-1-git-send-email-xiawenc@linux.vnet.ibm.com> References: <1346663926-20188-1-git-send-email-xiawenc@linux.vnet.ibm.com> x-cbid: 12090309-3568-0000-0000-0000026810C1 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 202.81.31.142 Cc: kwolf@redhat.com, aliguori@us.ibm.com, stefanha@gmail.com, pbonzini@redhat.com, eblake@redhat.com, Wenchao Xia Subject: [Qemu-devel] [PATCH 4/6] libqblock internal used functions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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