1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | #ifdef HAVE_DIX_CONFIG_H1 |
75 | #include <dix-config.h> |
76 | #endif |
77 | |
78 | #ifdef HAVE_XORG_CONFIG_H |
79 | #include <xorg-config.h> |
80 | #include "xf86Extensions.h" |
81 | #endif |
82 | |
83 | #ifdef HAVE_DMX_CONFIG_H |
84 | #include <dmx-config.h> |
85 | #undef XV1 |
86 | #undef DBE1 |
87 | #undef SCREENSAVER1 |
88 | #undef RANDR1 |
89 | #undef DAMAGE1 |
90 | #undef COMPOSITE |
91 | #undef MITSHM1 |
92 | #endif |
93 | |
94 | #ifdef HAVE_XNEST_CONFIG_H |
95 | #include <xnest-config.h> |
96 | #undef COMPOSITE |
97 | #undef DPMSExtension |
98 | #endif |
99 | |
100 | #ifdef HAVE_KDRIVE_CONFIG_H |
101 | #include <kdrive-config.h> |
102 | #endif |
103 | |
104 | #ifdef HAVE_XGL_CONFIG_H |
105 | #include <xgl-config.h> |
106 | #endif |
107 | |
108 | #include "misc.h" |
109 | #include "extension.h" |
110 | #include "extinit.h" |
111 | #ifdef INXQUARTZ1 |
112 | #include "nonsdk_extinit.h" |
113 | #endif |
114 | #include "micmap.h" |
115 | #include "globals.h" |
116 | |
117 | |
118 | |
119 | |
120 | typedef struct { |
121 | const char *name; |
122 | Bool *disablePtr; |
123 | } ExtensionToggle; |
124 | |
125 | static ExtensionToggle ExtensionToggleList[] = { |
126 | |
127 | {"Generic Events", &noGEExtension}, |
128 | #ifdef COMPOSITE |
129 | {"Composite", &noCompositeExtension}, |
130 | #endif |
131 | #ifdef DAMAGE1 |
132 | {"DAMAGE", &noDamageExtension}, |
133 | #endif |
134 | #ifdef DBE1 |
135 | {"DOUBLE-BUFFER", &noDbeExtension}, |
136 | #endif |
137 | #ifdef DPMSExtension |
138 | {"DPMS", &noDPMSExtension}, |
139 | #endif |
140 | #ifdef GLXEXT1 |
141 | {"GLX", &noGlxExtension}, |
142 | #endif |
143 | #ifdef SCREENSAVER1 |
144 | {"MIT-SCREEN-SAVER", &noScreenSaverExtension}, |
145 | #endif |
146 | #ifdef MITSHM1 |
147 | {SHMNAME"MIT-SHM", &noMITShmExtension}, |
148 | #endif |
149 | #ifdef RANDR1 |
150 | {"RANDR", &noRRExtension}, |
151 | #endif |
152 | {"RENDER", &noRenderExtension}, |
153 | #ifdef XCSECURITY |
154 | {"SECURITY", &noSecurityExtension}, |
155 | #endif |
156 | #ifdef RES1 |
157 | {"X-Resource", &noResExtension}, |
158 | #endif |
159 | #ifdef XF86BIGFONT |
160 | {"XFree86-Bigfont", &noXFree86BigfontExtension}, |
161 | #endif |
162 | #ifdef XORGSERVER |
163 | #ifdef XFreeXDGA |
164 | {"XFree86-DGA", &noXFree86DGAExtension}, |
165 | #endif |
166 | #ifdef XF86DRI |
167 | {"XFree86-DRI", &noXFree86DRIExtension}, |
168 | #endif |
169 | #ifdef XF86VIDMODE |
170 | {"XFree86-VidModeExtension", &noXFree86VidModeExtension}, |
171 | #endif |
172 | #endif |
173 | {"XFIXES", &noXFixesExtension}, |
174 | #ifdef PANORAMIX1 |
175 | {"XINERAMA", &noPanoramiXExtension}, |
176 | #endif |
177 | {"XInputExtension", NULL((void*)0)}, |
178 | {"XKEYBOARD", NULL((void*)0)}, |
179 | #ifdef XSELINUX |
180 | {"SELinux", &noSELinuxExtension}, |
181 | #endif |
182 | {"XTEST", &noTestExtensions}, |
183 | #ifdef XV1 |
184 | {"XVideo", &noXvExtension}, |
185 | #endif |
186 | }; |
187 | |
188 | Bool |
189 | EnableDisableExtension(const char *name, Bool enable) |
190 | { |
191 | ExtensionToggle *ext; |
192 | int i; |
193 | |
194 | for (i = 0; i < ARRAY_SIZE(ExtensionToggleList)(sizeof((ExtensionToggleList)) / sizeof((ExtensionToggleList) [0])); i++) { |
195 | ext = &ExtensionToggleList[i]; |
196 | if (strcmp(name, ext->name) == 0) { |
197 | if (ext->disablePtr != NULL((void*)0)) { |
198 | *ext->disablePtr = !enable; |
199 | return TRUE1; |
200 | } |
201 | else { |
202 | |
203 | return enable; |
204 | |
205 | } |
206 | } |
207 | } |
208 | |
209 | return FALSE0; |
210 | } |
211 | |
212 | void |
213 | EnableDisableExtensionError(const char *name, Bool enable) |
214 | { |
215 | ExtensionToggle *ext; |
216 | int i; |
217 | Bool found = FALSE0; |
218 | |
219 | for (i = 0; i < ARRAY_SIZE(ExtensionToggleList)(sizeof((ExtensionToggleList)) / sizeof((ExtensionToggleList) [0])); i++) { |
220 | ext = &ExtensionToggleList[i]; |
221 | if ((strcmp(name, ext->name) == 0) && (ext->disablePtr == NULL((void*)0))) { |
222 | ErrorF("[mi] Extension \"%s\" can not be disabled\n", name); |
223 | found = TRUE1; |
224 | break; |
225 | } |
226 | } |
227 | if (found == FALSE0) |
228 | ErrorF("[mi] Extension \"%s\" is not recognized\n", name); |
229 | ErrorF("[mi] Only the following extensions can be run-time %s:\n", |
230 | enable ? "enabled" : "disabled"); |
231 | for (i = 0; i < ARRAY_SIZE(ExtensionToggleList)(sizeof((ExtensionToggleList)) / sizeof((ExtensionToggleList) [0])); i++) { |
232 | ext = &ExtensionToggleList[i]; |
233 | if (ext->disablePtr != NULL((void*)0)) { |
234 | ErrorF("[mi] %s\n", ext->name); |
235 | } |
236 | } |
237 | } |
238 | |
239 | |
240 | static const ExtensionModule staticExtensions[] = { |
241 | {GEExtensionInit, "Generic Event Extension", &noGEExtension}, |
242 | {ShapeExtensionInit, "SHAPE", NULL((void*)0)}, |
243 | #ifdef MITSHM1 |
244 | {ShmExtensionInit, SHMNAME"MIT-SHM", &noMITShmExtension}, |
245 | #endif |
246 | {XInputExtensionInit, "XInputExtension", NULL((void*)0)}, |
247 | #ifdef XTEST1 |
248 | {XTestExtensionInit, XTestExtensionName"XTEST", &noTestExtensions}, |
249 | #endif |
250 | {BigReqExtensionInit, "BIG-REQUESTS", NULL((void*)0)}, |
251 | {SyncExtensionInit, "SYNC", NULL((void*)0)}, |
252 | {XkbExtensionInit, XkbName"XKEYBOARD", NULL((void*)0)}, |
253 | {XCMiscExtensionInit, "XC-MISC", NULL((void*)0)}, |
254 | #ifdef XCSECURITY |
255 | {SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension}, |
256 | #endif |
257 | #ifdef PANORAMIX1 |
258 | {PanoramiXExtensionInit, PANORAMIX_PROTOCOL_NAME"XINERAMA", &noPanoramiXExtension}, |
259 | #endif |
260 | #ifdef INXQUARTZ1 |
261 | |
262 | |
263 | |
264 | {PseudoramiXExtensionInit, "PseudoramiX", &noPseudoramiXExtension}, |
265 | #endif |
266 | |
267 | {XFixesExtensionInit, "XFIXES", &noXFixesExtension}, |
268 | #ifdef XF86BIGFONT |
269 | {XFree86BigfontExtensionInit, XF86BIGFONTNAME, &noXFree86BigfontExtension}, |
270 | #endif |
271 | {RenderExtensionInit, "RENDER", &noRenderExtension}, |
272 | #ifdef RANDR1 |
273 | {RRExtensionInit, "RANDR", &noRRExtension}, |
274 | #endif |
275 | #ifdef COMPOSITE |
276 | {CompositeExtensionInit, "COMPOSITE", &noCompositeExtension}, |
277 | #endif |
278 | #ifdef DAMAGE1 |
279 | {DamageExtensionInit, "DAMAGE", &noDamageExtension}, |
280 | #endif |
281 | #ifdef SCREENSAVER1 |
282 | {ScreenSaverExtensionInit, ScreenSaverName"MIT-SCREEN-SAVER", &noScreenSaverExtension}, |
283 | #endif |
284 | #ifdef DBE1 |
285 | {DbeExtensionInit, "DOUBLE-BUFFER", &noDbeExtension}, |
286 | #endif |
287 | #ifdef XRECORD1 |
288 | {RecordExtensionInit, "RECORD", &noTestExtensions}, |
289 | #endif |
290 | #ifdef DPMSExtension |
291 | {DPMSExtensionInit, DPMSExtensionName, &noDPMSExtension}, |
292 | #endif |
293 | #ifdef PRESENT1 |
294 | {present_extension_init, PRESENT_NAME"Present", NULL((void*)0)}, |
295 | #endif |
296 | #ifdef DRI3 |
297 | {dri3_extension_init, DRI3_NAME, NULL((void*)0)}, |
298 | #endif |
299 | #ifdef RES1 |
300 | {ResExtensionInit, XRES_NAME"X-Resource", &noResExtension}, |
301 | #endif |
302 | #ifdef XV1 |
303 | {XvExtensionInit, XvName"XVideo", &noXvExtension}, |
304 | {XvMCExtensionInit, XvMCName"XVideo-MotionCompensation", &noXvExtension}, |
305 | #endif |
306 | #ifdef XSELINUX |
307 | {SELinuxExtensionInit, SELINUX_EXTENSION_NAME, &noSELinuxExtension}, |
308 | #endif |
309 | }; |
310 | |
311 | static ExtensionModule *ExtensionModuleList = NULL((void*)0); |
312 | static int numExtensionModules = 0; |
313 | |
314 | static void |
315 | AddStaticExtensions(void) |
316 | { |
317 | static Bool listInitialised = FALSE0; |
318 | |
319 | if (listInitialised) |
320 | return; |
321 | listInitialised = TRUE1; |
322 | |
323 | |
324 | LoadExtensionList(staticExtensions, ARRAY_SIZE(staticExtensions)(sizeof((staticExtensions)) / sizeof((staticExtensions)[0])), TRUE1); |
325 | } |
326 | |
327 | void |
328 | InitExtensions(int argc, char *argv[]) |
329 | { |
330 | int i; |
331 | ExtensionModule *ext; |
332 | |
333 | AddStaticExtensions(); |
334 | |
335 | for (i = 0; i < numExtensionModules; i++) { |
| 1 | Assuming 'i' is < 'numExtensionModules' | |
|
| 2 | | Loop condition is true. Entering loop body | |
|
336 | ext = &ExtensionModuleList[i]; |
| 3 | | Null pointer value stored to 'ext' | |
|
337 | if (ext->initFunc != NULL((void*)0) && |
| 4 | | Access to field 'initFunc' results in a dereference of a null pointer (loaded from variable 'ext') |
|
338 | (ext->disablePtr == NULL((void*)0) || !*ext->disablePtr)) { |
339 | (ext->initFunc) (); |
340 | } |
341 | } |
342 | } |
343 | |
344 | static ExtensionModule * |
345 | NewExtensionModuleList(int size) |
346 | { |
347 | ExtensionModule *save = ExtensionModuleList; |
348 | int n; |
349 | |
350 | |
351 | if (!ExtensionModuleList) |
352 | numExtensionModules = 0; |
353 | |
354 | n = numExtensionModules + size; |
355 | ExtensionModuleList = reallocarrayxreallocarray(ExtensionModuleList, n, |
356 | sizeof(ExtensionModule)); |
357 | if (ExtensionModuleList == NULL((void*)0)) { |
358 | ExtensionModuleList = save; |
359 | return NULL((void*)0); |
360 | } |
361 | else { |
362 | numExtensionModules += size; |
363 | return ExtensionModuleList + (numExtensionModules - size); |
364 | } |
365 | } |
366 | |
367 | void |
368 | LoadExtensionList(const ExtensionModule ext[], int size, Bool builtin) |
369 | { |
370 | ExtensionModule *newext; |
371 | int i; |
372 | |
373 | |
374 | |
375 | AddStaticExtensions(); |
376 | |
377 | if (!(newext = NewExtensionModuleList(size))) |
378 | return; |
379 | |
380 | for (i = 0; i < size; i++, newext++) { |
381 | newext->name = ext[i].name; |
382 | newext->initFunc = ext[i].initFunc; |
383 | newext->disablePtr = ext[i].disablePtr; |
384 | } |
385 | } |