From 9edb9c2050490d405f673da689e6e47309f15635 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Sat, 18 Apr 2020 08:18:03 -0700 Subject: [PATCH] WIN32: epicsFindSymbol() fix use of EnumProcessModules() --- .../libcom/src/osi/os/WIN32/osdFindSymbol.c | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/modules/libcom/src/osi/os/WIN32/osdFindSymbol.c b/modules/libcom/src/osi/os/WIN32/osdFindSymbol.c index 6c1fb401c..c8c74b56d 100644 --- a/modules/libcom/src/osi/os/WIN32/osdFindSymbol.c +++ b/modules/libcom/src/osi/os/WIN32/osdFindSymbol.c @@ -19,6 +19,7 @@ #include #define epicsExportSharedSymbols +#include "epicsStdio.h" #include "epicsFindSymbol.h" #ifdef _MSC_VER @@ -78,23 +79,44 @@ epicsShareFunc const char *epicsLoadError(void) epicsShareFunc void * epicsShareAPI epicsFindSymbol(const char *name) { - HMODULE dlls[128]; - DWORD ndlls=0u, i; + HANDLE proc = GetCurrentProcess(); + HMODULE *dlls=NULL; + DWORD nalloc=0u, needed=0u; void* ret = NULL; /* As a handle returned by LoadLibrary() isn't available to us, * try all loaded modules in arbitrary order. */ - if(epicsEnumProcessModules(GetCurrentProcess(), dlls, sizeof(dlls), &ndlls)) { - for(i=0; !ret && i needed) + nalloc = needed; + + for(i=0, ndlls = nalloc/sizeof(*dlls); !ret && i