qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH RFC 09/36] 9pfs: local: post link operation for mapp


From: Greg Kurz
Subject: [Qemu-devel] [PATCH RFC 09/36] 9pfs: local: post link operation for mapped-file security
Date: Mon, 30 Jan 2017 13:10:44 +0100
User-agent: StGit/0.17.1-20-gc0b1b-dirty

The link operation is really the same for the passthrough and mapped
security models. This patch simply moves the mapped-file bits to a
separate function. This will make future modifications easier.

This doesn't fix any bug, it is just preparatory cleanup.

Signed-off-by: Greg Kurz <address@hidden>
---
 hw/9pfs/9p-local.c |   42 ++++++++++++++++++++++++++++++------------
 1 file changed, 30 insertions(+), 12 deletions(-)

diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
index c0b1907f7901..ebc3e208efa0 100644
--- a/hw/9pfs/9p-local.c
+++ b/hw/9pfs/9p-local.c
@@ -1108,6 +1108,35 @@ static int local_symlink(FsContext *fs_ctx, const char 
*oldpath,
     g_assert_not_reached();
 }
 
+static int local_post_link_mapped_file(FsContext *ctx, V9fsPath *oldpath,
+                                       V9fsPath *dirpath, const char *name)
+{
+    int ret;
+    V9fsString newpath;
+    char *buffer, *buffer1;
+
+    v9fs_string_init(&newpath);
+    v9fs_string_sprintf(&newpath, "%s/%s", dirpath->data, name);
+
+    /* Link the .virtfs_metadata files. Create the metada directory */
+    ret = local_create_mapped_attr_dir(ctx, newpath.data);
+    if (ret < 0) {
+        goto out;
+    }
+    buffer = local_mapped_attr_path(ctx, oldpath->data);
+    buffer1 = local_mapped_attr_path(ctx, newpath.data);
+    ret = link(buffer, buffer1);
+    g_free(buffer);
+    g_free(buffer1);
+    if (ret < 0 && errno == ENOENT) {
+        ret = 0;
+    }
+
+out:
+    v9fs_string_free(&newpath);
+    return ret;
+}
+
 static int local_link(FsContext *ctx, V9fsPath *oldpath,
                       V9fsPath *dirpath, const char *name)
 {
@@ -1129,21 +1158,10 @@ static int local_link(FsContext *ctx, V9fsPath *oldpath,
 
     /* now link the virtfs_metadata files */
     if (ctx->export_flags & V9FS_SM_MAPPED_FILE) {
-        char *vbuffer, *vbuffer1;
-
-        /* Link the .virtfs_metadata files. Create the metada directory */
-        ret = local_create_mapped_attr_dir(ctx, newpath.data);
+        ret = local_post_link_mapped_file(ctx, oldpath, dirpath, name);
         if (ret < 0) {
             goto err_out;
         }
-        vbuffer = local_mapped_attr_path(ctx, oldpath->data);
-        vbuffer1 = local_mapped_attr_path(ctx, newpath.data);
-        ret = link(vbuffer, vbuffer1);
-        g_free(vbuffer);
-        g_free(vbuffer1);
-        if (ret < 0 && errno != ENOENT) {
-            goto err_out;
-        }
     }
     goto out;
 




reply via email to

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