From: Ján Tomko Date: Wed, 28 Feb 2024 15:31:35 +0000 (+0100) Subject: vsh: introduce vshEditString X-Git-Tag: v10.2.0-rc1~94 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47a8f6a99b642f98d3706f71fedd4b19d8c9eefb;p=thirdparty%2Flibvirt.git vsh: introduce vshEditString Remove some code repetition between desc and net-desc commands. Signed-off-by: Ján Tomko Reviewed-by: Michal Privoznik --- diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 2e9510983c..c134208fd4 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..4fe4d9166f 100644 --- a/tools/vsh.c +++ b/tools/vsh.c @@ -2506,6 +2506,35 @@ 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 */