[virt-tools-list] [PATCH virt-viewer] file: add delete-this-file option

Marc-André Lureau marcandre.lureau at gmail.com
Tue Apr 30 00:33:12 UTC 2013


In case the virt-viewer setting file is meant to temporary, you may use
the delete-this-file=1 option to ask the client to remove it, once it
has been read. This is useful for example in ovirt context, where
connection settings file are generated and can't be reused.
---
 src/virt-viewer-file.c | 32 ++++++++++++++++++++++++++++++++
 src/virt-viewer-file.h |  2 ++
 2 files changed, 34 insertions(+)

diff --git a/src/virt-viewer-file.c b/src/virt-viewer-file.c
index 12b8c31..3636c2e 100644
--- a/src/virt-viewer-file.c
+++ b/src/virt-viewer-file.c
@@ -22,6 +22,7 @@
 #include <config.h>
 
 #include <glib/gi18n.h>
+#include <glib/gstdio.h>
 
 #include "virt-viewer-util.h"
 #include "virt-viewer-file.h"
@@ -61,6 +62,7 @@
  * - enable-usb-autoshare: int
  * - usb-filter: string
  * - secure-channels: string list
+ * - delete-this-file: int (0 or 1 atm)
  *
  * (the file can be extended with extra groups or keys, which should
  * be prefixed with x- to avoid later conflicts)
@@ -101,6 +103,7 @@ enum  {
     PROP_PROXY,
     PROP_VERSION,
     PROP_SECURE_CHANNELS,
+    PROP_DELETE_THIS_FILE,
 };
 
 VirtViewerFile*
@@ -131,6 +134,12 @@ virt_viewer_file_new(const gchar* location, GError** error)
         return NULL;
     }
 
+    if (virt_viewer_file_get_delete_this_file(self) &&
+        !g_getenv("VIRT_VIEWER_KEEP_FILE")) {
+        if (g_unlink(location) != 0)
+            g_warning("failed to remove %s", location);
+    }
+
     return self;
 }
 
@@ -479,6 +488,19 @@ virt_viewer_file_set_enable_usbredir(VirtViewerFile* self, gint value)
 }
 
 gint
+virt_viewer_file_get_delete_this_file(VirtViewerFile* self)
+{
+    return virt_viewer_file_get_int(self, "delete-this-file");
+}
+
+void
+virt_viewer_file_set_delete_this_file(VirtViewerFile* self, gint value)
+{
+    virt_viewer_file_set_int(self, "delete-this-file", !!value);
+    g_object_notify(G_OBJECT(self), "delete-this-file");
+}
+
+gint
 virt_viewer_file_get_color_depth(VirtViewerFile* self)
 {
     return virt_viewer_file_get_int(self, "color-depth");
@@ -709,6 +731,9 @@ virt_viewer_file_set_property(GObject* object, guint property_id,
         strv = g_value_get_boxed(value);
         virt_viewer_file_set_secure_channels(self, (const gchar* const*)strv, g_strv_length(strv));
         break;
+    case PROP_DELETE_THIS_FILE:
+        virt_viewer_file_set_delete_this_file(self, g_value_get_int(value));
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
         break;
@@ -791,6 +816,9 @@ virt_viewer_file_get_property(GObject* object, guint property_id,
     case PROP_SECURE_CHANNELS:
         g_value_take_boxed(value, virt_viewer_file_get_secure_channels(self, NULL));
         break;
+    case PROP_DELETE_THIS_FILE:
+        g_value_set_int(value, virt_viewer_file_get_delete_this_file(self));
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
         break;
@@ -917,4 +945,8 @@ virt_viewer_file_class_init(VirtViewerFileClass* klass)
     g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_SECURE_CHANNELS,
         g_param_spec_boxed("secure-channels", "secure-channels", "secure-channels", G_TYPE_STRV,
                            G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
+
+    g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_DELETE_THIS_FILE,
+        g_param_spec_int("delete-this-file", "delete-this-file", "delete-this-file", 0, 1, 0,
+                         G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
 }
diff --git a/src/virt-viewer-file.h b/src/virt-viewer-file.h
index 7c48856..8665070 100644
--- a/src/virt-viewer-file.h
+++ b/src/virt-viewer-file.h
@@ -104,6 +104,8 @@ gchar* virt_viewer_file_get_version(VirtViewerFile* self);
 void virt_viewer_file_set_version(VirtViewerFile* self, const gchar* value);
 gchar** virt_viewer_file_get_secure_channels(VirtViewerFile* self, gsize* length);
 void virt_viewer_file_set_secure_channels(VirtViewerFile* self, const gchar* const* value, gsize length);
+gint virt_viewer_file_get_delete_this_file(VirtViewerFile* self);
+void virt_viewer_file_set_delete_this_file(VirtViewerFile* self, gint value);
 
 G_END_DECLS
 
-- 
1.8.2.1.342.gfa7285d




More information about the virt-tools-list mailing list