[libvirt] [PATCH] qemu: Search binaries in PATH instead of hardcoding /usr/bin
Daniel P. Berrange
berrange at redhat.com
Fri Jan 22 15:04:56 UTC 2010
On Wed, Jan 20, 2010 at 02:46:10AM +0100, Matthias Bolte wrote:
> @@ -792,16 +797,30 @@ qemudCapsInitGuest(virCapsPtr caps,
> */
> if (STREQ(info->arch, hostmachine) ||
> (STREQ(hostmachine, "x86_64") && STREQ(info->arch, "i686"))) {
> - const char *const kvmbins[] = { "/usr/bin/qemu-kvm", /* Fedora */
> - "/usr/bin/kvm" }; /* Upstream .spec */
> + if (access("/dev/kvm", F_OK) == 0) {
> + const char *const kvmbins[] = { "qemu-kvm", /* Fedora */
> + "kvm" }; /* Upstream .spec */
> +
> + for (i = 0; i < ARRAY_CARDINALITY(kvmbins); ++i) {
> + kvmbin = virFindFileInPath(kvmbins[i]);
> +
> + if (kvmbin == NULL || access(kvmbin, X_OK) != 0) {
> + VIR_FREE(kvmbin);
> + continue;
> + }
>
> - for (i = 0; i < ARRAY_CARDINALITY(kvmbins); ++i) {
> - if (access(kvmbins[i], X_OK) == 0 &&
> - access("/dev/kvm", F_OK) == 0) {
> haskvm = 1;
> - kvmbin = kvmbins[i];
> - if (!binary)
> - binary = kvmbin;
> +
> + if (binary == NULL) {
> + binary = strdup(kvmbin);
Why does this need to strdup(kvmbin), when virFindFileInPath() is
already returning a newly allocated string ? Seems like we could
just avoid that
> +
> + if (binary == NULL) {
> + virReportOOMError(NULL);
> + VIR_FREE(kvmbin);
> + return -1;
> + }
> + }
> +
> break;
> }
I think this loop is also leaking 'kvmbin', since it just
overrwrites 'kvmbin' on each iteration, the final cleanup
code will only free the last one that was allocated
> - return -1;
> + goto error;
> }
> }
>
> + VIR_FREE(binary);
> + VIR_FREE(kvmbin);
> +
> return 0;
> +
> +no_memory:
> + virReportOOMError(NULL);
> +
> +error:
> + VIR_FREE(binary);
> + VIR_FREE(kvmbin);
> + virCapabilitiesFreeMachines(machines, nmachines);
> +
> + return -1;
> }
>
Generally the patch looks OK though
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list