test/testloadso.c
author Mike Gorchak <lestat@i.com.ua>
Sat, 21 Nov 2009 08:42:42 +0000
changeset 3478 f7541260e89c
parent 3338 9de326b3099c
child 5535 96594ac5fd1a
permissions -rw-r--r--
Added support for QNX default font. Backspace and Return keys now handled.
     1 
     2 /* Test program to test dynamic loading with the loadso subsystem.
     3 */
     4 
     5 #include <stdio.h>
     6 #include <stdlib.h>
     7 #include <string.h>
     8 
     9 #include "SDL.h"
    10 
    11 typedef int (*fntype) (const char *);
    12 
    13 int
    14 main(int argc, char *argv[])
    15 {
    16     int retval = 0;
    17     int hello = 0;
    18     const char *libname = NULL;
    19     const char *symname = NULL;
    20     void *lib = NULL;
    21     fntype fn = NULL;
    22 
    23     if (argc != 3) {
    24         const char *app = argv[0];
    25         fprintf(stderr, "USAGE: %s <library> <functionname>\n", app);
    26         fprintf(stderr, "       %s --hello <lib with puts()>\n", app);
    27         return 1;
    28     }
    29 
    30     /* Initialize SDL */
    31     if (SDL_Init(0) < 0) {
    32         fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
    33         return 2;
    34     }
    35 
    36     if (strcmp(argv[1], "--hello") == 0) {
    37         hello = 1;
    38         libname = argv[2];
    39         symname = "puts";
    40     } else {
    41         libname = argv[1];
    42         symname = argv[2];
    43     }
    44 
    45     lib = SDL_LoadObject(libname);
    46     if (lib == NULL) {
    47         fprintf(stderr, "SDL_LoadObject('%s') failed: %s\n",
    48                 libname, SDL_GetError());
    49         retval = 3;
    50     } else {
    51         fn = (fntype) SDL_LoadFunction(lib, symname);
    52         if (fn == NULL) {
    53             fprintf(stderr, "SDL_LoadFunction('%s') failed: %s\n",
    54                     symname, SDL_GetError());
    55             retval = 4;
    56         } else {
    57             printf("Found %s in %s at %p\n", symname, libname, fn);
    58             if (hello) {
    59                 printf("Calling function...\n");
    60                 fflush(stdout);
    61                 fn("     HELLO, WORLD!\n");
    62                 printf("...apparently, we survived.  :)\n");
    63                 printf("Unloading library...\n");
    64                 fflush(stdout);
    65             }
    66         }
    67         SDL_UnloadObject(lib);
    68     }
    69     SDL_Quit();
    70     return (0);
    71 }