Skip to content

Commit

Permalink
Merge pull request #6761 from javidcf/patch-1
Browse files Browse the repository at this point in the history
Support arbitrary number of loaded modules on Windows
  • Loading branch information
radarhere committed Jan 7, 2023
2 parents b6c7a83 + 2cc40cc commit a22f6dd
Showing 1 changed file with 22 additions and 7 deletions.
29 changes: 22 additions & 7 deletions src/Tk/tkImaging.c
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ load_tkinter_funcs(void) {
* Return 0 for success, non-zero for failure.
*/

HMODULE hMods[1024];
HMODULE* hMods = NULL;
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i;
Expand All @@ -327,33 +327,48 @@ load_tkinter_funcs(void) {
/* Returns pseudo-handle that does not need to be closed */
hProcess = GetCurrentProcess();

/* Allocate module handlers array */
if (!EnumProcessModules(hProcess, NULL, 0, &cbNeeded)) {
#if defined(__CYGWIN__)
PyErr_SetString(PyExc_OSError, "Call to EnumProcessModules failed");
#else
PyErr_SetFromWindowsErr(0);
#endif
return 1;
}
if (!(hMods = (HMODULE*) malloc(cbNeeded))) {
PyErr_NoMemory();
return 1;
}

/* Iterate through modules in this process looking for Tcl / Tk names */
if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) {
if (EnumProcessModules(hProcess, hMods, cbNeeded, &cbNeeded)) {
for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) {
if (!found_tcl) {
found_tcl = get_tcl(hMods[i]);
if (found_tcl == -1) {
return 1;
break;
}
}
if (!found_tk) {
found_tk = get_tk(hMods[i]);
if (found_tk == -1) {
return 1;
break;
}
}
if (found_tcl && found_tk) {
return 0;
break;
}
}
}

free(hMods);
if (found_tcl == 0) {
PyErr_SetString(PyExc_RuntimeError, "Could not find Tcl routines");
} else {
} else if (found_tk == 0) {
PyErr_SetString(PyExc_RuntimeError, "Could not find Tk routines");
}
return 1;
return (int) ((found_tcl != 1) || (found_tk != 1));
}

#else /* not Windows */
Expand Down

0 comments on commit a22f6dd

Please sign in to comment.