diff options
author | Mike Pall <mike> | 2012-03-21 22:09:01 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2012-03-21 22:09:01 +0100 |
commit | 339142c2aaa82fd6e3c71fdbbb12296899e8cdd2 (patch) | |
tree | dbc243edb72c8c2d464d5873d8ada6f2ec3e0411 /src | |
parent | 9589e11e443b5c86db6e3e42dae22ac69d55ad95 (diff) | |
download | luajit-339142c2aaa82fd6e3c71fdbbb12296899e8cdd2.tar.gz luajit-339142c2aaa82fd6e3c71fdbbb12296899e8cdd2.tar.bz2 luajit-339142c2aaa82fd6e3c71fdbbb12296899e8cdd2.zip |
FFI: Change ffi.load() library name resolution for Cygwin.
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_clib.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/lj_clib.c b/src/lj_clib.c index a716254d..370dab7c 100644 --- a/src/lj_clib.c +++ b/src/lj_clib.c | |||
@@ -39,21 +39,38 @@ LJ_NORET LJ_NOINLINE static void clib_error_(lua_State *L) | |||
39 | 39 | ||
40 | #define clib_error(L, fmt, name) clib_error_(L) | 40 | #define clib_error(L, fmt, name) clib_error_(L) |
41 | 41 | ||
42 | #if defined(__CYGWIN__) | ||
43 | #define CLIB_SOPREFIX "cyg" | ||
44 | #else | ||
45 | #define CLIB_SOPREFIX "lib" | ||
46 | #endif | ||
47 | |||
42 | #if LJ_TARGET_OSX | 48 | #if LJ_TARGET_OSX |
43 | #define CLIB_SOEXT "%s.dylib" | 49 | #define CLIB_SOEXT "%s.dylib" |
50 | #elif defined(__CYGWIN__) | ||
51 | #define CLIB_SOEXT "%s.dll" | ||
44 | #else | 52 | #else |
45 | #define CLIB_SOEXT "%s.so" | 53 | #define CLIB_SOEXT "%s.so" |
46 | #endif | 54 | #endif |
47 | 55 | ||
48 | static const char *clib_extname(lua_State *L, const char *name) | 56 | static const char *clib_extname(lua_State *L, const char *name) |
49 | { | 57 | { |
50 | if (!strchr(name, '/')) { | 58 | if (!strchr(name, '/') |
59 | #ifdef __CYGWIN__ | ||
60 | && !strchr(name, '\\') | ||
61 | #endif | ||
62 | ) { | ||
51 | if (!strchr(name, '.')) { | 63 | if (!strchr(name, '.')) { |
52 | name = lj_str_pushf(L, CLIB_SOEXT, name); | 64 | name = lj_str_pushf(L, CLIB_SOEXT, name); |
53 | L->top--; | 65 | L->top--; |
66 | #ifdef __CYGWIN__ | ||
67 | } else { | ||
68 | return name; | ||
69 | #endif | ||
54 | } | 70 | } |
55 | if (!(name[0] == 'l' && name[1] == 'i' && name[2] == 'b')) { | 71 | if (!(name[0] == CLIB_SOPREFIX[0] && name[1] == CLIB_SOPREFIX[1] && |
56 | name = lj_str_pushf(L, "lib%s", name); | 72 | name[2] == CLIB_SOPREFIX[2])) { |
73 | name = lj_str_pushf(L, CLIB_SOPREFIX "%s", name); | ||
57 | L->top--; | 74 | L->top--; |
58 | } | 75 | } |
59 | } | 76 | } |