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 | |
parent | 9589e11e443b5c86db6e3e42dae22ac69d55ad95 (diff) | |
download | luajit2-339142c2aaa82fd6e3c71fdbbb12296899e8cdd2.tar.gz |
FFI: Change ffi.load() library name resolution for Cygwin.
-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) #define clib_error(L, fmt, name) clib_error_(L) +#if defined(__CYGWIN__) +#define CLIB_SOPREFIX "cyg" +#else +#define CLIB_SOPREFIX "lib" +#endif + #if LJ_TARGET_OSX #define CLIB_SOEXT "%s.dylib" +#elif defined(__CYGWIN__) +#define CLIB_SOEXT "%s.dll" #else #define CLIB_SOEXT "%s.so" #endif static const char *clib_extname(lua_State *L, const char *name) { - if (!strchr(name, '/')) { + if (!strchr(name, '/') +#ifdef __CYGWIN__ + && !strchr(name, '\\') +#endif + ) { if (!strchr(name, '.')) { name = lj_str_pushf(L, CLIB_SOEXT, name); L->top--; +#ifdef __CYGWIN__ + } else { + return name; +#endif } - if (!(name[0] == 'l' && name[1] == 'i' && name[2] == 'b')) { - name = lj_str_pushf(L, "lib%s", name); + if (!(name[0] == CLIB_SOPREFIX[0] && name[1] == CLIB_SOPREFIX[1] && + name[2] == CLIB_SOPREFIX[2])) { + name = lj_str_pushf(L, CLIB_SOPREFIX "%s", name); L->top--; } } |