]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
FFI: Change ffi.load() library name resolution for Cygwin.
authorMike Pall <mike>
Wed, 21 Mar 2012 21:09:01 +0000 (22:09 +0100)
committerMike Pall <mike>
Wed, 21 Mar 2012 21:09:01 +0000 (22:09 +0100)
src/lj_clib.c

index a716254dae2bcedf056bbf1b7a0fcc57b2db75b5..370dab7c4c3339c9833d852483d5412a44973044 100644 (file)
@@ -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--;
     }
   }