[Ttssh2-commit] [9226] ロードできるプラグイン数の制限をなくした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2021年 4月 28日 (水) 01:10:42 JST


Revision: 9226
          https://osdn.net/projects/ttssh2/scm/svn/commits/9226
Author:   zmatsuo
Date:     2021-04-28 01:10:42 +0900 (Wed, 28 Apr 2021)
Log Message:
-----------
ロードできるプラグイン数の制限をなくした

- 従来は32までだった
- 不要な do { } while(0) を削除

Modified Paths:
--------------
    trunk/teraterm/teraterm/ttplug.c

-------------- next part --------------
Modified: trunk/teraterm/teraterm/ttplug.c
===================================================================
--- trunk/teraterm/teraterm/ttplug.c	2021-04-27 16:10:27 UTC (rev 9225)
+++ trunk/teraterm/teraterm/ttplug.c	2021-04-27 16:10:42 UTC (rev 9226)
@@ -43,16 +43,15 @@
 
 #include "ttplug.h"
 
-#define MAXNUMEXTENSIONS 32
-static HANDLE LibHandle[MAXNUMEXTENSIONS];
 static int NumExtensions = 0;
-static TTXExports * * Extensions;
 
 typedef struct _ExtensionList {
-  TTXExports * exports;
-  struct _ExtensionList * next;
+	TTXExports * exports;
+	HANDLE LibHandle;
 } ExtensionList;
 
+static ExtensionList *Extensions;
+
 static int compareOrder(const void * e1, const void * e2) {
   TTXExports * * exports1 = (TTXExports * *)e1;
   TTXExports * * exports2 = (TTXExports * *)e2;
@@ -60,14 +59,12 @@
   return (*exports1)->loadOrder - (*exports2)->loadOrder;
 }
 
-static void loadExtension(ExtensionList **extensions, wchar_t const *fileName)
+static void loadExtension(wchar_t const *fileName)
 {
 	DWORD err;
 	const wchar_t *sub_message;
 	HMODULE hPlugin;
 
-	if (NumExtensions >= MAXNUMEXTENSIONS)
-		return;
 	hPlugin = LoadLibraryW(fileName);
 	if (hPlugin != NULL) {
 		TTXBindProc bind = NULL;
@@ -81,24 +78,34 @@
 		if (bind == NULL)
 			bind = (TTXBindProc)GetProcAddress(hPlugin, "TTXBind");
 		if (bind != NULL) {
-			ExtensionList *newExtension = (ExtensionList *)malloc(sizeof(ExtensionList));
+			TTXExports * exports = (TTXExports *)malloc(sizeof(TTXExports));
+			if (exports == NULL) {
+				return;
+			}
+			memset(exports, 0, sizeof(TTXExports));
+			exports->size = sizeof(TTXExports);
 
-			newExtension->exports = (TTXExports *)malloc(sizeof(TTXExports));
-			memset(newExtension->exports, 0, sizeof(TTXExports));
-			newExtension->exports->size = sizeof(TTXExports);
-			if (bind(TTVERSION, newExtension->exports)) {
-				newExtension->next = *extensions;
-				*extensions = newExtension;
-				LibHandle[NumExtensions] = hPlugin;
+			if (bind(TTVERSION, exports)) {
+				ExtensionList *newExtension;
+				ExtensionList *extensions = (ExtensionList *)realloc(Extensions, sizeof(ExtensionList) * (NumExtensions + 1));
+				if (extensions == NULL) {
+					free(exports);
+					FreeLibrary(hPlugin);
+					return;
+				}
+				Extensions = extensions;
+				newExtension = &extensions[NumExtensions];
 				NumExtensions++;
+
+				newExtension->exports = exports;
+				newExtension->LibHandle = hPlugin;
 				return;
 			}
 			else {
-				free(newExtension->exports);
-				free(newExtension);
+				free(exports);
 			}
 		}
-		FreeLibrary(LibHandle[NumExtensions]);
+		FreeLibrary(hPlugin);
 	}
 
 	err = GetLastError();
@@ -128,7 +135,6 @@
 
 void PASCAL TTXInit(PTTSet ts_, PComVar cv_)
 {
-	ExtensionList * extensionList = NULL;
 	int i;
 	wchar_t *load_mask;
 	WIN32_FIND_DATAW fd;
@@ -142,7 +148,7 @@
 		do {
 			wchar_t *filename;
 			aswprintf(&filename, L"%s\\%s", HomeDirW, fd.cFileName);
-			loadExtension(&extensionList, filename);
+			loadExtension(filename);
 			free(filename);
 		} while (FindNextFileW(hFind, &fd));
 		FindClose(hFind);
@@ -152,21 +158,11 @@
 
 	if (NumExtensions==0) return;
 
-	Extensions = (TTXExports * *)malloc(sizeof(TTXExports *)*NumExtensions);
-	for (i = 0; i < NumExtensions; i++) {
-		ExtensionList * old;
-
-		Extensions[i] = extensionList->exports;
-		old = extensionList;
-		extensionList = extensionList->next;
-		free(old);
-	}
-
 	qsort(Extensions, NumExtensions, sizeof(Extensions[0]), compareOrder);
 
 	for (i = 0; i < NumExtensions; i++) {
-		if (Extensions[i]->TTXInit != NULL) {
-			Extensions[i]->TTXInit(ts_, cv_);
+		if (Extensions[i].exports->TTXInit != NULL) {
+			Extensions[i].exports->TTXInit(ts_, cv_);
 		}
 	}
 }
@@ -175,8 +171,8 @@
   int i;
 
   for (i = 0; i < NumExtensions; i++) {
-    if (Extensions[i]->TTXOpenTCP != NULL) {
-      Extensions[i]->TTXOpenTCP(hooks);
+    if (Extensions[i].exports->TTXOpenTCP != NULL) {
+      Extensions[i].exports->TTXOpenTCP(hooks);
     }
   }
 }
@@ -183,16 +179,14 @@
 
 void PASCAL TTXOpenTCP(void)
 {
-	do {
-		static TTXSockHooks SockHooks = {
-			&Pclosesocket, &Pconnect, &Phtonl, &Phtons, &Pinet_addr,
-			&Pioctlsocket, &Precv, &Pselect, &Psend, &Psetsockopt,
-			&Psocket, &PWSAAsyncSelect, &PWSAAsyncGetHostByName,
-			&PWSACancelAsyncRequest, &PWSAGetLastError,
-			/* &Pgetaddrinfo,*/ &Pfreeaddrinfo, &PWSAAsyncGetAddrInfo
-		};
-		TTXInternalOpenTCP(&SockHooks);
-	} while (0);
+	static TTXSockHooks SockHooks = {
+		&Pclosesocket, &Pconnect, &Phtonl, &Phtons, &Pinet_addr,
+		&Pioctlsocket, &Precv, &Pselect, &Psend, &Psetsockopt,
+		&Psocket, &PWSAAsyncSelect, &PWSAAsyncGetHostByName,
+		&PWSACancelAsyncRequest, &PWSAGetLastError,
+		/* &Pgetaddrinfo,*/ &Pfreeaddrinfo, &PWSAAsyncGetAddrInfo
+	};
+	TTXInternalOpenTCP(&SockHooks);
 }
 
 static void PASCAL TTXInternalCloseTCP(TTXSockHooks * hooks) {
@@ -199,8 +193,8 @@
   int i;
 
   for (i = NumExtensions - 1; i >= 0; i--) {
-    if (Extensions[i]->TTXCloseTCP != NULL) {
-      Extensions[i]->TTXCloseTCP(hooks);
+    if (Extensions[i].exports->TTXCloseTCP != NULL) {
+      Extensions[i].exports->TTXCloseTCP(hooks);
     }
   }
 }
@@ -207,16 +201,14 @@
 
 void PASCAL TTXCloseTCP(void)
 {
-	do {
-		static TTXSockHooks SockHooks = {
-			&Pclosesocket, &Pconnect, &Phtonl, &Phtons, &Pinet_addr,
-			&Pioctlsocket, &Precv, &Pselect, &Psend, &Psetsockopt,
-			&Psocket, &PWSAAsyncSelect, &PWSAAsyncGetHostByName,
-			&PWSACancelAsyncRequest, &PWSAGetLastError,
-			/* &Pgetaddrinfo,*/ &Pfreeaddrinfo, &PWSAAsyncGetAddrInfo
-		};
-		TTXInternalCloseTCP(&SockHooks);
-	} while (0);
+	static TTXSockHooks SockHooks = {
+		&Pclosesocket, &Pconnect, &Phtonl, &Phtons, &Pinet_addr,
+		&Pioctlsocket, &Precv, &Pselect, &Psend, &Psetsockopt,
+		&Psocket, &PWSAAsyncSelect, &PWSAAsyncGetHostByName,
+		&PWSACancelAsyncRequest, &PWSAGetLastError,
+		/* &Pgetaddrinfo,*/ &Pfreeaddrinfo, &PWSAAsyncGetAddrInfo
+	};
+	TTXInternalCloseTCP(&SockHooks);
 }
 
 static void PASCAL TTXInternalOpenFile(TTXFileHooks * hooks) {
@@ -223,8 +215,8 @@
   int i;
 
   for (i = 0; i < NumExtensions; i++) {
-    if (Extensions[i]->TTXOpenFile != NULL) {
-      Extensions[i]->TTXOpenFile(hooks);
+    if (Extensions[i].exports->TTXOpenFile != NULL) {
+      Extensions[i].exports->TTXOpenFile(hooks);
     }
   }
 }
@@ -231,12 +223,10 @@
 
 void PASCAL TTXOpenFile(void)
 {
-	do {
-		static TTXFileHooks FileHooks = {
-			&PCreateFile, &PCloseFile, &PReadFile, &PWriteFile
-		};
-		TTXInternalOpenFile(&FileHooks);
-	} while (0);
+	static TTXFileHooks FileHooks = {
+		&PCreateFile, &PCloseFile, &PReadFile, &PWriteFile
+	};
+	TTXInternalOpenFile(&FileHooks);
 }
 
 static void PASCAL TTXInternalCloseFile(TTXFileHooks * hooks) {
@@ -243,8 +233,8 @@
   int i;
 
   for (i = NumExtensions - 1; i >= 0; i--) {
-    if (Extensions[i]->TTXCloseFile != NULL) {
-      Extensions[i]->TTXCloseFile(hooks);
+    if (Extensions[i].exports->TTXCloseFile != NULL) {
+      Extensions[i].exports->TTXCloseFile(hooks);
     }
   }
 }
@@ -251,12 +241,10 @@
 
 void PASCAL TTXCloseFile(void)
 {
-	do {
-		static TTXFileHooks FileHooks = {
-			&PCreateFile, &PCloseFile, &PReadFile, &PWriteFile
-		};
-		TTXInternalCloseFile(&FileHooks);
-	} while (0);
+	static TTXFileHooks FileHooks = {
+		&PCreateFile, &PCloseFile, &PReadFile, &PWriteFile
+	};
+	TTXInternalCloseFile(&FileHooks);
 }
 
 static void PASCAL TTXInternalGetUIHooks(TTXUIHooks * hooks) {
@@ -263,8 +251,8 @@
   int i;
 
   for (i = 0; i < NumExtensions; i++) {
-    if (Extensions[i]->TTXGetUIHooks != NULL) {
-      Extensions[i]->TTXGetUIHooks(hooks);
+    if (Extensions[i].exports->TTXGetUIHooks != NULL) {
+      Extensions[i].exports->TTXGetUIHooks(hooks);
     }
   }
 }
@@ -271,14 +259,12 @@
 
 void PASCAL TTXGetUIHooks(void)
 {
-	do {
-		static TTXUIHooks UIHooks = {
-			&SetupTerminal, &SetupWin, &SetupKeyboard, &SetupSerialPort,
-			&SetupTCPIP, &GetHostName, &ChangeDirectory, &AboutDialog,
-			&ChooseFontDlg, &SetupGeneral, &WindowWindow
-		};
-		TTXInternalGetUIHooks(&UIHooks);
-	} while (0);
+	static TTXUIHooks UIHooks = {
+		&SetupTerminal, &SetupWin, &SetupKeyboard, &SetupSerialPort,
+		&SetupTCPIP, &GetHostName, &ChangeDirectory, &AboutDialog,
+		&ChooseFontDlg, &SetupGeneral, &WindowWindow
+	};
+	TTXInternalGetUIHooks(&UIHooks);
 }
 
 static void PASCAL TTXInternalGetSetupHooks(TTXSetupHooks * hooks) {
@@ -285,8 +271,8 @@
   int i;
 
   for (i = NumExtensions - 1; i >= 0; i--) {
-    if (Extensions[i]->TTXGetSetupHooks != NULL) {
-      Extensions[i]->TTXGetSetupHooks(hooks);
+    if (Extensions[i].exports->TTXGetSetupHooks != NULL) {
+      Extensions[i].exports->TTXGetSetupHooks(hooks);
     }
   }
 }
@@ -293,13 +279,11 @@
 
 void PASCAL TTXGetSetupHooks(void)
 {
-	do {
-		static TTXSetupHooks SetupHooks = {
-			&ReadIniFile, &WriteIniFile, &ReadKeyboardCnf, &CopyHostList,
-			&AddHostToList, &ParseParam
-		};
-		TTXInternalGetSetupHooks(&SetupHooks);
-	} while (0);
+	static TTXSetupHooks SetupHooks = {
+		&ReadIniFile, &WriteIniFile, &ReadKeyboardCnf, &CopyHostList,
+		&AddHostToList, &ParseParam
+	};
+	TTXInternalGetSetupHooks(&SetupHooks);
 }
 
 void PASCAL TTXSetWinSize(int rows, int cols) {
@@ -306,8 +290,8 @@
   int i;
 
   for (i = 0; i < NumExtensions; i++) {
-    if (Extensions[i]->TTXSetWinSize != NULL) {
-      Extensions[i]->TTXSetWinSize(rows, cols);
+    if (Extensions[i].exports->TTXSetWinSize != NULL) {
+      Extensions[i].exports->TTXSetWinSize(rows, cols);
     }
   }
 }
@@ -316,8 +300,8 @@
   int i;
 
   for (i = 0; i < NumExtensions; i++) {
-    if (Extensions[i]->TTXModifyMenu != NULL) {
-      Extensions[i]->TTXModifyMenu(menu);
+    if (Extensions[i].exports->TTXModifyMenu != NULL) {
+      Extensions[i].exports->TTXModifyMenu(menu);
     }
   }
 }
@@ -326,8 +310,8 @@
   int i;
 
   for (i = 0; i < NumExtensions; i++) {
-    if (Extensions[i]->TTXModifyPopupMenu != NULL) {
-      Extensions[i]->TTXModifyPopupMenu(menu);
+    if (Extensions[i].exports->TTXModifyPopupMenu != NULL) {
+      Extensions[i].exports->TTXModifyPopupMenu(menu);
     }
   }
 }
@@ -336,8 +320,8 @@
   int i;
 
   for (i = NumExtensions - 1; i >= 0; i--) {
-    if (Extensions[i]->TTXProcessCommand != NULL) {
-      if (Extensions[i]->TTXProcessCommand(hWin,cmd)) {
+    if (Extensions[i].exports->TTXProcessCommand != NULL) {
+      if (Extensions[i].exports->TTXProcessCommand(hWin,cmd)) {
         return TRUE;
       }
     }
@@ -346,26 +330,27 @@
   return FALSE;
 }
 
-void PASCAL TTXEnd(void) {
-  int i;
+void PASCAL TTXEnd(void)
+{
+	int i;
 
-  if (NumExtensions==0) return;
+	if (NumExtensions == 0)
+		return;
 
-  for (i = NumExtensions - 1; i >= 0; i--) {
-    if (Extensions[i]->TTXEnd != NULL) {
-      Extensions[i]->TTXEnd();
-    }
-  }
+	for (i = NumExtensions - 1; i >= 0; i--) {
+		if (Extensions[i].exports->TTXEnd != NULL) {
+			Extensions[i].exports->TTXEnd();
+		}
+	}
 
-  for (i=0; i<NumExtensions; i++)
-    FreeLibrary(LibHandle[i]);
+	for (i = 0; i < NumExtensions; i++) {
+		free(Extensions[i].exports);
+		FreeLibrary(Extensions[i].LibHandle);
+	}
 
-  for (i = 0; i < NumExtensions; i++) {
-	  free(Extensions[i]);
-  }
-
-  free(Extensions);
-  NumExtensions = 0;
+	free(Extensions);
+	Extensions = NULL;
+	NumExtensions = 0;
 }
 
 void PASCAL TTXSetCommandLine(PCHAR cmd, int cmdlen, PGetHNRec rec) {
@@ -372,8 +357,8 @@
   int i;
 
   for (i = 0; i < NumExtensions; i++) {
-    if (Extensions[i]->TTXSetCommandLine != NULL) {
-      Extensions[i]->TTXSetCommandLine(cmd, cmdlen, rec);
+    if (Extensions[i].exports->TTXSetCommandLine != NULL) {
+      Extensions[i].exports->TTXSetCommandLine(cmd, cmdlen, rec);
     }
   }
 }


Ttssh2-commit メーリングリストの案内
Back to archive index