Skip to content

Latest commit

 

History

History
82 lines (71 loc) · 2.24 KB

testloadso.c

File metadata and controls

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