Bug Summary

File:test/touch.c
Location:line 201, column 5
Description:Value stored to 'last_client_id' is never read

Annotated Source Code

1/**
2 * Copyright © 2011 Red Hat, Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
22 */
23
24#ifdef HAVE_DIX_CONFIG_H1
25#include <dix-config.h>
26#endif
27
28#include <stdint.h>
29#include "inputstr.h"
30#include "assert.h"
31#include "scrnintstr.h"
32
33static void
34touch_grow_queue(void)
35{
36 DeviceIntRec dev;
37 ValuatorClassRec val;
38 TouchClassRec touch;
39 size_t size, new_size;
40 int i;
41
42 memset(&dev, 0, sizeof(dev))__builtin___memset_chk (&dev, 0, sizeof(dev), __builtin_object_size
(&dev, 0))
;
43 dev.name = xnfstrdup("test device")XNFstrdup("test device");
44 dev.id = 2;
45 dev.valuator = &val;
46 val.numAxes = 5;
47 dev.touch = &touch;
48 inputInfo.devices = &dev;
49
50 size = 5;
51
52 dev.last.num_touches = size;
53 dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches));
54 assert(dev.last.touches)(__builtin_expect(!(dev.last.touches), 0) ? __assert_rtn(__func__
, "touch.c", 54, "dev.last.touches") : (void)0)
;
55 for (i = 0; i < size; i++) {
56 dev.last.touches[i].active = TRUE1;
57 dev.last.touches[i].ddx_id = i;
58 dev.last.touches[i].client_id = i * 2;
59 }
60
61 /* no more space, should've scheduled a workproc */
62 assert(TouchBeginDDXTouch(&dev, 1234) == NULL)(__builtin_expect(!(TouchBeginDDXTouch(&dev, 1234) == ((void
*)0)), 0) ? __assert_rtn(__func__, "touch.c", 62, "TouchBeginDDXTouch(&dev, 1234) == NULL"
) : (void)0)
;
63 ProcessWorkQueue();
64
65 new_size = size + size / 2 + 1;
66 assert(dev.last.num_touches == new_size)(__builtin_expect(!(dev.last.num_touches == new_size), 0) ? __assert_rtn
(__func__, "touch.c", 66, "dev.last.num_touches == new_size")
: (void)0)
;
67
68 /* make sure we haven't touched those */
69 for (i = 0; i < size; i++) {
70 DDXTouchPointInfoPtr t = &dev.last.touches[i];
71
72 assert(t->active == TRUE)(__builtin_expect(!(t->active == 1), 0) ? __assert_rtn(__func__
, "touch.c", 72, "t->active == TRUE") : (void)0)
;
73 assert(t->ddx_id == i)(__builtin_expect(!(t->ddx_id == i), 0) ? __assert_rtn(__func__
, "touch.c", 73, "t->ddx_id == i") : (void)0)
;
74 assert(t->client_id == i * 2)(__builtin_expect(!(t->client_id == i * 2), 0) ? __assert_rtn
(__func__, "touch.c", 74, "t->client_id == i * 2") : (void
)0)
;
75 }
76
77 /* make sure those are zero-initialized */
78 for (i = size; i < new_size; i++) {
79 DDXTouchPointInfoPtr t = &dev.last.touches[i];
80
81 assert(t->active == FALSE)(__builtin_expect(!(t->active == 0), 0) ? __assert_rtn(__func__
, "touch.c", 81, "t->active == FALSE") : (void)0)
;
82 assert(t->client_id == 0)(__builtin_expect(!(t->client_id == 0), 0) ? __assert_rtn(
__func__, "touch.c", 82, "t->client_id == 0") : (void)0)
;
83 assert(t->ddx_id == 0)(__builtin_expect(!(t->ddx_id == 0), 0) ? __assert_rtn(__func__
, "touch.c", 83, "t->ddx_id == 0") : (void)0)
;
84 }
85
86 free(dev.name);
87}
88
89static void
90touch_find_ddxid(void)
91{
92 DeviceIntRec dev;
93 DDXTouchPointInfoPtr ti;
94 ValuatorClassRec val;
95 TouchClassRec touch;
96 int size = 5;
97 int i;
98
99 memset(&dev, 0, sizeof(dev))__builtin___memset_chk (&dev, 0, sizeof(dev), __builtin_object_size
(&dev, 0))
;
100 dev.name = xnfstrdup("test device")XNFstrdup("test device");
101 dev.id = 2;
102 dev.valuator = &val;
103 val.numAxes = 5;
104 dev.touch = &touch;
105 dev.last.num_touches = size;
106 dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches));
107 inputInfo.devices = &dev;
108 assert(dev.last.touches)(__builtin_expect(!(dev.last.touches), 0) ? __assert_rtn(__func__
, "touch.c", 108, "dev.last.touches") : (void)0)
;
109
110 dev.last.touches[0].active = TRUE1;
111 dev.last.touches[0].ddx_id = 10;
112 dev.last.touches[0].client_id = 20;
113
114 /* existing */
115 ti = TouchFindByDDXID(&dev, 10, FALSE0);
116 assert(ti == &dev.last.touches[0])(__builtin_expect(!(ti == &dev.last.touches[0]), 0) ? __assert_rtn
(__func__, "touch.c", 116, "ti == &dev.last.touches[0]") :
(void)0)
;
117
118 /* non-existing */
119 ti = TouchFindByDDXID(&dev, 20, FALSE0);
120 assert(ti == NULL)(__builtin_expect(!(ti == ((void*)0)), 0) ? __assert_rtn(__func__
, "touch.c", 120, "ti == NULL") : (void)0)
;
121
122 /* Non-active */
123 dev.last.touches[0].active = FALSE0;
124 ti = TouchFindByDDXID(&dev, 10, FALSE0);
125 assert(ti == NULL)(__builtin_expect(!(ti == ((void*)0)), 0) ? __assert_rtn(__func__
, "touch.c", 125, "ti == NULL") : (void)0)
;
126
127 /* create on number 2 */
128 dev.last.touches[0].active = TRUE1;
129
130 ti = TouchFindByDDXID(&dev, 20, TRUE1);
131 assert(ti == &dev.last.touches[1])(__builtin_expect(!(ti == &dev.last.touches[1]), 0) ? __assert_rtn
(__func__, "touch.c", 131, "ti == &dev.last.touches[1]") :
(void)0)
;
132 assert(ti->active)(__builtin_expect(!(ti->active), 0) ? __assert_rtn(__func__
, "touch.c", 132, "ti->active") : (void)0)
;
133 assert(ti->ddx_id == 20)(__builtin_expect(!(ti->ddx_id == 20), 0) ? __assert_rtn(__func__
, "touch.c", 133, "ti->ddx_id == 20") : (void)0)
;
134
135 /* set all to active */
136 for (i = 0; i < size; i++)
137 dev.last.touches[i].active = TRUE1;
138
139 /* Try to create more, fail */
140 ti = TouchFindByDDXID(&dev, 30, TRUE1);
141 assert(ti == NULL)(__builtin_expect(!(ti == ((void*)0)), 0) ? __assert_rtn(__func__
, "touch.c", 141, "ti == NULL") : (void)0)
;
142 ti = TouchFindByDDXID(&dev, 30, TRUE1);
143 assert(ti == NULL)(__builtin_expect(!(ti == ((void*)0)), 0) ? __assert_rtn(__func__
, "touch.c", 143, "ti == NULL") : (void)0)
;
144 /* make sure we haven't resized, we're in the signal handler */
145 assert(dev.last.num_touches == size)(__builtin_expect(!(dev.last.num_touches == size), 0) ? __assert_rtn
(__func__, "touch.c", 145, "dev.last.num_touches == size") : (
void)0)
;
146
147 /* stop one touchpoint, try to create, succeed */
148 dev.last.touches[2].active = FALSE0;
149 ti = TouchFindByDDXID(&dev, 30, TRUE1);
150 assert(ti == &dev.last.touches[2])(__builtin_expect(!(ti == &dev.last.touches[2]), 0) ? __assert_rtn
(__func__, "touch.c", 150, "ti == &dev.last.touches[2]") :
(void)0)
;
151 /* but still grow anyway */
152 ProcessWorkQueue();
153 ti = TouchFindByDDXID(&dev, 40, TRUE1);
154 assert(ti == &dev.last.touches[size])(__builtin_expect(!(ti == &dev.last.touches[size]), 0) ? __assert_rtn
(__func__, "touch.c", 154, "ti == &dev.last.touches[size]"
) : (void)0)
;
155
156 free(dev.name);
157}
158
159static void
160touch_begin_ddxtouch(void)
161{
162 DeviceIntRec dev;
163 DDXTouchPointInfoPtr ti;
164 ValuatorClassRec val;
165 TouchClassRec touch;
166 int ddx_id = 123;
167 unsigned int last_client_id = 0;
168 int size = 5;
169
170 memset(&dev, 0, sizeof(dev))__builtin___memset_chk (&dev, 0, sizeof(dev), __builtin_object_size
(&dev, 0))
;
171 dev.name = xnfstrdup("test device")XNFstrdup("test device");
172 dev.id = 2;
173 dev.valuator = &val;
174 val.numAxes = 5;
175 touch.mode = XIDirectTouch1;
176 dev.touch = &touch;
177 dev.last.num_touches = size;
178 dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches));
179 inputInfo.devices = &dev;
180 assert(dev.last.touches)(__builtin_expect(!(dev.last.touches), 0) ? __assert_rtn(__func__
, "touch.c", 180, "dev.last.touches") : (void)0)
;
181
182 ti = TouchBeginDDXTouch(&dev, ddx_id);
183 assert(ti)(__builtin_expect(!(ti), 0) ? __assert_rtn(__func__, "touch.c"
, 183, "ti") : (void)0)
;
184 assert(ti->ddx_id == ddx_id)(__builtin_expect(!(ti->ddx_id == ddx_id), 0) ? __assert_rtn
(__func__, "touch.c", 184, "ti->ddx_id == ddx_id") : (void
)0)
;
185 /* client_id == ddx_id can happen in real life, but not in this test */
186 assert(ti->client_id != ddx_id)(__builtin_expect(!(ti->client_id != ddx_id), 0) ? __assert_rtn
(__func__, "touch.c", 186, "ti->client_id != ddx_id") : (void
)0)
;
187 assert(ti->active)(__builtin_expect(!(ti->active), 0) ? __assert_rtn(__func__
, "touch.c", 187, "ti->active") : (void)0)
;
188 assert(ti->client_id > last_client_id)(__builtin_expect(!(ti->client_id > last_client_id), 0)
? __assert_rtn(__func__, "touch.c", 188, "ti->client_id > last_client_id"
) : (void)0)
;
189 assert(ti->emulate_pointer)(__builtin_expect(!(ti->emulate_pointer), 0) ? __assert_rtn
(__func__, "touch.c", 189, "ti->emulate_pointer") : (void)
0)
;
190 last_client_id = ti->client_id;
191
192 ddx_id += 10;
193 ti = TouchBeginDDXTouch(&dev, ddx_id);
194 assert(ti)(__builtin_expect(!(ti), 0) ? __assert_rtn(__func__, "touch.c"
, 194, "ti") : (void)0)
;
195 assert(ti->ddx_id == ddx_id)(__builtin_expect(!(ti->ddx_id == ddx_id), 0) ? __assert_rtn
(__func__, "touch.c", 195, "ti->ddx_id == ddx_id") : (void
)0)
;
196 /* client_id == ddx_id can happen in real life, but not in this test */
197 assert(ti->client_id != ddx_id)(__builtin_expect(!(ti->client_id != ddx_id), 0) ? __assert_rtn
(__func__, "touch.c", 197, "ti->client_id != ddx_id") : (void
)0)
;
198 assert(ti->active)(__builtin_expect(!(ti->active), 0) ? __assert_rtn(__func__
, "touch.c", 198, "ti->active") : (void)0)
;
199 assert(ti->client_id > last_client_id)(__builtin_expect(!(ti->client_id > last_client_id), 0)
? __assert_rtn(__func__, "touch.c", 199, "ti->client_id > last_client_id"
) : (void)0)
;
200 assert(!ti->emulate_pointer)(__builtin_expect(!(!ti->emulate_pointer), 0) ? __assert_rtn
(__func__, "touch.c", 200, "!ti->emulate_pointer") : (void
)0)
;
201 last_client_id = ti->client_id;
Value stored to 'last_client_id' is never read
202
203 free(dev.name);
204}
205
206static void
207touch_begin_touch(void)
208{
209 DeviceIntRec dev;
210 TouchClassRec touch;
211 ValuatorClassRec val;
212 TouchPointInfoPtr ti;
213 int touchid = 12434;
214 int sourceid = 23;
215 SpriteInfoRec sprite;
216 ScreenRec screen;
217
218 screenInfo.screens[0] = &screen;
219
220 memset(&dev, 0, sizeof(dev))__builtin___memset_chk (&dev, 0, sizeof(dev), __builtin_object_size
(&dev, 0))
;
221 dev.name = xnfstrdup("test device")XNFstrdup("test device");
222 dev.id = 2;
223
224 memset(&sprite, 0, sizeof(sprite))__builtin___memset_chk (&sprite, 0, sizeof(sprite), __builtin_object_size
(&sprite, 0))
;
225 dev.spriteInfo = &sprite;
226
227 memset(&touch, 0, sizeof(touch))__builtin___memset_chk (&touch, 0, sizeof(touch), __builtin_object_size
(&touch, 0))
;
228 touch.num_touches = 0;
229
230 memset(&val, 0, sizeof(val))__builtin___memset_chk (&val, 0, sizeof(val), __builtin_object_size
(&val, 0))
;
231 dev.valuator = &val;
232 val.numAxes = 2;
233
234 ti = TouchBeginTouch(&dev, sourceid, touchid, TRUE1);
235 assert(!ti)(__builtin_expect(!(!ti), 0) ? __assert_rtn(__func__, "touch.c"
, 235, "!ti") : (void)0)
;
236
237 dev.touch = &touch;
238 ti = TouchBeginTouch(&dev, sourceid, touchid, TRUE1);
239 assert(ti)(__builtin_expect(!(ti), 0) ? __assert_rtn(__func__, "touch.c"
, 239, "ti") : (void)0)
;
240 assert(ti->client_id == touchid)(__builtin_expect(!(ti->client_id == touchid), 0) ? __assert_rtn
(__func__, "touch.c", 240, "ti->client_id == touchid") : (
void)0)
;
241 assert(ti->active)(__builtin_expect(!(ti->active), 0) ? __assert_rtn(__func__
, "touch.c", 241, "ti->active") : (void)0)
;
242 assert(ti->sourceid == sourceid)(__builtin_expect(!(ti->sourceid == sourceid), 0) ? __assert_rtn
(__func__, "touch.c", 242, "ti->sourceid == sourceid") : (
void)0)
;
243 assert(ti->emulate_pointer)(__builtin_expect(!(ti->emulate_pointer), 0) ? __assert_rtn
(__func__, "touch.c", 243, "ti->emulate_pointer") : (void)
0)
;
244
245 assert(touch.num_touches == 1)(__builtin_expect(!(touch.num_touches == 1), 0) ? __assert_rtn
(__func__, "touch.c", 245, "touch.num_touches == 1") : (void)
0)
;
246
247 free(dev.name);
248}
249
250static void
251touch_init(void)
252{
253 DeviceIntRec dev;
254 Atom labels[2] = { 0 };
255 int rc;
256 SpriteInfoRec sprite;
257 ScreenRec screen;
258
259 screenInfo.screens[0] = &screen;
260
261 memset(&dev, 0, sizeof(dev))__builtin___memset_chk (&dev, 0, sizeof(dev), __builtin_object_size
(&dev, 0))
;
262 dev.name = xnfstrdup("test device")XNFstrdup("test device");
263
264 memset(&sprite, 0, sizeof(sprite))__builtin___memset_chk (&sprite, 0, sizeof(sprite), __builtin_object_size
(&sprite, 0))
;
265 dev.spriteInfo = &sprite;
266
267 InitAtoms();
268 rc = InitTouchClassDeviceStruct(&dev, 1, XIDirectTouch1, 2);
269 assert(rc == FALSE)(__builtin_expect(!(rc == 0), 0) ? __assert_rtn(__func__, "touch.c"
, 269, "rc == FALSE") : (void)0)
;
270
271 InitValuatorClassDeviceStruct(&dev, 2, labels, 10, Absolute1);
272 rc = InitTouchClassDeviceStruct(&dev, 1, XIDirectTouch1, 2);
273 assert(rc == TRUE)(__builtin_expect(!(rc == 1), 0) ? __assert_rtn(__func__, "touch.c"
, 273, "rc == TRUE") : (void)0)
;
274 assert(dev.touch)(__builtin_expect(!(dev.touch), 0) ? __assert_rtn(__func__, "touch.c"
, 274, "dev.touch") : (void)0)
;
275
276 free(dev.name);
277}
278
279int
280main(int argc, char **argv)
281{
282 touch_grow_queue();
283 touch_find_ddxid();
284 touch_begin_ddxtouch();
285 touch_init();
286 touch_begin_touch();
287
288 return 0;
289}