qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [RFC PATCH 04/16] block: Move filename_decompose to block.c


From: Fam Zheng
Subject: [Qemu-devel] [RFC PATCH 04/16] block: Move filename_decompose to block.c
Date: Tue, 26 Jan 2016 18:38:13 +0800

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);
-- 
2.4.3




reply via email to

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