xkb: when copying the keymap, make sure the structs default to 0/NULL.

It actually does help if a pointer is NULL rather than pointing to nirvana
when you're trying to free it lateron. Who would have thought?
(cherry picked from commit 7a97ca667405a42d008265c3a870210cc1da97dd)
(cherry picked from commit 0b0a097973)
This commit is contained in:
Peter Hutterer 2008-02-07 15:48:04 +10:30 committed by Julien Cristau
parent 4e5cf76eca
commit ddcca23a81

View File

@ -1707,9 +1707,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
else {
if (dst->geom->sz_shapes) {
xfree(dst->geom->shapes);
dst->geom->shapes = NULL;
}
dst->geom->shapes = NULL;
dst->geom->num_shapes = 0;
dst->geom->sz_shapes = 0;
}
@ -1758,6 +1757,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
}
dst->geom->num_sections = 0;
dst->geom->sections = NULL;
}
if (src->geom->num_sections) {
@ -1769,6 +1769,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
tmp = xalloc(src->geom->num_sections * sizeof(XkbSectionRec));
if (!tmp)
return FALSE;
memset(tmp, 0, src->geom->num_sections * sizeof(XkbSectionRec));
dst->geom->sections = tmp;
dst->geom->num_sections = src->geom->num_sections;
@ -1804,6 +1805,10 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
return FALSE;
dsection->doodads = tmp;
}
else {
dsection->doodads = NULL;
}
for (k = 0,
sdoodad = ssection->doodads,
ddoodad = dsection->doodads;
@ -1831,9 +1836,9 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
else {
if (dst->geom->sz_sections) {
xfree(dst->geom->sections);
dst->geom->sections = NULL;
}
dst->geom->sections = NULL;
dst->geom->num_sections = 0;
dst->geom->sz_sections = 0;
}
@ -1862,6 +1867,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
}
}
}
dst->geom->num_doodads = 0;
dst->geom->doodads = NULL;
}
if (src->geom->num_doodads) {
@ -1874,7 +1881,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
sizeof(XkbDoodadRec));
if (!tmp)
return FALSE;
bzero(tmp, src->geom->num_doodads * sizeof(XkbDoodadRec));
memset(tmp, 0, src->geom->num_doodads * sizeof(XkbDoodadRec));
dst->geom->doodads = tmp;
dst->geom->sz_doodads = src->geom->num_doodads;
@ -1903,9 +1910,9 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
else {
if (dst->geom->sz_doodads) {
xfree(dst->geom->doodads);
dst->geom->doodads = NULL;
}
dst->geom->doodads = NULL;
dst->geom->num_doodads = 0;
dst->geom->sz_doodads = 0;
}
@ -1933,10 +1940,10 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
dst->geom->num_key_aliases = dst->geom->sz_key_aliases;
}
else {
if (dst->geom->sz_key_aliases && dst->geom->key_aliases) {
if (dst->geom->key_aliases) {
xfree(dst->geom->key_aliases);
dst->geom->key_aliases = NULL;
}
dst->geom->key_aliases = NULL;
dst->geom->num_key_aliases = 0;
dst->geom->sz_key_aliases = 0;
}
@ -1967,8 +1974,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
else {
if (dst->geom->label_font) {
xfree(dst->geom->label_font);
dst->geom->label_font = NULL;
}
dst->geom->label_font = NULL;
dst->geom->label_color = NULL;
dst->geom->base_color = NULL;
}