|
|
1.1 root 1: #include <stdio.h>
2: #include "dirwrap.h"
3: #include "xp_dl.h"
4:
5: #ifndef STATIC_LINK
6: #if defined(__unix__)
7:
8: DLLEXPORT dll_handle DLLCALL xp_dlopen(const char **names, int mode, int major)
9: {
10: const char *name;
11: char fname[MAX_PATH+1];
12: dll_handle ret=NULL;
13: int i;
14:
15: for(; *names && (*names)[0]; names++) {
16: name=*names;
17: /* Try for version match */
18: sprintf(fname, "lib%s.so.%d", name, major);
19: if((ret=dlopen(fname, mode))!=NULL)
20: return(ret);
21:
22: /* Try for name match */
23: sprintf(fname, "lib%s.so", name, major);
24: if((ret=dlopen(fname, mode))!=NULL)
25: return(ret);
26:
27: /* Try for name match without the prefix */
28: sprintf(fname, "%s.so", name, major);
29: if((ret=dlopen(fname, mode))!=NULL)
30: return(ret);
31:
32: /* Try all previous major versions */
33: for(i=major-1; i>=0; i--) {
34: sprintf(fname, "lib%s.so.%d", name, i);
35: if((ret=dlopen(fname, mode))!=NULL)
36: return(ret);
37: }
38:
39: #if defined(__APPLE__) && defined(__MACH__)
40: /* Try for version match */
41: sprintf(fname, "lib%s.%d.dylib", name, major);
42: if((ret=dlopen(fname, mode))!=NULL)
43: return(ret);
44:
45: /* Try for name match */
46: sprintf(fname, "lib%s.dylib", name, major);
47: if((ret=dlopen(fname, mode))!=NULL)
48: return(ret);
49:
50: /* Try all previous major versions */
51: for(i=major-1; i>=0; i--) {
52: sprintf(fname, "lib%s.%d.dylib", name, i);
53: if((ret=dlopen(fname, mode))!=NULL)
54: return(ret);
55: }
56: #endif /* OS X */
57: }
58:
59: return(NULL);
60: }
61: #elif defined(_WIN32)
62: DLLEXPORT dll_handle DLLCALL xp_dlopen(const char **names, int mode, int major)
63: {
64: char fname[MAX_PATH+1];
65: dll_handle ret=NULL;
66:
67: for(; *names && (*names)[0]; names++) {
68: sprintf(fname, "%s.dll", *names);
69: if((ret=LoadLibrary(fname))!=NULL)
70: return(ret);
71: }
72: return(NULL);
73: }
74: #endif /* __unix__,_WIN32 */
75:
76: #endif /* STATIC_LINK */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.