From 339142c2aaa82fd6e3c71fdbbb12296899e8cdd2 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 21 Mar 2012 22:09:01 +0100 Subject: [PATCH] FFI: Change ffi.load() library name resolution for Cygwin. --- src/lj_clib.c | 23 ++++++++++++++++++++--- 1 file 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--; } }