2 Upstream: previous version submitted
3 Reason: cache function pointers returned by dlsym() instead of looking
4 them up each time; gives a noticeable speed increase
6 --- glkloader-0.3.2/generate_glkfuncs.pl~ 2013-07-08 15:05:49.000000000 +0100
7 +++ glkloader-0.3.2/generate_glkfuncs.pl 2013-07-08 15:06:07.000000000 +0100
10 print OUT_FILE "$ret_type $name(", createArgList (@arg_list), ")\n";
12 - print OUT_FILE " $ret_type (*funcPtr)(", createArgList (@arg_list), ");\n";
13 + print OUT_FILE " static $ret_type (*funcPtr)(", createArgList (@arg_list), ");\n";
14 + print OUT_FILE "\n";
15 + print OUT_FILE " if (! funcPtr) {\n";
16 print OUT_FILE " char * errBuf = NULL;\n";
18 print OUT_FILE " funcPtr = loadSymbol(gGlkLib, \"$name\", &errBuf);\n";
20 print OUT_FILE " fprintf(stderr, \"%s\\n\", errBuf);\n";
21 print OUT_FILE " exit(1);\n";
22 print OUT_FILE " }\n";
23 + print OUT_FILE " }\n";
25 if ($ret_type eq "void")
27 --- glkloader-0.3.2/blorbfuncs.c~ 2013-07-08 15:05:56.000000000 +0100
28 +++ glkloader-0.3.2/blorbfuncs.c 2013-07-08 15:06:07.000000000 +0100
31 giblorb_err_t giblorb_set_resource_map(strid_t file)
33 - giblorb_err_t (*funcPtr)(strid_t file);
34 + static giblorb_err_t (*funcPtr)(strid_t file);
39 funcPtr = loadSymbol(gGlkLib, "giblorb_set_resource_map", &errBuf);
41 fprintf(stderr, "%s\n", errBuf);
46 return (*funcPtr)(file);
49 giblorb_map_t *giblorb_get_resource_map(void)
51 - giblorb_map_t * (*funcPtr)(void);
52 + static giblorb_map_t * (*funcPtr)(void);
57 funcPtr = loadSymbol(gGlkLib, "giblorb_get_resource_map", &errBuf);
59 fprintf(stderr, "%s\n", errBuf);
67 giblorb_err_t giblorb_create_map(strid_t file, giblorb_map_t **newmap)
69 - giblorb_err_t (*funcPtr)(strid_t file, giblorb_map_t **newmap);
70 + static giblorb_err_t (*funcPtr)(strid_t file, giblorb_map_t **newmap);
75 funcPtr = loadSymbol(gGlkLib, "giblorb_create_map", &errBuf);
77 fprintf(stderr, "%s\n", errBuf);
82 return (*funcPtr)(file, newmap);
85 giblorb_err_t giblorb_destroy_map(giblorb_map_t *map)
87 - giblorb_err_t (*funcPtr)(giblorb_map_t *map);
88 + static giblorb_err_t (*funcPtr)(giblorb_map_t *map);
93 funcPtr = loadSymbol(gGlkLib, "giblorb_destroy_map", &errBuf);
95 fprintf(stderr, "%s\n", errBuf);
100 return (*funcPtr)(map);
103 giblorb_err_t giblorb_load_chunk_by_type(giblorb_map_t *map,
104 glui32 method, giblorb_result_t *res, glui32 chunktype, glui32 count)
106 - giblorb_err_t (*funcPtr)(giblorb_map_t *map,
107 + static giblorb_err_t (*funcPtr)(giblorb_map_t *map,
108 glui32 method, giblorb_result_t *res, glui32 chunktype, glui32 count);
111 char * errBuf = NULL;
113 funcPtr = loadSymbol(gGlkLib, "giblorb_load_chunk_by_type", &errBuf);
115 fprintf(stderr, "%s\n", errBuf);
120 return (*funcPtr)(map, method, res, chunktype, count);
123 giblorb_err_t giblorb_load_chunk_by_number(giblorb_map_t *map,
124 glui32 method, giblorb_result_t *res, glui32 chunknum)
126 - giblorb_err_t (*funcPtr)(giblorb_map_t *map,
127 + static giblorb_err_t (*funcPtr)(giblorb_map_t *map,
128 glui32 method, giblorb_result_t *res, glui32 chunknum);
131 char * errBuf = NULL;
133 funcPtr = loadSymbol(gGlkLib, "giblorb_load_chunk_by_number", &errBuf);
134 @@ -128,13 +145,16 @@
135 fprintf(stderr, "%s\n", errBuf);
140 return (*funcPtr)(map, method, res, chunknum);
143 giblorb_err_t giblorb_unload_chunk(giblorb_map_t *map, glui32 chunknum)
145 - giblorb_err_t (*funcPtr)(giblorb_map_t *map, glui32 chunknum);
146 + static giblorb_err_t (*funcPtr)(giblorb_map_t *map, glui32 chunknum);
149 char * errBuf = NULL;
151 funcPtr = loadSymbol(gGlkLib, "giblorb_unload_chunk", &errBuf);
153 fprintf(stderr, "%s\n", errBuf);
158 return (*funcPtr)(map, chunknum);
161 giblorb_err_t giblorb_load_resource(giblorb_map_t *map,
162 glui32 method, giblorb_result_t *res, glui32 usage, glui32 resnum)
164 - giblorb_err_t (*funcPtr)(giblorb_map_t *map,
165 + static giblorb_err_t (*funcPtr)(giblorb_map_t *map,
166 glui32 method, giblorb_result_t *res, glui32 usage, glui32 resnum);
169 char * errBuf = NULL;
171 funcPtr = loadSymbol(gGlkLib, "giblorb_load_resource", &errBuf);
173 fprintf(stderr, "%s\n", errBuf);
178 return (*funcPtr)(map, method, res, usage, resnum);
181 giblorb_err_t giblorb_count_resources(giblorb_map_t *map,
182 glui32 usage, glui32 *num, glui32 *min, glui32 *max)
184 - giblorb_err_t (*funcPtr)(giblorb_map_t *map,
185 + static giblorb_err_t (*funcPtr)(giblorb_map_t *map,
186 glui32 usage, glui32 *num, glui32 *min, glui32 *max);
189 char * errBuf = NULL;
191 funcPtr = loadSymbol(gGlkLib, "giblorb_count_resources", &errBuf);
193 fprintf(stderr, "%s\n", errBuf);
198 return (*funcPtr)(map, usage, num, min, max);
200 --- glkloader-0.3.2/dispafuncs.c~ 2013-07-08 15:05:56.000000000 +0100
201 +++ glkloader-0.3.2/dispafuncs.c 2013-07-08 15:06:07.000000000 +0100
203 gidispatch_rock_t (*regi)(void *obj, glui32 objclass),
204 void (*unregi)(void *obj, glui32 objclass, gidispatch_rock_t objrock))
207 + static void (*funcPtr)(
208 gidispatch_rock_t (*regi)(void *obj, glui32 objclass),
209 void (*unregi)(void *obj, glui32 objclass, gidispatch_rock_t objrock));
212 char * errBuf = NULL;
214 funcPtr = loadSymbol(gGlkLib, "gidispatch_set_object_registry", &errBuf);
216 fprintf(stderr, "%s\n", errBuf);
221 (*funcPtr)(regi, unregi);
224 gidispatch_rock_t gidispatch_get_objrock(void *obj, glui32 objclass)
226 - gidispatch_rock_t (*funcPtr)(void *obj, glui32 objclass);
227 + static gidispatch_rock_t (*funcPtr)(void *obj, glui32 objclass);
230 char * errBuf = NULL;
232 funcPtr = loadSymbol(gGlkLib, "gidispatch_get_objrock", &errBuf);
234 fprintf(stderr, "%s\n", errBuf);
239 return (*funcPtr)(obj, objclass);
242 void (*unregi)(void *array, glui32 len, char *typecode,
243 gidispatch_rock_t objrock))
246 + static void (*funcPtr)(
247 gidispatch_rock_t (*regi)(void *array, glui32 len, char *typecode),
248 void (*unregi)(void *array, glui32 len, char *typecode,
249 gidispatch_rock_t objrock));
252 char * errBuf = NULL;
254 funcPtr = loadSymbol(gGlkLib, "gidispatch_set_retained_registry", &errBuf);
256 fprintf(stderr, "%s\n", errBuf);
261 return (*funcPtr)(regi, unregi);
264 void gidispatch_call(glui32 funcnum, glui32 numargs, gluniversal_t *arglist)
266 - void (*funcPtr)(glui32 funcnum, glui32 numargs, gluniversal_t *arglist);
267 + static void (*funcPtr)(glui32 funcnum, glui32 numargs, gluniversal_t *arglist);
270 char * errBuf = NULL;
272 funcPtr = loadSymbol(gGlkLib, "gidispatch_call", &errBuf);
273 @@ -106,13 +117,16 @@
274 fprintf(stderr, "%s\n", errBuf);
279 return (*funcPtr)(funcnum, numargs, arglist);
282 char *gidispatch_prototype(glui32 funcnum)
284 - char * (*funcPtr)(glui32 funcnum);
285 + static char * (*funcPtr)(glui32 funcnum);
288 char * errBuf = NULL;
290 funcPtr = loadSymbol(gGlkLib, "gidispatch_prototype", &errBuf);
291 @@ -120,13 +134,16 @@
292 fprintf(stderr, "%s\n", errBuf);
297 return (*funcPtr)(funcnum);
300 glui32 gidispatch_count_classes(void)
302 - glui32 (*funcPtr)(void);
303 + static glui32 (*funcPtr)(void);
306 char * errBuf = NULL;
308 funcPtr = loadSymbol(gGlkLib, "gidispatch_count_classes", &errBuf);
309 @@ -134,13 +151,16 @@
310 fprintf(stderr, "%s\n", errBuf);
318 gidispatch_intconst_t *gidispatch_get_class(glui32 index)
320 - gidispatch_intconst_t * (*funcPtr)(glui32 index);
321 + static gidispatch_intconst_t * (*funcPtr)(glui32 index);
324 char * errBuf = NULL;
326 funcPtr = loadSymbol(gGlkLib, "gidispatch_get_class", &errBuf);
327 @@ -148,13 +168,16 @@
328 fprintf(stderr, "%s\n", errBuf);
333 return (*funcPtr)(index);
336 glui32 gidispatch_count_intconst(void)
338 - glui32 (*funcPtr)(void);
339 + static glui32 (*funcPtr)(void);
342 char * errBuf = NULL;
344 funcPtr = loadSymbol(gGlkLib, "gidispatch_count_intconst", &errBuf);
345 @@ -162,13 +185,16 @@
346 fprintf(stderr, "%s\n", errBuf);
354 gidispatch_intconst_t *gidispatch_get_intconst(glui32 index)
356 - gidispatch_intconst_t * (*funcPtr)(glui32 index);
357 + static gidispatch_intconst_t * (*funcPtr)(glui32 index);
360 char * errBuf = NULL;
362 funcPtr = loadSymbol(gGlkLib, "gidispatch_get_intconst", &errBuf);
363 @@ -176,13 +202,16 @@
364 fprintf(stderr, "%s\n", errBuf);
369 return (*funcPtr)(index);
372 glui32 gidispatch_count_functions(void)
374 - glui32 (*funcPtr)(void);
375 + static glui32 (*funcPtr)(void);
378 char * errBuf = NULL;
380 funcPtr = loadSymbol(gGlkLib, "gidispatch_count_functions", &errBuf);
381 @@ -190,13 +219,16 @@
382 fprintf(stderr, "%s\n", errBuf);
390 gidispatch_function_t *gidispatch_get_function(glui32 index)
392 - gidispatch_function_t * (*funcPtr)(glui32 index);
393 + static gidispatch_function_t * (*funcPtr)(glui32 index);
396 char * errBuf = NULL;
398 funcPtr = loadSymbol(gGlkLib, "gidispatch_get_function", &errBuf);
399 @@ -204,13 +236,16 @@
400 fprintf(stderr, "%s\n", errBuf);
405 return (*funcPtr)(index);
408 gidispatch_function_t *gidispatch_get_function_by_id(glui32 id)
410 - gidispatch_function_t * (*funcPtr)(glui32 id);
411 + static gidispatch_function_t * (*funcPtr)(glui32 id);
414 char * errBuf = NULL;
416 funcPtr = loadSymbol(gGlkLib, "gidispatch_get_function_by_id", &errBuf);
418 fprintf(stderr, "%s\n", errBuf);
423 return (*funcPtr)(id);
425 --- glkloader-0.3.2/unixfuncs.c~ 2013-07-08 15:05:41.000000000 +0100
426 +++ glkloader-0.3.2/unixfuncs.c 2013-07-08 15:09:09.000000000 +0100
428 strid_t glkunix_stream_open_pathname(char *pathname, glui32 textmode,
431 - strid_t (*funcPtr)(char *pathname, glui32 textmode, glui32 rock);
432 + static strid_t (*funcPtr)(char *pathname, glui32 textmode, glui32 rock);
435 char * errBuf = NULL;
437 funcPtr = loadSymbol(gGlkLib, "glkunix_stream_open_pathname", &errBuf);
439 fprintf(stderr, "%s\n", errBuf);
444 return (*funcPtr)(pathname, textmode, rock);
447 strid_t glkunix_stream_open_pathname_gen(char *pathname, glui32 writemode, glui32 textmode,
450 - strid_t (*funcPtr)(char *pathname, glui32 writemode, glui32 textmode, glui32 rock);
451 + static strid_t (*funcPtr)(char *pathname, glui32 writemode, glui32 textmode, glui32 rock);
454 char * errBuf = NULL;
456 funcPtr = loadSymbol(gGlkLib, "glkunix_stream_open_pathname_gen", &errBuf);
458 fprintf(stderr, "%s\n", errBuf);
463 return (*funcPtr)(pathname, writemode, textmode, rock);
466 void glkunix_set_base_file(char *filename)
468 - void (*funcPtr)(char *filename);
469 + static void (*funcPtr)(char *filename);
472 char * errBuf = NULL;
474 funcPtr = loadSymbol(gGlkLib, "glkunix_set_base_file", &errBuf);
476 fprintf(stderr, "%s\n", errBuf);
481 (*funcPtr)(filename);