SDL  2.0
testloadso.c
Go to the documentation of this file.
1 /*
2  Copyright (C) 1997-2018 Sam Lantinga <slouken@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 }
#define SDL_GetError
#define SDL_LoadObject
#define SDL_UnloadObject
#define SDL_LogError
SDL_bool retval
#define SDL_Log
int(* fntype)(const char *)
Definition: testloadso.c:22
#define SDL_Quit
#define NULL
Definition: begin_code.h:164
int main(int argc, char *argv[])
Definition: testloadso.c:25
#define SDL_Init
void * SDL_LoadFunction(void *handle, const char *name)