qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC PATCH 04/16] block: Move filename_decompose to blo


From: John Snow
Subject: Re: [Qemu-devel] [RFC PATCH 04/16] block: Move filename_decompose to block.c
Date: Tue, 9 Feb 2016 15:56:02 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0


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 <address@hidden>
> ---
>  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 <address@hidden>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]