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 | } |
