[libvirt] [PATCH 2/2] virsh: Implement new table API for virsh list
Michal Privoznik
mprivozn at redhat.com
Fri Aug 10 13:40:03 UTC 2018
On 08/10/2018 11:11 AM, Simon Kobyda wrote:
> Instead of printing it straight in virsh, it creates table struct
> which is filled with header and rows(domains). It allows us to know
> more about table before printing to calculate alignment right.
>
> Signed-off-by: Simon Kobyda <skobyda at redhat.com>
> ---
> tools/virsh-domain-monitor.c | 39 ++++++++++++++++++------------------
> 1 file changed, 20 insertions(+), 19 deletions(-)
>
> diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c
> index b9b4f9739b..f6842877f5 100644
> --- a/tools/virsh-domain-monitor.c
> +++ b/tools/virsh-domain-monitor.c
> @@ -39,6 +39,7 @@
> #include "virmacaddr.h"
> #include "virxml.h"
> #include "virstring.h"
> +#include "vsh-table.h"
>
> VIR_ENUM_DECL(virshDomainIOError)
> VIR_ENUM_IMPL(virshDomainIOError,
> @@ -1901,6 +1902,7 @@ cmdList(vshControl *ctl, const vshCmd *cmd)
> char id_buf[INT_BUFSIZE_BOUND(unsigned int)];
> unsigned int id;
> unsigned int flags = VIR_CONNECT_LIST_DOMAINS_ACTIVE;
> + vshTablePtr table = NULL;
>
> /* construct filter flags */
> if (vshCommandOptBool(cmd, "inactive") ||
> @@ -1940,15 +1942,12 @@ cmdList(vshControl *ctl, const vshCmd *cmd)
> /* print table header in legacy mode */
> if (optTable) {
> if (optTitle)
> - vshPrintExtra(ctl, " %-5s %-30s %-10s %-20s\n%s\n",
> - _("Id"), _("Name"), _("State"), _("Title"),
> - "-----------------------------------------"
> - "-----------------------------------------");
> + table = vshTableNew("Id", "Name", "State", "Title", NULL);
> else
> - vshPrintExtra(ctl, " %-5s %-30s %s\n%s\n",
> - _("Id"), _("Name"), _("State"),
> - "-----------------------------------------"
> - "-----------");
> + table = vshTableNew("Id", "Name", "State", NULL);
> +
> + if (!table)
> + goto cleanup;
> }
>
> for (i = 0; i < list->ndomains; i++) {
> @@ -1973,20 +1972,18 @@ cmdList(vshControl *ctl, const vshCmd *cmd)
> if (optTitle) {
> if (!(title = virshGetDomainDescription(ctl, dom, true, 0)))
> goto cleanup;
> -
> - vshPrint(ctl, " %-5s %-30s %-10s %-20s\n", id_buf,
> - virDomainGetName(dom),
> - state == -2 ? _("saved")
> - : virshDomainStateToString(state),
> - title);
> -
> + vshTableRowAppend(table, id_buf, virDomainGetName(dom),
> + state == -2 ? _("saved")
> + : virshDomainStateToString(state),
> + title, NULL);
You need to check for vshTableRowAppend() retval here.
> VIR_FREE(title);
> } else {
> - vshPrint(ctl, " %-5s %-30s %s\n", id_buf,
> - virDomainGetName(dom),
> - state == -2 ? _("saved")
> - : virshDomainStateToString(state));
> + vshTableRowAppend(table, id_buf, virDomainGetName(dom),
> + state == -2 ? _("saved")
> + : virshDomainStateToString(state),
> + NULL);
Another approach might be to initialize title to NULL, and then set it
iff optTitle and then call:
vshTableRowAppend(table, id_buf, virDomainGetName(dom),
state == -2 ? _("saved")
: virshDomainStateToString(state),
title, NULL);
Anyway, the rest looks good.
Michal
More information about the libvir-list
mailing list