Bug Summary

File:test/touch.c
Location:line 202, 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 reallocated and succeeded */
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
64 new_size = size + size / 2 + 1;
65 assert(dev.last.num_touches == new_size)(__builtin_expect(!(dev.last.num_touches == new_size), 0) ? __assert_rtn
(__func__, "touch.c", 65, "dev.last.num_touches == new_size")
: (void)0)
;
66
67 /* make sure we haven't touched those */
68 for (i = 0; i < size; i++) {
69 DDXTouchPointInfoPtr t = &dev.last.touches[i];
70
71 assert(t->active == TRUE)(__builtin_expect(!(t->active == 1), 0) ? __assert_rtn(__func__
, "touch.c", 71, "t->active == TRUE") : (void)0)
;
72 assert(t->ddx_id == i)(__builtin_expect(!(t->ddx_id == i), 0) ? __assert_rtn(__func__
, "touch.c", 72, "t->ddx_id == i") : (void)0)
;
73 assert(t->client_id == i * 2)(__builtin_expect(!(t->client_id == i * 2), 0) ? __assert_rtn
(__func__, "touch.c", 73, "t->client_id == i * 2") : (void
)0)
;
74 }
75
76 assert(dev.last.touches[size].active == TRUE)(__builtin_expect(!(dev.last.touches[size].active == 1), 0) ?
__assert_rtn(__func__, "touch.c", 76, "dev.last.touches[size].active == TRUE"
) : (void)0)
;
77 assert(dev.last.touches[size].ddx_id == 1234)(__builtin_expect(!(dev.last.touches[size].ddx_id == 1234), 0
) ? __assert_rtn(__func__, "touch.c", 77, "dev.last.touches[size].ddx_id == 1234"
) : (void)0)
;
78 assert(dev.last.touches[size].client_id == 1)(__builtin_expect(!(dev.last.touches[size].client_id == 1), 0
) ? __assert_rtn(__func__, "touch.c", 78, "dev.last.touches[size].client_id == 1"
) : (void)0)
;
79
80 /* make sure those are zero-initialized */
81 for (i = size + 1; i < new_size; i++) {
82 DDXTouchPointInfoPtr t = &dev.last.touches[i];
83
84 assert(t->active == FALSE)(__builtin_expect(!(t->active == 0), 0) ? __assert_rtn(__func__
, "touch.c", 84, "t->active == FALSE") : (void)0)
;
85 assert(t->client_id == 0)(__builtin_expect(!(t->client_id == 0), 0) ? __assert_rtn(
__func__, "touch.c", 85, "t->client_id == 0") : (void)0)
;
86 assert(t->ddx_id == 0)(__builtin_expect(!(t->ddx_id == 0), 0) ? __assert_rtn(__func__
, "touch.c", 86, "t->ddx_id == 0") : (void)0)
;
87 }
88
89 free(dev.name);
90}
91
92static void
93touch_find_ddxid(void)
94{
95 DeviceIntRec dev;
96 DDXTouchPointInfoPtr ti, ti2;
97 ValuatorClassRec val;
98 TouchClassRec touch;
99 int size = 5;
100 int i;
101
102 memset(&dev, 0, sizeof(dev))__builtin___memset_chk (&dev, 0, sizeof(dev), __builtin_object_size
(&dev, 0))
;
103 dev.name = xnfstrdup("test device")XNFstrdup("test device");
104 dev.id = 2;
105 dev.valuator = &val;
106 val.numAxes = 5;
107 dev.touch = &touch;
108 dev.last.num_touches = size;
109 dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches));
110 inputInfo.devices = &dev;
111 assert(dev.last.touches)(__builtin_expect(!(dev.last.touches), 0) ? __assert_rtn(__func__
, "touch.c", 111, "dev.last.touches") : (void)0)
;
112
113 dev.last.touches[0].active = TRUE1;
114 dev.last.touches[0].ddx_id = 10;
115 dev.last.touches[0].client_id = 20;
116
117 /* existing */
118 ti = TouchFindByDDXID(&dev, 10, FALSE0);
119 assert(ti == &dev.last.touches[0])(__builtin_expect(!(ti == &dev.last.touches[0]), 0) ? __assert_rtn
(__func__, "touch.c", 119, "ti == &dev.last.touches[0]") :
(void)0)
;
120
121 /* non-existing */
122 ti = TouchFindByDDXID(&dev, 20, FALSE0);
123 assert(ti == NULL)(__builtin_expect(!(ti == ((void*)0)), 0) ? __assert_rtn(__func__
, "touch.c", 123, "ti == NULL") : (void)0)
;
124
125 /* Non-active */
126 dev.last.touches[0].active = FALSE0;
127 ti = TouchFindByDDXID(&dev, 10, FALSE0);
128 assert(ti == NULL)(__builtin_expect(!(ti == ((void*)0)), 0) ? __assert_rtn(__func__
, "touch.c", 128, "ti == NULL") : (void)0)
;
129
130 /* create on number 2 */
131 dev.last.touches[0].active = TRUE1;
132
133 ti = TouchFindByDDXID(&dev, 20, TRUE1);
134 assert(ti == &dev.last.touches[1])(__builtin_expect(!(ti == &dev.last.touches[1]), 0) ? __assert_rtn
(__func__, "touch.c", 134, "ti == &dev.last.touches[1]") :
(void)0)
;
135 assert(ti->active)(__builtin_expect(!(ti->active), 0) ? __assert_rtn(__func__
, "touch.c", 135, "ti->active") : (void)0)
;
136 assert(ti->ddx_id == 20)(__builtin_expect(!(ti->ddx_id == 20), 0) ? __assert_rtn(__func__
, "touch.c", 136, "ti->ddx_id == 20") : (void)0)
;
137
138 /* set all to active */
139 for (i = 0; i < size; i++)
140 dev.last.touches[i].active = TRUE1;
141
142 /* Try to create more, succeed */
143 ti = TouchFindByDDXID(&dev, 30, TRUE1);
144 assert(ti != NULL)(__builtin_expect(!(ti != ((void*)0)), 0) ? __assert_rtn(__func__
, "touch.c", 144, "ti != NULL") : (void)0)
;
145 ti2 = TouchFindByDDXID(&dev, 30, TRUE1);
146 assert(ti == ti2)(__builtin_expect(!(ti == ti2), 0) ? __assert_rtn(__func__, "touch.c"
, 146, "ti == ti2") : (void)0)
;
147 /* make sure we have resized */
148 assert(dev.last.num_touches == 8)(__builtin_expect(!(dev.last.num_touches == 8), 0) ? __assert_rtn
(__func__, "touch.c", 148, "dev.last.num_touches == 8") : (void
)0)
; /* EQ grows from 5 to 8 */
149
150 /* stop one touchpoint, try to create, succeed */
151 dev.last.touches[2].active = FALSE0;
152 ti = TouchFindByDDXID(&dev, 35, TRUE1);
153 assert(ti == &dev.last.touches[2])(__builtin_expect(!(ti == &dev.last.touches[2]), 0) ? __assert_rtn
(__func__, "touch.c", 153, "ti == &dev.last.touches[2]") :
(void)0)
;
154 ti = TouchFindByDDXID(&dev, 40, TRUE1);
155 assert(ti == &dev.last.touches[size+1])(__builtin_expect(!(ti == &dev.last.touches[size+1]), 0) ?
__assert_rtn(__func__, "touch.c", 155, "ti == &dev.last.touches[size+1]"
) : (void)0)
;
156
157 free(dev.name);
158}
159
160static void
161touch_begin_ddxtouch(void)
162{
163 DeviceIntRec dev;
164 DDXTouchPointInfoPtr ti;
165 ValuatorClassRec val;
166 TouchClassRec touch;
167 int ddx_id = 123;
168 unsigned int last_client_id = 0;
169 int size = 5;
170
171 memset(&dev, 0, sizeof(dev))__builtin___memset_chk (&dev, 0, sizeof(dev), __builtin_object_size
(&dev, 0))
;
172 dev.name = xnfstrdup("test device")XNFstrdup("test device");
173 dev.id = 2;
174 dev.valuator = &val;
175 val.numAxes = 5;
176 touch.mode = XIDirectTouch1;
177 dev.touch = &touch;
178 dev.last.num_touches = size;
179 dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches));
180 inputInfo.devices = &dev;
181 assert(dev.last.touches)(__builtin_expect(!(dev.last.touches), 0) ? __assert_rtn(__func__
, "touch.c", 181, "dev.last.touches") : (void)0)
;
182
183 ti = TouchBeginDDXTouch(&dev, ddx_id);
184 assert(ti)(__builtin_expect(!(ti), 0) ? __assert_rtn(__func__, "touch.c"
, 184, "ti") : (void)0)
;
185 assert(ti->ddx_id == ddx_id)(__builtin_expect(!(ti->ddx_id == ddx_id), 0) ? __assert_rtn
(__func__, "touch.c", 185, "ti->ddx_id == ddx_id") : (void
)0)
;
186 /* client_id == ddx_id can happen in real life, but not in this test */
187 assert(ti->client_id != ddx_id)(__builtin_expect(!(ti->client_id != ddx_id), 0) ? __assert_rtn
(__func__, "touch.c", 187, "ti->client_id != ddx_id") : (void
)0)
;
188 assert(ti->active)(__builtin_expect(!(ti->active), 0) ? __assert_rtn(__func__
, "touch.c", 188, "ti->active") : (void)0)
;
189 assert(ti->client_id > last_client_id)(__builtin_expect(!(ti->client_id > last_client_id), 0)
? __assert_rtn(__func__, "touch.c", 189, "ti->client_id > last_client_id"
) : (void)0)
;
190 assert(ti->emulate_pointer)(__builtin_expect(!(ti->emulate_pointer), 0) ? __assert_rtn
(__func__, "touch.c", 190, "ti->emulate_pointer") : (void)
0)
;
191 last_client_id = ti->client_id;
192
193 ddx_id += 10;
194 ti = TouchBeginDDXTouch(&dev, ddx_id);
195 assert(ti)(__builtin_expect(!(ti), 0) ? __assert_rtn(__func__, "touch.c"
, 195, "ti") : (void)0)
;
196 assert(ti->ddx_id == ddx_id)(__builtin_expect(!(ti->ddx_id == ddx_id), 0) ? __assert_rtn
(__func__, "touch.c", 196, "ti->ddx_id == ddx_id") : (void
)0)
;
197 /* client_id == ddx_id can happen in real life, but not in this test */
198 assert(ti->client_id != ddx_id)(__builtin_expect(!(ti->client_id != ddx_id), 0) ? __assert_rtn
(__func__, "touch.c", 198, "ti->client_id != ddx_id") : (void
)0)
;
199 assert(ti->active)(__builtin_expect(!(ti->active), 0) ? __assert_rtn(__func__
, "touch.c", 199, "ti->active") : (void)0)
;
200 assert(ti->client_id > last_client_id)(__builtin_expect(!(ti->client_id > last_client_id), 0)
? __assert_rtn(__func__, "touch.c", 200, "ti->client_id > last_client_id"
) : (void)0)
;
201 assert(!ti->emulate_pointer)(__builtin_expect(!(!ti->emulate_pointer), 0) ? __assert_rtn
(__func__, "touch.c", 201, "!ti->emulate_pointer") : (void
)0)
;
202 last_client_id = ti->client_id;
Value stored to 'last_client_id' is never read
203
204 free(dev.name);
205}
206
207static void
208touch_begin_touch(void)
209{
210 DeviceIntRec dev;
211 TouchClassRec touch;
212 ValuatorClassRec val;
213 TouchPointInfoPtr ti;
214 int touchid = 12434;
215 int sourceid = 23;
216 SpriteInfoRec sprite;
217 ScreenRec screen;
218
219 screenInfo.screens[0] = &screen;
220
221 memset(&dev, 0, sizeof(dev))__builtin___memset_chk (&dev, 0, sizeof(dev), __builtin_object_size
(&dev, 0))
;
222 dev.name = xnfstrdup("test device")XNFstrdup("test device");
223 dev.id = 2;
224
225 memset(&sprite, 0, sizeof(sprite))__builtin___memset_chk (&sprite, 0, sizeof(sprite), __builtin_object_size
(&sprite, 0))
;
226 dev.spriteInfo = &sprite;
227
228 memset(&touch, 0, sizeof(touch))__builtin___memset_chk (&touch, 0, sizeof(touch), __builtin_object_size
(&touch, 0))
;
229 touch.num_touches = 0;
230
231 memset(&val, 0, sizeof(val))__builtin___memset_chk (&val, 0, sizeof(val), __builtin_object_size
(&val, 0))
;
232 dev.valuator = &val;
233 val.numAxes = 2;
234
235 ti = TouchBeginTouch(&dev, sourceid, touchid, TRUE1);
236 assert(!ti)(__builtin_expect(!(!ti), 0) ? __assert_rtn(__func__, "touch.c"
, 236, "!ti") : (void)0)
;
237
238 dev.touch = &touch;
239 ti = TouchBeginTouch(&dev, sourceid, touchid, TRUE1);
240 assert(ti)(__builtin_expect(!(ti), 0) ? __assert_rtn(__func__, "touch.c"
, 240, "ti") : (void)0)
;
241 assert(ti->client_id == touchid)(__builtin_expect(!(ti->client_id == touchid), 0) ? __assert_rtn
(__func__, "touch.c", 241, "ti->client_id == touchid") : (
void)0)
;
242 assert(ti->active)(__builtin_expect(!(ti->active), 0) ? __assert_rtn(__func__
, "touch.c", 242, "ti->active") : (void)0)
;
243 assert(ti->sourceid == sourceid)(__builtin_expect(!(ti->sourceid == sourceid), 0) ? __assert_rtn
(__func__, "touch.c", 243, "ti->sourceid == sourceid") : (
void)0)
;
244 assert(ti->emulate_pointer)(__builtin_expect(!(ti->emulate_pointer), 0) ? __assert_rtn
(__func__, "touch.c", 244, "ti->emulate_pointer") : (void)
0)
;
245
246 assert(touch.num_touches == 1)(__builtin_expect(!(touch.num_touches == 1), 0) ? __assert_rtn
(__func__, "touch.c", 246, "touch.num_touches == 1") : (void)
0)
;
247
248 free(dev.name);
249}
250
251static void
252touch_init(void)
253{
254 DeviceIntRec dev;
255 Atom labels[2] = { 0 };
256 int rc;
257 SpriteInfoRec sprite;
258 ScreenRec screen;
259
260 screenInfo.screens[0] = &screen;
261
262 memset(&dev, 0, sizeof(dev))__builtin___memset_chk (&dev, 0, sizeof(dev), __builtin_object_size
(&dev, 0))
;
263 dev.name = xnfstrdup("test device")XNFstrdup("test device");
264
265 memset(&sprite, 0, sizeof(sprite))__builtin___memset_chk (&sprite, 0, sizeof(sprite), __builtin_object_size
(&sprite, 0))
;
266 dev.spriteInfo = &sprite;
267
268 InitAtoms();
269 rc = InitTouchClassDeviceStruct(&dev, 1, XIDirectTouch1, 2);
270 assert(rc == FALSE)(__builtin_expect(!(rc == 0), 0) ? __assert_rtn(__func__, "touch.c"
, 270, "rc == FALSE") : (void)0)
;
271
272 InitValuatorClassDeviceStruct(&dev, 2, labels, 10, Absolute1);
273 rc = InitTouchClassDeviceStruct(&dev, 1, XIDirectTouch1, 2);
274 assert(rc == TRUE)(__builtin_expect(!(rc == 1), 0) ? __assert_rtn(__func__, "touch.c"
, 274, "rc == TRUE") : (void)0)
;
275 assert(dev.touch)(__builtin_expect(!(dev.touch), 0) ? __assert_rtn(__func__, "touch.c"
, 275, "dev.touch") : (void)0)
;
276
277 free(dev.name);
278}
279
280int
281main(int argc, char **argv)
282{
283 touch_grow_queue();
284 touch_find_ddxid();
285 touch_begin_ddxtouch();
286 touch_init();
287 touch_begin_touch();
288
289 return 0;
290}