
On 06/16/2010 02:47 PM, Eric Blake wrote:
On 06/16/2010 01:22 PM, Eduardo Otubo wrote:
Fixing all pointed in the previous email. Thanks for all the comments.
@@ -488,11 +498,45 @@ phypExec(LIBSSH2_SESSION * session, char *cmd, int *exit_status, return virBufferContentAndReset(&tex_ret); }
+static char * +hmc_helper(int system_type, const char *managed_system) +{ + char *unsafe = NULL; + if (system_type == HMC) + virAsprintf(&unsafe, "-m %s", managed_system); + else + unsafe[0] = 0; + return unsafe;
Unfortunately, for the IVM case, this dereferences NULL :(
And it has the problem that it is not thread-safe.
I'm going to try my hand at tweaking this patch to use virBuffer instead, but we are getting closer...
Here's what I'm thinking, at which point we don't need hmc_helper after all: diff --git i/src/phyp/phyp_driver.c w/src/phyp/phyp_driver.c index e111a47..1aea417 100644 --- i/src/phyp/phyp_driver.c +++ w/src/phyp/phyp_driver.c @@ -542,13 +542,18 @@ phypGetLparID(LIBSSH2_SESSION * session, const char *managed_system, char *char_ptr; char *cmd = NULL; char *ret = NULL; + virBuffer buf = VIR_BUFFER_INITIALIZER; - if (virAsprintf(&cmd, - "lssyscfg -r lpar %s --filter lpar_names=%s -F lpar_id", - hmc_helper(system_type, managed_system), name) < 0) { + virBufferAddLit(&buf, "lssyscfg -r lpar"); + if (system_type == HMC) + virBufferVSprintf(&buf, " -m %s", managed_system); + virBufferVSprintf(&buf, " --filter lpar_names=%s -F lpar_id", name); + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); virReportOOMError(); - goto err; + return -1; } + cmd = virBufferContentAndReset(&buf); ret = phypExec(session, cmd, &exit_status, conn); -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org