aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/dix/inpututils.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-10-16 11:30:08 +0200
committermarha <marha@users.sourceforge.net>2013-10-16 11:30:08 +0200
commit56e12b1310b1b52d00bc27e919d915255af5bf03 (patch)
tree19379a18fe9a678a109397837339820892101e4b /xorg-server/dix/inpututils.c
parentc5883f8af060c0a300a29e732e8bb893bc8e0eca (diff)
parent9e23b44bfe1e6e85231b1c07d945cadf0c868648 (diff)
downloadvcxsrv-56e12b1310b1b52d00bc27e919d915255af5bf03.tar.gz
vcxsrv-56e12b1310b1b52d00bc27e919d915255af5bf03.tar.bz2
vcxsrv-56e12b1310b1b52d00bc27e919d915255af5bf03.zip
Merge remote-tracking branch 'origin/released'
* origin/released: fontconfig libxcb libxcb/xcb-proto xserver mesa pixman xkbcomp git update 16 oct 2013 Conflicts: mesalib/src/mesa/drivers/dri/common/drisw_util.c pixman/pixman/pixman-mmx.c
Diffstat (limited to 'xorg-server/dix/inpututils.c')
-rw-r--r--xorg-server/dix/inpututils.c30
1 files changed, 13 insertions, 17 deletions
diff --git a/xorg-server/dix/inpututils.c b/xorg-server/dix/inpututils.c
index c27799030..3098cdb0b 100644
--- a/xorg-server/dix/inpututils.c
+++ b/xorg-server/dix/inpututils.c
@@ -960,8 +960,15 @@ XI2Mask *
xi2mask_new_with_size(size_t nmasks, size_t size)
{
int i;
+ int alloc_size;
+ unsigned char *cursor;
+ XI2Mask *mask;
- XI2Mask *mask = calloc(1, sizeof(*mask));
+ alloc_size = sizeof(struct _XI2Mask)
+ + nmasks * sizeof(unsigned char *)
+ + nmasks * size;
+
+ mask = calloc(1, alloc_size);
if (!mask)
return NULL;
@@ -969,20 +976,14 @@ xi2mask_new_with_size(size_t nmasks, size_t size)
mask->nmasks = nmasks;
mask->mask_size = size;
- mask->masks = calloc(mask->nmasks, sizeof(*mask->masks));
- if (!mask->masks)
- goto unwind;
+ mask->masks = (unsigned char **)(mask + 1);
+ cursor = (unsigned char *)(mask + 1) + nmasks * sizeof(unsigned char *);
- for (i = 0; i < mask->nmasks; i++) {
- mask->masks[i] = calloc(1, mask->mask_size);
- if (!mask->masks[i])
- goto unwind;
+ for (i = 0; i < nmasks; i++) {
+ mask->masks[i] = cursor;
+ cursor += size;
}
return mask;
-
- unwind:
- xi2mask_free(&mask);
- return NULL;
}
/**
@@ -1003,14 +1004,9 @@ xi2mask_new(void)
void
xi2mask_free(XI2Mask **mask)
{
- int i;
-
if (!(*mask))
return;
- for (i = 0; (*mask)->masks && i < (*mask)->nmasks; i++)
- free((*mask)->masks[i]);
- free((*mask)->masks);
free((*mask));
*mask = NULL;
}