annotate test/testloadso.c @ 3261:72b542f34739

The new, cleaner, version of the atomic operations. The dummy code is what you should start working with to port atomic ops. The linux code appears to be complete and *should* be the base of all Unix and GCC based versions. The macosx and win32 versions are currently just copies of the dummy code. I will begin working on the windows version as soon as this check in is done. I need someone to work on the Mac OS X version. I'm afraid that this check in will break QNX (Sorry!)
author Bob Pendleton <bob@pendleton.com>
date Thu, 17 Sep 2009 20:35:12 +0000
parents 2c835d58faad
children 9de326b3099c
rev   line source
2067
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
1
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
2 /* Test program to test dynamic loading with the loadso subsystem.
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
3 */
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
4
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
5 #include <stdio.h>
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
6 #include <stdlib.h>
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
7
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
8 #include "SDL.h"
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
9
2120
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
10 typedef int (*fntype) (const char *);
2067
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
11
2120
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
12 int
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
13 main(int argc, char *argv[])
2067
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
14 {
2120
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
15 int retval = 0;
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
16 int hello = 0;
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
17 const char *libname = NULL;
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
18 const char *symname = NULL;
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
19 void *lib = NULL;
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
20 fntype fn = NULL;
2067
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
21
2120
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
22 if (argc != 3) {
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
23 const char *app = argv[0];
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
24 fprintf(stderr, "USAGE: %s <library> <functionname>\n", app);
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
25 fprintf(stderr, " %s --hello <lib with puts()>\n", app);
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
26 return 1;
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
27 }
2067
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
28
2120
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
29 /* Initialize SDL */
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
30 if (SDL_Init(0) < 0) {
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
31 fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
32 return 2;
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
33 }
2067
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
34
2120
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
35 if (strcmp(argv[1], "--hello") == 0) {
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
36 hello = 1;
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
37 libname = argv[2];
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
38 symname = "puts";
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
39 } else {
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
40 libname = argv[1];
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
41 symname = argv[2];
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
42 }
2067
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
43
2120
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
44 lib = SDL_LoadObject(libname);
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
45 if (lib == NULL) {
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
46 fprintf(stderr, "SDL_LoadObject('%s') failed: %s\n",
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
47 libname, SDL_GetError());
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
48 retval = 3;
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
49 } else {
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
50 fn = (fntype) SDL_LoadFunction(lib, symname);
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
51 if (fn == NULL) {
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
52 fprintf(stderr, "SDL_LoadFunction('%s') failed: %s\n",
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
53 symname, SDL_GetError());
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
54 retval = 4;
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
55 } else {
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
56 printf("Found %s in %s at %p\n", symname, libname, fn);
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
57 if (hello) {
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
58 printf("Calling function...\n");
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
59 fflush(stdout);
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
60 fn(" HELLO, WORLD!\n");
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
61 printf("...apparently, we survived. :)\n");
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
62 printf("Unloading library...\n");
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
63 fflush(stdout);
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
64 }
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
65 }
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
66 SDL_UnloadObject(lib);
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
67 }
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
68 SDL_Quit();
2c835d58faad make indent
Sam Lantinga <slouken@libsdl.org>
parents: 2068
diff changeset
69 return (0);
2067
dcdb175c2829 Merged r2899:2900 from SDL-1.2 branch to trunk: testloadso program.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
70 }