[libvirt PATCH 3/3] vsh: introduce vshEditString

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

 



Remove some code repetition between desc and net-desc commands.

Signed-off-by: Ján Tomko <jtomko@xxxxxxxxxx>
---
 tools/virsh-domain.c  | 20 +-------------------
 tools/virsh-network.c | 19 +------------------
 tools/vsh.c           | 27 +++++++++++++++++++++++++++
 tools/vsh.h           |  1 +
 4 files changed, 30 insertions(+), 37 deletions(-)

diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 7a87da1cbb..6482daebaf 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -8508,29 +8508,11 @@ cmdDesc(vshControl *ctl, const vshCmd *cmd)
             descArg = g_strdup(descDom);
 
         if (edit) {
-            g_autoptr(vshTempFile) tmp = NULL;
             g_autofree char *desc_edited = NULL;
-            char *tmpstr;
 
-            /* Create and open the temporary file. */
-            if (!(tmp = vshEditWriteToTempFile(ctl, descArg)))
+            if (vshEditString(ctl, &desc_edited, descArg) < 0)
                 return false;
 
-            /* Start the editor. */
-            if (vshEditFile(ctl, tmp) == -1)
-                return false;
-
-            /* Read back the edited file. */
-            if (!(desc_edited = vshEditReadBackFile(ctl, tmp)))
-                return false;
-
-            /* strip a possible newline at the end of file; some
-             * editors enforce a newline, this makes editing
-             * more convenient */
-            if ((tmpstr = strrchr(desc_edited, '\n')) &&
-                *(tmpstr+1) == '\0')
-                *tmpstr = '\0';
-
             /* Compare original XML with edited.  Has it changed at all? */
             if (STREQ(descDom, desc_edited)) {
                 if (title)
diff --git a/tools/virsh-network.c b/tools/virsh-network.c
index c676fc603c..399035f8cf 100644
--- a/tools/virsh-network.c
+++ b/tools/virsh-network.c
@@ -462,29 +462,12 @@ cmdNetworkDesc(vshControl *ctl, const vshCmd *cmd)
             descArg = g_strdup(descNet);
 
         if (edit) {
-            g_autoptr(vshTempFile) tmp = NULL;
             g_autofree char *desc_edited = NULL;
-            char *tmpstr;
 
             /* Create and open the temporary file. */
-            if (!(tmp = vshEditWriteToTempFile(ctl, descArg)))
+            if (vshEditString(ctl, &desc_edited, descArg) < 0)
                 return false;
 
-            /* Start the editor. */
-            if (vshEditFile(ctl, tmp) == -1)
-                return false;
-
-            /* Read back the edited file. */
-            if (!(desc_edited = vshEditReadBackFile(ctl, tmp)))
-                return false;
-
-            /* strip a possible newline at the end of file; some
-             * editors enforce a newline, this makes editing the title
-             * more convenient */
-            if ((tmpstr = strrchr(desc_edited, '\n')) &&
-                *(tmpstr+1) == '\0')
-                *tmpstr = '\0';
-
             /* Compare original XML with edited.  Has it changed at all? */
             if (STREQ(descNet, desc_edited)) {
                 if (title)
diff --git a/tools/vsh.c b/tools/vsh.c
index 65deaa77e8..0543ba299f 100644
--- a/tools/vsh.c
+++ b/tools/vsh.c
@@ -2506,6 +2506,33 @@ vshEditReadBackFile(vshControl *ctl, const char *filename)
     return ret;
 }
 
+int
+vshEditString(vshControl *ctl, char **output, const char *string)
+{
+    g_autoptr(vshTempFile) tmp = NULL;
+    char *tmpstr;
+
+    /* Create and open the temporary file. */
+    if (!(tmp = vshEditWriteToTempFile(ctl, string)))
+        return -1;
+
+    /* Start the editor. */
+    if (vshEditFile(ctl, tmp) == -1)
+        return -1;
+
+    /* Read back the edited file. */
+    if (!(*output = vshEditReadBackFile(ctl, tmp)))
+        return -1;
+
+    /* strip a possible newline at the end of file; some
+     * editors enforce a newline, this makes editing
+     * more convenient */
+    if ((tmpstr = strrchr(*output, '\n')) &&
+        *(tmpstr+1) == '\0')
+        *tmpstr = '\0';
+
+    return 0;
+}
 
 /* Tree listing helpers.  */
 
diff --git a/tools/vsh.h b/tools/vsh.h
index 2a1be29b1c..6f8e3895b7 100644
--- a/tools/vsh.h
+++ b/tools/vsh.h
@@ -350,6 +350,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(vshTempFile, vshEditUnlinkTempfile);
 char *vshEditWriteToTempFile(vshControl *ctl, const char *doc);
 int vshEditFile(vshControl *ctl, const char *filename);
 char *vshEditReadBackFile(vshControl *ctl, const char *filename);
+int vshEditString(vshControl *ctl, char **output, const char *string);
 int vshAskReedit(vshControl *ctl, const char *msg, bool relax_avail);
 
 /* terminal modifications */
-- 
2.43.2
_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux