summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2012-03-21 22:09:01 +0100
committerMike Pall <mike>2012-03-21 22:09:01 +0100
commit339142c2aaa82fd6e3c71fdbbb12296899e8cdd2 (patch)
treedbc243edb72c8c2d464d5873d8ada6f2ec3e0411
parent9589e11e443b5c86db6e3e42dae22ac69d55ad95 (diff)
downloadluajit2-339142c2aaa82fd6e3c71fdbbb12296899e8cdd2.tar.gz
FFI: Change ffi.load() library name resolution for Cygwin.
-rw-r--r--src/lj_clib.c23
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--;
}
}