From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40967) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aTFKV-0000Nt-LA for qemu-devel@nongnu.org; Tue, 09 Feb 2016 15:56:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aTFKU-0002oI-Jx for qemu-devel@nongnu.org; Tue, 09 Feb 2016 15:56:11 -0500 References: <1453804705-7205-1-git-send-email-famz@redhat.com> <1453804705-7205-5-git-send-email-famz@redhat.com> From: John Snow Message-ID: <56BA5262.90902@redhat.com> Date: Tue, 9 Feb 2016 15:56:02 -0500 MIME-Version: 1.0 In-Reply-To: <1453804705-7205-5-git-send-email-famz@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC PATCH 04/16] block: Move filename_decompose to block.c List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng , qemu-devel@nongnu.org Cc: Kevin Wolf , qemu-block@nongnu.org, Markus Armbruster , mreitz@redhat.com, vsementsov@parallels.com, Stefan Hajnoczi On 01/26/2016 05:38 AM, Fam Zheng wrote: > With the return value decoupled from VMDK, it can be reused by other block > code. > > Signed-off-by: Fam Zheng > --- > block.c | 40 ++++++++++++++++++++++++++++++++++++++++ > block/vmdk.c | 40 ---------------------------------------- > include/block/block.h | 2 ++ > 3 files changed, 42 insertions(+), 40 deletions(-) > > diff --git a/block.c b/block.c > index fa6ad1d..78db342 100644 > --- a/block.c > +++ b/block.c > @@ -144,6 +144,46 @@ int path_is_absolute(const char *path) > #endif > } > > +int filename_decompose(const char *filename, char *path, char *prefix, > + char *postfix, size_t buf_len, Error **errp) > +{ > + const char *p, *q; > + > + if (filename == NULL || !strlen(filename)) { > + error_setg(errp, "No filename provided"); > + return -EINVAL; > + } > + p = strrchr(filename, '/'); > + if (p == NULL) { > + p = strrchr(filename, '\\'); > + } > + if (p == NULL) { > + p = strrchr(filename, ':'); > + } > + if (p != NULL) { > + p++; > + if (p - filename >= buf_len) { > + return -EINVAL; > + } > + pstrcpy(path, p - filename + 1, filename); > + } else { > + p = filename; > + path[0] = '\0'; > + } > + q = strrchr(p, '.'); > + if (q == NULL) { > + pstrcpy(prefix, buf_len, p); > + postfix[0] = '\0'; > + } else { > + if (q - p >= buf_len) { > + return -EINVAL; > + } > + pstrcpy(prefix, q - p + 1, p); > + pstrcpy(postfix, buf_len, q); > + } > + return 0; > +} > + > /* if filename is absolute, just copy it to dest. Otherwise, build a > path to it by considering it is relative to base_path. URL are > supported. */ > diff --git a/block/vmdk.c b/block/vmdk.c > index f8f7fcf..505e0c2 100644 > --- a/block/vmdk.c > +++ b/block/vmdk.c > @@ -1764,46 +1764,6 @@ exit: > return ret; > } > > -static int filename_decompose(const char *filename, char *path, char *prefix, > - char *postfix, size_t buf_len, Error **errp) > -{ > - const char *p, *q; > - > - if (filename == NULL || !strlen(filename)) { > - error_setg(errp, "No filename provided"); > - return VMDK_ERROR; > - } > - p = strrchr(filename, '/'); > - if (p == NULL) { > - p = strrchr(filename, '\\'); > - } > - if (p == NULL) { > - p = strrchr(filename, ':'); > - } > - if (p != NULL) { > - p++; > - if (p - filename >= buf_len) { > - return VMDK_ERROR; > - } > - pstrcpy(path, p - filename + 1, filename); > - } else { > - p = filename; > - path[0] = '\0'; > - } > - q = strrchr(p, '.'); > - if (q == NULL) { > - pstrcpy(prefix, buf_len, p); > - postfix[0] = '\0'; > - } else { > - if (q - p >= buf_len) { > - return VMDK_ERROR; > - } > - pstrcpy(prefix, q - p + 1, p); > - pstrcpy(postfix, buf_len, q); > - } > - return VMDK_OK; > -} > - > static int vmdk_create(const char *filename, QemuOpts *opts, Error **errp) > { > int idx = 0; > diff --git a/include/block/block.h b/include/block/block.h > index bfb76f8..b9b30cb 100644 > --- a/include/block/block.h > +++ b/include/block/block.h > @@ -449,6 +449,8 @@ int bdrv_is_snapshot(BlockDriverState *bs); > > int path_has_protocol(const char *path); > int path_is_absolute(const char *path); > +int filename_decompose(const char *filename, char *path, char *prefix, > + char *postfix, size_t buf_len, Error **errp); > void path_combine(char *dest, int dest_size, > const char *base_path, > const char *filename); > Reviewed-by: John Snow