summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChase Douglas <chase.douglas@canonical.com>2012-02-07 15:35:03 -0800
committerChase Douglas <chase.douglas@canonical.com>2012-02-10 13:20:48 -0800
commit7bcbf8eb110b1f7c6c085d3dcd69f66b00df2b8a (patch)
tree667098e4cd37d0f4e09b0de3364fec04e8496319
parenta78d55d021c9cd3be6501760d6fca3464ea6dec8 (diff)
Allocate SynapticsPrivate.comm->hwState
This is needed for when SynapticsHwState can't be allocated on the stack. Signed-off-by: Chase Douglas <chase.douglas@canonical.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--src/alpscomm.c2
-rw-r--r--src/eventcomm.c2
-rw-r--r--src/ps2comm.c2
-rw-r--r--src/synaptics.c3
-rw-r--r--src/synproto.h2
-rw-r--r--test/eventcomm-test.c4
6 files changed, 11 insertions, 4 deletions
diff --git a/src/alpscomm.c b/src/alpscomm.c
index 7ae2da1..dbc3554 100644
--- a/src/alpscomm.c
+++ b/src/alpscomm.c
@@ -211,7 +211,7 @@ ALPSReadHwState(InputInfoPtr pInfo,
struct CommData *comm, struct SynapticsHwState *hwRet)
{
unsigned char *buf = comm->protoBuf;
- struct SynapticsHwState *hw = &(comm->hwState);
+ struct SynapticsHwState *hw = comm->hwState;
if (!ALPS_get_packet(comm, pInfo))
return FALSE;
diff --git a/src/eventcomm.c b/src/eventcomm.c
index d7d1f86..e494d4c 100644
--- a/src/eventcomm.c
+++ b/src/eventcomm.c
@@ -708,7 +708,7 @@ EventReadHwState(InputInfoPtr pInfo,
{
struct input_event ev;
Bool v;
- struct SynapticsHwState *hw = &(comm->hwState);
+ struct SynapticsHwState *hw = comm->hwState;
SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
SynapticsParameters *para = &priv->synpara;
diff --git a/src/ps2comm.c b/src/ps2comm.c
index b7995ee..74bd937 100644
--- a/src/ps2comm.c
+++ b/src/ps2comm.c
@@ -521,7 +521,7 @@ PS2ReadHwStateProto(InputInfoPtr pInfo,
struct CommData *comm, struct SynapticsHwState *hwRet)
{
unsigned char *buf = comm->protoBuf;
- struct SynapticsHwState *hw = &(comm->hwState);
+ struct SynapticsHwState *hw = comm->hwState;
SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
SynapticsParameters *para = &priv->synpara;
struct PS2SynapticsHwInfo *synhw;
diff --git a/src/synaptics.c b/src/synaptics.c
index e7deb9b..8f0ad9b 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -935,6 +935,7 @@ DeviceClose(DeviceIntPtr dev)
priv->timer = NULL;
free_shm_data(priv);
SynapticsHwStateFree(&priv->local_hw_state);
+ SynapticsHwStateFree(&priv->comm.hwState);
return RetValue;
}
@@ -1184,6 +1185,8 @@ no_touch:
if (!priv->local_hw_state)
return !Success;
+ priv->comm.hwState = SynapticsHwStateAlloc(priv);
+
if (!alloc_shm_data(pInfo))
{
free(priv->local_hw_state);
diff --git a/src/synproto.h b/src/synproto.h
index 3f09bb2..74becca 100644
--- a/src/synproto.h
+++ b/src/synproto.h
@@ -64,7 +64,7 @@ struct CommData {
int protoBufTail;
/* Used for keeping track of partial HwState updates. */
- struct SynapticsHwState hwState;
+ struct SynapticsHwState *hwState;
Bool oneFinger;
Bool twoFingers;
Bool threeFingers;
diff --git a/test/eventcomm-test.c b/test/eventcomm-test.c
index 920d6ec..92397d6 100644
--- a/test/eventcomm-test.c
+++ b/test/eventcomm-test.c
@@ -57,9 +57,11 @@ static void
reset_data(struct SynapticsHwState **hw, struct CommData *comm,
SynapticsPrivate *priv)
{
+ SynapticsHwStateFree(&comm->hwState);
memset(comm, 0, sizeof(struct CommData));
SynapticsHwStateFree(hw);
*hw = SynapticsHwStateAlloc(priv);
+ comm->hwState = SynapticsHwStateAlloc(priv);
}
/**
@@ -190,6 +192,7 @@ test_read_hw_state(void)
free(private.proto_data);
SynapticsHwStateFree(&hw);
+ SynapticsHwStateFree(&comm.hwState);
}
static Bool
@@ -315,6 +318,7 @@ test_ignore_hw_state(void)
free(private.proto_data);
SynapticsHwStateFree(&hw);
SynapticsHwStateFree(&hw_zero);
+ SynapticsHwStateFree(&comm.hwState);
}
int main (int argc, char **argv)