Home | History | Annotate | Download | only in test
      1 /*
      2   Copyright (C) 1997-2014 Sam Lantinga <slouken (at) libsdl.org>
      3 
      4   This software is provided 'as-is', without any express or implied
      5   warranty.  In no event will the authors be held liable for any damages
      6   arising from the use of this software.
      7 
      8   Permission is granted to anyone to use this software for any purpose,
      9   including commercial applications, and to alter it and redistribute it
     10   freely.
     11 */
     12 
     13 /* Test program to test dynamic loading with the loadso subsystem.
     14 */
     15 
     16 #include <stdio.h>
     17 #include <stdlib.h>
     18 #include <string.h>
     19 
     20 #include "SDL.h"
     21 
     22 typedef int (*fntype) (const char *);
     23 
     24 int
     25 main(int argc, char *argv[])
     26 {
     27     int retval = 0;
     28     int hello = 0;
     29     const char *libname = NULL;
     30     const char *symname = NULL;
     31     void *lib = NULL;
     32     fntype fn = NULL;
     33 
     34     if (argc != 3) {
     35         const char *app = argv[0];
     36         SDL_Log("USAGE: %s <library> <functionname>\n", app);
     37         SDL_Log("       %s --hello <lib with puts()>\n", app);
     38         return 1;
     39     }
     40 
     41     /* Initialize SDL */
     42     if (SDL_Init(0) < 0) {
     43         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
     44         return 2;
     45     }
     46 
     47     if (strcmp(argv[1], "--hello") == 0) {
     48         hello = 1;
     49         libname = argv[2];
     50         symname = "puts";
     51     } else {
     52         libname = argv[1];
     53         symname = argv[2];
     54     }
     55 
     56     lib = SDL_LoadObject(libname);
     57     if (lib == NULL) {
     58         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadObject('%s') failed: %s\n",
     59                 libname, SDL_GetError());
     60         retval = 3;
     61     } else {
     62         fn = (fntype) SDL_LoadFunction(lib, symname);
     63         if (fn == NULL) {
     64             SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadFunction('%s') failed: %s\n",
     65                     symname, SDL_GetError());
     66             retval = 4;
     67         } else {
     68             SDL_Log("Found %s in %s at %p\n", symname, libname, fn);
     69             if (hello) {
     70                 SDL_Log("Calling function...\n");
     71                 fflush(stdout);
     72                 fn("     HELLO, WORLD!\n");
     73                 SDL_Log("...apparently, we survived.  :)\n");
     74                 SDL_Log("Unloading library...\n");
     75                 fflush(stdout);
     76             }
     77         }
     78         SDL_UnloadObject(lib);
     79     }
     80     SDL_Quit();
     81     return retval;
     82 }
     83