Home | History | Annotate | Download | only in test
      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 
     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