On 08/19/2013 08:45 AM, Michal Privoznik wrote:
On 08.08.2013 16:38, Tomas Meszaros wrote:
> Function vshDomainCompler returns domains names.
>
> Michal Privoznik recommended to add global variable __my_conn
> so we can get the list of domains from the virConnecTListAllDomains().
>
> vshReconnect() is called before the first command is executed
> in order to provide autocompletion for the very first command.
> ---
> tools/virsh.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> tools/virsh.h | 2 ++
> 2 files changed, 55 insertions(+)
>
> diff --git a/tools/virsh.c b/tools/virsh.c
> index f65dc79..af31b9a 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -88,6 +88,8 @@ static char *progname;
>
> static const vshCmdGrp cmdGroups[];
>
> +virConnectPtr *__my_conn;
> +
Sigh. Unfortunately, we can't tunnel a pointer into readline's
callbacks. While I hate global variables, this one makes sense.
Naming a variable with leading __ is not advised - too much potential
for collision with system headers. Name it vshConn or some-such name in
the vsh namespace.
> +
> + names = vshMalloc(NULL, sizeof(char *) * (ndomains + 1));
> +
> + if (!names)
> + return NULL;
if vshMalloc fails, you leak domains[].
vshMalloc cannot fail. If it returns at all, it returns a non-NULL
pointer (since it calls exit() on OOM).
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org