Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
authorRyan C. Gordon <icculus@icculus.org>
Tue, 07 Nov 2006 14:36:47 +0000
changeset 2067 dcdb175c2829
parent 2066 8f8066b84b3e
child 2068 f16a7d02a176
Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
test/Makefile.in
test/testloadso.c
--- a/test/Makefile.in	Fri Nov 03 21:48:35 2006 +0000
+++ b/test/Makefile.in	Tue Nov 07 14:36:47 2006 +0000
@@ -7,7 +7,7 @@
 CFLAGS  = @CFLAGS@
 LIBS	= @LIBS@
 
-TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testaudioinfo$(EXE) testmultiaudio$(EXE) testalpha$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcdrom$(EXE) testcursor$(EXE) testdyngl$(EXE) testerror$(EXE) testfile$(EXE) testgamma$(EXE) testgl$(EXE) testgl2$(EXE) testhread$(EXE) testiconv$(EXE) testjoystick$(EXE) testkeys$(EXE) testlock$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testsem$(EXE) testsprite$(EXE) testsprite2$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm$(EXE) testwm2$(EXE) threadwin$(EXE) torturethread$(EXE)
+TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testaudioinfo$(EXE) testmultiaudio$(EXE) testalpha$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcdrom$(EXE) testcursor$(EXE) testdyngl$(EXE) testerror$(EXE) testfile$(EXE) testgamma$(EXE) testgl$(EXE) testgl2$(EXE) testhread$(EXE) testiconv$(EXE) testjoystick$(EXE) testkeys$(EXE) testlock$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testsem$(EXE) testsprite$(EXE) testsprite2$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm$(EXE) testwm2$(EXE) threadwin$(EXE) torturethread$(EXE) testloadso$(EXE)
 
 all: Makefile $(TARGETS)
 
@@ -122,6 +122,9 @@
 torturethread$(EXE): $(srcdir)/torturethread.c
 	$(CC) -o $@ $? $(CFLAGS) $(LIBS)
 
+testloadso$(EXE): $(srcdir)/testloadso.c
+	$(CC) -o $@ $? $(CFLAGS) $(LIBS)
+
 
 clean:
 	rm -f $(TARGETS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/testloadso.c	Tue Nov 07 14:36:47 2006 +0000
@@ -0,0 +1,70 @@
+
+/* Test program to test dynamic loading with the loadso subsystem. 
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "SDL.h"
+
+typedef int (*fntype)(const char *);
+
+int main(int argc, char *argv[])
+{
+	int retval = 0;
+	int hello = 0;
+	const char *libname = NULL;
+	const char *symname = NULL;
+	void *lib = NULL;
+	fntype fn = NULL;
+
+	if (argc != 3) {
+		fprintf(stderr, "USAGE: %s <library> <functionname>\n");
+		fprintf(stderr, "       %s --hello <library with puts()>\n");
+		return 1;
+	}
+
+	/* Initialize SDL */
+	if ( SDL_Init(0) < 0 ) {
+		fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
+		return 2;
+	}
+
+	if (strcmp(argv[1], "--hello") == 0) {
+		hello = 1;
+		libname = argv[2];
+		symname = "puts";
+	} else {
+		libname = argv[1];
+		symname = argv[2];
+	}
+
+	lib = SDL_LoadObject(libname);
+        if (lib == NULL) {
+		fprintf(stderr, "SDL_LoadObject('%s') failed: %s\n",
+		        libname, SDL_GetError());
+		retval = 3;
+	} else {
+		fn = (fntype) SDL_LoadFunction(lib, symname);
+		if (fn == NULL) {
+			fprintf(stderr, "SDL_LoadFunction('%s') failed: %s\n",
+			        symname, SDL_GetError());
+			retval = 4;
+		} else {
+			printf("Found %s in %s at %p\n", symname, libname);
+			if (hello) {
+				printf("Calling function...\n");
+				fflush(stdout);
+				fn("     HELLO, WORLD!\n");
+				printf("...apparently, we survived.  :)\n");
+				printf("Unloading library...\n");
+				fflush(stdout);
+			}
+		}
+		SDL_UnloadObject(lib);
+	}
+	SDL_Quit();
+	return(0);
+}
+
+