Browse Source

FFI: Change ffi.load() library name resolution for Cygwin.

Mike Pall 13 years ago
parent
commit
339142c2aa
1 changed files with 20 additions and 3 deletions
  1. 20 3
      src/lj_clib.c

+ 20 - 3
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--;
     }
   }