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?
This commit is contained in:
parent
66f8001b61
commit
7018f28040
|
@ -1730,9 +1730,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
else {
|
else {
|
||||||
if (dst->geom->sz_shapes) {
|
if (dst->geom->sz_shapes) {
|
||||||
xfree(dst->geom->shapes);
|
xfree(dst->geom->shapes);
|
||||||
dst->geom->shapes = NULL;
|
|
||||||
}
|
}
|
||||||
|
dst->geom->shapes = NULL;
|
||||||
dst->geom->num_shapes = 0;
|
dst->geom->num_shapes = 0;
|
||||||
dst->geom->sz_shapes = 0;
|
dst->geom->sz_shapes = 0;
|
||||||
}
|
}
|
||||||
|
@ -1781,6 +1780,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
}
|
}
|
||||||
|
|
||||||
dst->geom->num_sections = 0;
|
dst->geom->num_sections = 0;
|
||||||
|
dst->geom->sections = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src->geom->num_sections) {
|
if (src->geom->num_sections) {
|
||||||
|
@ -1792,6 +1792,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
tmp = xalloc(src->geom->num_sections * sizeof(XkbSectionRec));
|
tmp = xalloc(src->geom->num_sections * sizeof(XkbSectionRec));
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
memset(tmp, 0, src->geom->num_sections * sizeof(XkbSectionRec));
|
||||||
dst->geom->sections = tmp;
|
dst->geom->sections = tmp;
|
||||||
dst->geom->num_sections = src->geom->num_sections;
|
dst->geom->num_sections = src->geom->num_sections;
|
||||||
|
|
||||||
|
@ -1828,6 +1829,10 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
dsection->doodads = tmp;
|
dsection->doodads = tmp;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
dsection->doodads = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (k = 0,
|
for (k = 0,
|
||||||
sdoodad = ssection->doodads,
|
sdoodad = ssection->doodads,
|
||||||
ddoodad = dsection->doodads;
|
ddoodad = dsection->doodads;
|
||||||
|
@ -1855,9 +1860,9 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
else {
|
else {
|
||||||
if (dst->geom->sz_sections) {
|
if (dst->geom->sz_sections) {
|
||||||
xfree(dst->geom->sections);
|
xfree(dst->geom->sections);
|
||||||
dst->geom->sections = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dst->geom->sections = NULL;
|
||||||
dst->geom->num_sections = 0;
|
dst->geom->num_sections = 0;
|
||||||
dst->geom->sz_sections = 0;
|
dst->geom->sz_sections = 0;
|
||||||
}
|
}
|
||||||
|
@ -1886,6 +1891,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
dst->geom->num_doodads = 0;
|
||||||
|
dst->geom->doodads = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src->geom->num_doodads) {
|
if (src->geom->num_doodads) {
|
||||||
|
@ -1898,7 +1905,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
sizeof(XkbDoodadRec));
|
sizeof(XkbDoodadRec));
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return FALSE;
|
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->doodads = tmp;
|
||||||
|
|
||||||
dst->geom->sz_doodads = src->geom->num_doodads;
|
dst->geom->sz_doodads = src->geom->num_doodads;
|
||||||
|
@ -1927,9 +1934,9 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
else {
|
else {
|
||||||
if (dst->geom->sz_doodads) {
|
if (dst->geom->sz_doodads) {
|
||||||
xfree(dst->geom->doodads);
|
xfree(dst->geom->doodads);
|
||||||
dst->geom->doodads = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dst->geom->doodads = NULL;
|
||||||
dst->geom->num_doodads = 0;
|
dst->geom->num_doodads = 0;
|
||||||
dst->geom->sz_doodads = 0;
|
dst->geom->sz_doodads = 0;
|
||||||
}
|
}
|
||||||
|
@ -1957,10 +1964,10 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
dst->geom->num_key_aliases = dst->geom->sz_key_aliases;
|
dst->geom->num_key_aliases = dst->geom->sz_key_aliases;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (dst->geom->sz_key_aliases && dst->geom->key_aliases) {
|
if (dst->geom->key_aliases) {
|
||||||
xfree(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->num_key_aliases = 0;
|
||||||
dst->geom->sz_key_aliases = 0;
|
dst->geom->sz_key_aliases = 0;
|
||||||
}
|
}
|
||||||
|
@ -1991,8 +1998,8 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
|
||||||
else {
|
else {
|
||||||
if (dst->geom->label_font) {
|
if (dst->geom->label_font) {
|
||||||
xfree(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->label_color = NULL;
|
||||||
dst->geom->base_color = NULL;
|
dst->geom->base_color = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue