[libvirt] [PATCH 2/4 V4] util: add virtkey

Eric Blake eblake at redhat.com
Wed Jul 20 03:24:21 UTC 2011


On 07/19/2011 09:04 AM, Daniel P. Berrange wrote:
> On Thu, Jul 14, 2011 at 11:32:16AM +0800, Lai Jiangshan wrote:
>> Add virtkey lib for usage-improvment and keycode translating.
>> Add 4 internal API for the aim
>>
>> +
>> +struct keycode {

>> +extern struct keycode virtKeycodes[];
>> +extern int virtKeycodesSize;
>
> None of these three declarations need to be in the header file
> since they are private impl details of the source fiel.

Well, as written in this patch, they are used in both virtkey.c, and by 
the generated virkeymaps.c.  But, a better idea would be:

virkey.h: public functions (virKeycodeSetToString, 
virKeycodeSetFromString [both from VIR_ENUM_DECL], 
virKeycodeValueFromString, virKeycodeValueTranslate)

virkey.c:
#include "virkey.h"
#define VIR_KEY_INTERNAL
struct keycode {} ...
#include "virkeymap.h"
implement the public functions

virkeymap-gen.pl: generates virkeymap.h

virkeymap.h:
#ifndef VIR_KEY_INTERNAL
# error do not use this; it is not a public header
#endif
static struct keycode keycodes[] = {
...
}

that way, the generated file is not a separate c file, but a chunk of 
included code to complete the single virkey.c.  See for example how 
remote_driver.c does a #include "remote_client_bodies.h" in the middle 
of the file, and make sure that the Makefile.am snippets for virkeymap.h 
(making sure it is in EXTRA_DIST and so forth) resemble the rules for 
remote_client_bodies.h.

I was debating about whipping this series into shape according to Dan's 
review comments, since you got acks on the other 3 out of 4, but the 
changes to patch 2 are looking to be significant enough to need a v5.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list