• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /* Test program to test dynamic loading with the loadso subsystem.
3 */
4 
5 #include <stdio.h>
6 #include <stdlib.h>
7 
8 #include "SDL.h"
9 
10 typedef int (*fntype)(const char *);
11 
main(int argc,char * argv[])12 int main(int argc, char *argv[])
13 {
14 	int retval = 0;
15 	int hello = 0;
16 	const char *libname = NULL;
17 	const char *symname = NULL;
18 	void *lib = NULL;
19 	fntype fn = NULL;
20 
21 	if (argc != 3) {
22 		const char *app = argv[0];
23 		fprintf(stderr, "USAGE: %s <library> <functionname>\n", app);
24 		fprintf(stderr, "       %s --hello <lib with puts()>\n", app);
25 		return 1;
26 	}
27 
28 	/* Initialize SDL */
29 	if ( SDL_Init(0) < 0 ) {
30 		fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
31 		return 2;
32 	}
33 
34 	if (strcmp(argv[1], "--hello") == 0) {
35 		hello = 1;
36 		libname = argv[2];
37 		symname = "puts";
38 	} else {
39 		libname = argv[1];
40 		symname = argv[2];
41 	}
42 
43 	lib = SDL_LoadObject(libname);
44         if (lib == NULL) {
45 		fprintf(stderr, "SDL_LoadObject('%s') failed: %s\n",
46 		        libname, SDL_GetError());
47 		retval = 3;
48 	} else {
49 		fn = (fntype) SDL_LoadFunction(lib, symname);
50 		if (fn == NULL) {
51 			fprintf(stderr, "SDL_LoadFunction('%s') failed: %s\n",
52 			        symname, SDL_GetError());
53 			retval = 4;
54 		} else {
55 			printf("Found %s in %s at %p\n", symname, libname, fn);
56 			if (hello) {
57 				printf("Calling function...\n");
58 				fflush(stdout);
59 				fn("     HELLO, WORLD!\n");
60 				printf("...apparently, we survived.  :)\n");
61 				printf("Unloading library...\n");
62 				fflush(stdout);
63 			}
64 		}
65 		SDL_UnloadObject(lib);
66 	}
67 	SDL_Quit();
68 	return(0);
69 }
70 
71 
72