From 339142c2aaa82fd6e3c71fdbbb12296899e8cdd2 Mon Sep 17 00:00:00 2001
From: Mike Pall <mike>
Date: Wed, 21 Mar 2012 22:09:01 +0100
Subject: 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--;
     }
   }
-- 
cgit v1.2.3-55-g6feb