test/testloadso.c
author Sam Lantinga <slouken@libsdl.org>
Thu, 14 Jun 2007 13:21:29 +0000
changeset 2120 2c835d58faad
parent 2068 f16a7d02a176
child 3338 9de326b3099c
permissions -rw-r--r--
make indent
     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
    13 main(int argc, char *argv[])
    14 {
    15     int retval = 0;
    16     int hello = 0;
    17     const char *libname = NULL;
    18     const char *symname = NULL;
    19     void *lib = NULL;
    20     fntype fn = NULL;
    21 
    22     if (argc != 3) {
    23         const char *app = argv[0];
    24         fprintf(stderr, "USAGE: %s <library> <functionname>\n", app);
    25         fprintf(stderr, "       %s --hello <lib with puts()>\n", app);
    26         return 1;
    27     }
    28 
    29     /* Initialize SDL */
    30     if (SDL_Init(0) < 0) {
    31         fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
    32         return 2;
    33     }
    34 
    35     if (strcmp(argv[1], "--hello") == 0) {
    36         hello = 1;
    37         libname = argv[2];
    38         symname = "puts";
    39     } else {
    40         libname = argv[1];
    41         symname = argv[2];
    42     }
    43 
    44     lib = SDL_LoadObject(libname);
    45     if (lib == NULL) {
    46         fprintf(stderr, "SDL_LoadObject('%s') failed: %s\n",
    47                 libname, SDL_GetError());
    48         retval = 3;
    49     } else {
    50         fn = (fntype) SDL_LoadFunction(lib, symname);
    51         if (fn == NULL) {
    52             fprintf(stderr, "SDL_LoadFunction('%s') failed: %s\n",
    53                     symname, SDL_GetError());
    54             retval = 4;
    55         } else {
    56             printf("Found %s in %s at %p\n", symname, libname, fn);
    57             if (hello) {
    58                 printf("Calling function...\n");
    59                 fflush(stdout);
    60                 fn("     HELLO, WORLD!\n");
    61                 printf("...apparently, we survived.  :)\n");
    62                 printf("Unloading library...\n");
    63                 fflush(stdout);
    64             }
    65         }
    66         SDL_UnloadObject(lib);
    67     }
    68     SDL_Quit();
    69     return (0);
    70 }