From b8a13f68371e0c9f46ae9fb73aa63108086d412a Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Wed, 21 Oct 2015 17:08:49 +0200 Subject: [PATCH] first attempt to do win style directory read --- require.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/require.c b/require.c index fa1bdd5..6a79612 100644 --- a/require.c +++ b/require.c @@ -16,7 +16,6 @@ #include #include #include -#include #include #include @@ -56,6 +55,7 @@ int requireDebug=0; #if defined (vxWorks) + #include #include #include #include @@ -104,6 +104,7 @@ int requireDebug=0; #elif defined (__unix) + #include #include #define HMODULE void * @@ -128,6 +129,12 @@ int requireDebug=0; #define EXT ".dll" #define getAddress(module, name) GetProcAddress(module, name) + + /* for readdir emulation: */ + #define DIR HANDLE + #define dirent _WIN32_FIND_DATA + #define d_name cFileName + #else #warning unknwn OS @@ -1074,6 +1081,23 @@ static int require_priv(const char* module, const char* version, const char* arg if (requireDebug) printf("require: trying %.*s\n", dirlen, dirname); +#ifdef _WIN32 + snprintf(filename, sizeof(filename), "%.*s" OSI_PATH_SEPARATOR "%s" OSI_PATH_SEPARATOR "%n*", + dirlen, dirname, module, &modulediroffs); + dirlen++; + /* filename = "/[dirlen]/[modulediroffs]*" */ + + /* Does the module directory exist? */ + dir = FindFirstFile(filename, &dirent); + if (dir != INVALID_HANDLE_VALUE) + { + if (requireDebug) + printf("require: found directory %s\n", filename); + do + { + if (!(dirent->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) continue; /* not a directory */ + if ((dirent->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) continue; /* hidden */ +#else snprintf(filename, sizeof(filename), "%.*s" OSI_PATH_SEPARATOR "%s" OSI_PATH_SEPARATOR "%n", dirlen, dirname, module, &modulediroffs); dirlen++; @@ -1092,6 +1116,7 @@ static int require_priv(const char* module, const char* version, const char* arg #ifdef _DIRENT_HAVE_D_TYPE if (dirent->d_type != DT_DIR && dirent->d_type != DT_UNKNOWN) continue; /* not a directory */ #endif +#endif if (dirent->d_name[0] == '.') continue; /* ignore hidden directories */ someVersionFound = 1; @@ -1167,7 +1192,12 @@ static int require_priv(const char* module, const char* version, const char* arg found = founddir + modulediroffs; /* version part in the path */ if (status == EXACT) break; } +#ifdef _WIN32 + while (FindNextFile(dir, &dirent); + FindClose(dir); +#else closedir(dir); +#endif } else {