[libvirt-users] Where does "cmd" initailize in qemu_command.c?

Eric Blake eblake at redhat.com
Fri Aug 17 13:02:05 UTC 2012


On 08/16/2012 10:52 AM, He Xin wrote:
> 
> In qemu_command.c, there is a function call "cmd =
> virCommandNewArgList(emulator, "-S", NULL);", which initializes pointer
> "cmd". However, I don't find the initial value of "cmd->args", which
> represents the input of virFindFileInPath in Util.c. Through
> virFindFileInPath, one could find a requested executable file in the PATH
> env to start specified hypervisors. 
> 
> So could you please tell me what the value of args[0] is? Or where does
> cmd->args initialize?

cmd->args is initialized by the constructor - in this case, you are
using the virCommandNewArgList constructor, so cmd->args[0] will be a
copy of your 'emulator' parameter.  So, you merely need trace back up
the call stack to see where 'emulator' was first determined (hint: it
came from virDomainDefPtr def->emulator, which was populated during
virDomainDefParseXML to either match the explicit <emulator> tag in your
XML or fall back to the default stored in the virCapsPtr caps structure).

>          In qemu_driver.c, there is a function call "vm =
> virDomainFindByUUID(&driver->domains, dom->uuid);", whose returned value
> "vm" is important in the next functions. Then we could get the "vm"'s value
> in hash.c which is the end part to lookup domains saved in hashtable. 
> 
> May I know where does HashTable initialize? I mean where can I set the
> hashtable's values in detail, if I want to modify some values?

The &driver->domains hash table is manipulated via functions in
src/conf/domain_conf.c.

> 
>          3.
> 
>          This might be the same as question 1.
> 
>          In command.c, "execve(cmd->args[0], cmd->args, cmd->env)" is a way
> to exec command. About qemu_driver, what is the value of those three inputs?

Yes, this is the same as question 1 - these values are determined by all
the calls to the virCommand* functions acting on the cmd structure.

Your questions seem to be more of a development nature about the libvirt
source code, and less of a user nature about how to use the API in using
the libvirt as a library in your own code.  As such, you should probably
take future questions of this nature to libvir-lists at redhat.com.

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvirt-users/attachments/20120817/070ad544/attachment.sig>


More information about the libvirt-users mailing list