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
10typedef int (*fntype)(const char *);
11
12int 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