input: un-constify InputAttributes

Introduced in fecc7eb1cf and reverts most of
that but it's helpfully mixed with other stuff.

InputAttributes are not const, they're strdup'd everywhere but the test code
and freed properly. Revert the const char changes and fix the test up instead.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
Peter Hutterer 2014-01-30 08:50:06 +10:00
parent 2fc38d1e29
commit ce3df579e3
4 changed files with 51 additions and 47 deletions

View File

@ -242,16 +242,16 @@ device_added(struct udev_device *udev_device)
free(config_info);
input_option_free_list(&input_options);
free((void *) attrs.usb_id);
free((void *) attrs.pnp_id);
free((void *) attrs.product);
free((void *) attrs.device);
free((void *) attrs.vendor);
free(attrs.usb_id);
free(attrs.pnp_id);
free(attrs.product);
free(attrs.device);
free(attrs.vendor);
if (attrs.tags) {
const char **tag = attrs.tags;
char **tag = attrs.tags;
while (*tag) {
free((void *) *tag);
free(*tag);
tag++;
}
free(attrs.tags);

View File

@ -351,7 +351,7 @@ DuplicateInputAttributes(InputAttributes * attrs)
{
InputAttributes *new_attr;
int ntags = 0;
const char **tags, **new_tags;
char **tags, **new_tags;
if (!attrs)
return NULL;
@ -403,20 +403,20 @@ DuplicateInputAttributes(InputAttributes * attrs)
void
FreeInputAttributes(InputAttributes * attrs)
{
const char **tags;
char **tags;
if (!attrs)
return;
free((void *) attrs->product);
free((void *) attrs->vendor);
free((void *) attrs->device);
free((void *) attrs->pnp_id);
free((void *) attrs->usb_id);
free(attrs->product);
free(attrs->vendor);
free(attrs->device);
free(attrs->pnp_id);
free(attrs->usb_id);
if ((tags = attrs->tags))
while (*tags)
free((void *) *tags++);
free(*tags++);
free(attrs->tags);
free(attrs);

View File

@ -221,12 +221,12 @@ typedef struct _InputOption InputOption;
typedef struct _XI2Mask XI2Mask;
typedef struct _InputAttributes {
const char *product;
const char *vendor;
const char *device;
const char *pnp_id;
const char *usb_id;
const char **tags; /* null-terminated */
char *product;
char *vendor;
char *device;
char *pnp_id;
char *usb_id;
char **tags; /* null-terminated */
uint32_t flags;
} InputAttributes;

View File

@ -1101,7 +1101,7 @@ xi_unregister_handlers(void)
static void
cmp_attr_fields(InputAttributes * attr1, InputAttributes * attr2)
{
const char **tags1, **tags2;
char **tags1, **tags2;
assert(attr1 && attr2);
assert(attr1 != attr2);
@ -1180,50 +1180,54 @@ cmp_attr_fields(InputAttributes * attr1, InputAttributes * attr2)
static void
dix_input_attributes(void)
{
InputAttributes orig = { 0 };
InputAttributes *orig;
InputAttributes *new;
const char *tags[4] = { "tag1", "tag2", "tag2", NULL };
new = DuplicateInputAttributes(NULL);
assert(!new);
new = DuplicateInputAttributes(&orig);
assert(memcmp(&orig, new, sizeof(InputAttributes)) == 0);
orig = calloc(1, sizeof(InputAttributes));
assert(orig);
orig.product = "product name";
new = DuplicateInputAttributes(&orig);
cmp_attr_fields(&orig, new);
new = DuplicateInputAttributes(orig);
assert(memcmp(orig, new, sizeof(InputAttributes)) == 0);
orig->product = xnfstrdup("product name");
new = DuplicateInputAttributes(orig);
cmp_attr_fields(orig, new);
FreeInputAttributes(new);
orig.vendor = "vendor name";
new = DuplicateInputAttributes(&orig);
cmp_attr_fields(&orig, new);
orig->vendor = xnfstrdup("vendor name");
new = DuplicateInputAttributes(orig);
cmp_attr_fields(orig, new);
FreeInputAttributes(new);
orig.device = "device path";
new = DuplicateInputAttributes(&orig);
cmp_attr_fields(&orig, new);
orig->device = xnfstrdup("device path");
new = DuplicateInputAttributes(orig);
cmp_attr_fields(orig, new);
FreeInputAttributes(new);
orig.pnp_id = "PnPID";
new = DuplicateInputAttributes(&orig);
cmp_attr_fields(&orig, new);
orig->pnp_id = xnfstrdup("PnPID");
new = DuplicateInputAttributes(orig);
cmp_attr_fields(orig, new);
FreeInputAttributes(new);
orig.usb_id = "USBID";
new = DuplicateInputAttributes(&orig);
cmp_attr_fields(&orig, new);
orig->usb_id = xnfstrdup("USBID");
new = DuplicateInputAttributes(orig);
cmp_attr_fields(orig, new);
FreeInputAttributes(new);
orig.flags = 0xF0;
new = DuplicateInputAttributes(&orig);
cmp_attr_fields(&orig, new);
orig->flags = 0xF0;
new = DuplicateInputAttributes(orig);
cmp_attr_fields(orig, new);
FreeInputAttributes(new);
orig.tags = tags;
new = DuplicateInputAttributes(&orig);
cmp_attr_fields(&orig, new);
orig->tags = xstrtokenize("tag1 tag2 tag3", " ");
new = DuplicateInputAttributes(orig);
cmp_attr_fields(orig, new);
FreeInputAttributes(new);
FreeInputAttributes(orig);
}
static void