view test/testloadso.c @ 4347:38f22ed3a433 SDL-1.2

Option to fix bug #851 For some people setting the period size works better (and is what SDL 1.2.13 did), but for most people it's the same or worse. You can use an environment variable to pick which one you want.
author Sam Lantinga <slouken@libsdl.org>
date Sat, 17 Oct 2009 06:55:17 +0000
parents f1699aecb65d
children 2c835d58faad
line wrap: on
line source


/* 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) {
		const char *app = argv[0];
		fprintf(stderr, "USAGE: %s <library> <functionname>\n", app);
		fprintf(stderr, "       %s --hello <lib with puts()>\n", app);
		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, fn);
			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);
}