aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)
39 39
40#define clib_error(L, fmt, name) clib_error_(L) 40#define clib_error(L, fmt, name) clib_error_(L)
41 41
42#if defined(__CYGWIN__)
43#define CLIB_SOPREFIX "cyg"
44#else
45#define CLIB_SOPREFIX "lib"
46#endif
47
42#if LJ_TARGET_OSX 48#if LJ_TARGET_OSX
43#define CLIB_SOEXT "%s.dylib" 49#define CLIB_SOEXT "%s.dylib"
50#elif defined(__CYGWIN__)
51#define CLIB_SOEXT "%s.dll"
44#else 52#else
45#define CLIB_SOEXT "%s.so" 53#define CLIB_SOEXT "%s.so"
46#endif 54#endif
47 55
48static const char *clib_extname(lua_State *L, const char *name) 56static const char *clib_extname(lua_State *L, const char *name)
49{ 57{
50 if (!strchr(name, '/')) { 58 if (!strchr(name, '/')
59#ifdef __CYGWIN__
60 && !strchr(name, '\\')
61#endif
62 ) {
51 if (!strchr(name, '.')) { 63 if (!strchr(name, '.')) {
52 name = lj_str_pushf(L, CLIB_SOEXT, name); 64 name = lj_str_pushf(L, CLIB_SOEXT, name);
53 L->top--; 65 L->top--;
66#ifdef __CYGWIN__
67 } else {
68 return name;
69#endif
54 } 70 }
55 if (!(name[0] == 'l' && name[1] == 'i' && name[2] == 'b')) { 71 if (!(name[0] == CLIB_SOPREFIX[0] && name[1] == CLIB_SOPREFIX[1] &&
56 name = lj_str_pushf(L, "lib%s", name); 72 name[2] == CLIB_SOPREFIX[2])) {
73 name = lj_str_pushf(L, CLIB_SOPREFIX "%s", name);
57 L->top--; 74 L->top--;
58 } 75 }
59 } 76 }