Mercurial > sdl-ios-xcode
view test/testloadso.c @ 5004:0c72ae7b7cb2
Added native atomic operations for Windows, Mac OS X, and gcc compiler intrinsics.
Changed the CAS return value to bool, so it's efficient with OSAtomicCompareAndSwap32Barrier()
Added an atomic test adapted from code by Michael Davidsaver
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 16 Jan 2011 15:16:39 -0800 |
parents | 9de326b3099c |
children |
line wrap: on
line source
/* Test program to test dynamic loading with the loadso subsystem. */ #include <stdio.h> #include <stdlib.h> #include <string.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); }