
On 08/26/2013 06:36 AM, Tomas Meszaros wrote:
vshSuspendTargetCompleter returns targets available for suspend.
This completer can be used for the command option completion (for dompmsuspend, etc.).
virsh> dompmsuspend --target <TAB> mem disk hybrid virsh> dompmsuspend --target h<TAB> virsh> dompmsuspend --target hybrid --- v2 * label cleanup renamed to error * vshSuspendTargetCompleter added to opts_dom_pm_suspend
v3 * removed useless if * used virStringFreeList() instead of iteration
tools/virsh-domain.c | 3 ++- tools/virsh.c | 23 +++++++++++++++++++++++ tools/virsh.h | 1 + 3 files changed, 26 insertions(+), 1 deletion(-)
This patch looks pretty decent, especially since it is installed as a per-option handler.
+char ** +vshSuspendTargetCompleter(unsigned int unused_flags ATTRIBUTE_UNUSED) +{ + const char *targets[] = {"mem", "disk", "hybrid"}; + const unsigned int targets_size = ARRAY_CARDINALITY(targets); + char **names = NULL; + size_t i; + + names = vshMalloc(NULL, sizeof(char *) * (targets_size + 1)); + + for (i = 0; i < targets_size; i++) { + if (VIR_STRDUP(names[i], targets[i]) < 0) + goto error; + } + + names[i] = NULL; + return names;
Call me a hacker, but what's wrong with this equivalent implementation done by reusing existing code: char ** vshSuspendTargetCompleter(unsigned int ignored ATTRIBUTE_UNUSED) { return virStringSplit("mem disk hybrid", " ", 0); } -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org