[ros-diffs] [amunger] 24371: Patch from ShadowFlare, bug 1838. "The current implementation continues to register or unregister additional DLLs that were specified, even if one of the earlier ones failed. The behavior on the Microsoft version is different; if one fails, it stops there instead of continuing. Some installers may possibly depend on this behavior."

amunger at svn.reactos.org amunger at svn.reactos.org
Tue Oct 3 00:21:38 CEST 2006


Author: amunger
Date: Tue Oct  3 02:21:37 2006
New Revision: 24371

URL: http://svn.reactos.org/svn/reactos?rev=24371&view=rev
Log:
Patch from ShadowFlare, bug 1838.

"The current implementation continues to register or unregister additional DLLs
that were specified, even if one of the earlier ones failed.  The behavior on
the Microsoft version is different; if one fails, it stops there instead of
continuing.  Some installers may possibly depend on this behavior."

Modified:
    trunk/reactos/base/system/regsvr32/regsvr32.c

Modified: trunk/reactos/base/system/regsvr32/regsvr32.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/regsvr32/regsvr32.c?rev=24371&r1=24370&r2=24371&view=diff
==============================================================================
--- trunk/reactos/base/system/regsvr32/regsvr32.c (original)
+++ trunk/reactos/base/system/regsvr32/regsvr32.c Tue Oct  3 02:21:37 2006
@@ -1,10 +1,10 @@
 /*
  * ReactOS regsvr32
- * Copyright (C) 2004 ReactOS Team
+ * Copyright (C) 2004-2006 ReactOS Team
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS regsvr32.exe
- * FILE:            apps/utils/regsvr32/regsvr32.c
+ * FILE:            base/system/regsvr32/regsvr32.c
  * PURPOSE:         Register a COM component in the registry
  * PROGRAMMER:      ShadowFlare (blakflare at hotmail.com)
  */
@@ -59,13 +59,13 @@
 LPCTSTR ModuleTitle = _T("RegSvr32");
 
 TCHAR UsageMessage[RC_STRING_MAX_SIZE];
-TCHAR NoDllSpecified[RC_STRING_MAX_SIZE]; 
-TCHAR InvalidFlag[RC_STRING_MAX_SIZE]; 
-TCHAR SwitchN_NoI[RC_STRING_MAX_SIZE]; 
+TCHAR NoDllSpecified[RC_STRING_MAX_SIZE];
+TCHAR InvalidFlag[RC_STRING_MAX_SIZE];
+TCHAR SwitchN_NoI[RC_STRING_MAX_SIZE];
 TCHAR DllNotLoaded[RC_STRING_MAX_SIZE];
 TCHAR MissingEntry[RC_STRING_MAX_SIZE];
-TCHAR FailureMessage[RC_STRING_MAX_SIZE]; 
-TCHAR SuccessMessage[RC_STRING_MAX_SIZE]; 
+TCHAR FailureMessage[RC_STRING_MAX_SIZE];
+TCHAR SuccessMessage[RC_STRING_MAX_SIZE];
 
 
 // The macro CommandLineToArgv maps to a function that converts
@@ -271,12 +271,12 @@
 
 	// Get Langues msg
 	LoadString( GetModuleHandle(NULL), IDS_UsageMessage, (LPTSTR) UsageMessage,RC_STRING_MAX_SIZE);
-    LoadString( GetModuleHandle(NULL), IDS_NoDllSpecified, (LPTSTR) NoDllSpecified,RC_STRING_MAX_SIZE);    
+	LoadString( GetModuleHandle(NULL), IDS_NoDllSpecified, (LPTSTR) NoDllSpecified,RC_STRING_MAX_SIZE);
 	LoadString( GetModuleHandle(NULL), IDS_InvalidFlag, (LPTSTR) InvalidFlag,RC_STRING_MAX_SIZE);
 	LoadString( GetModuleHandle(NULL), IDS_SwitchN_NoI, (LPTSTR) SwitchN_NoI,RC_STRING_MAX_SIZE);
 
-    LoadString( GetModuleHandle(NULL), IDS_DllNotLoaded, (LPTSTR)   DllNotLoaded,RC_STRING_MAX_SIZE);
-    LoadString( GetModuleHandle(NULL), IDS_MissingEntry, (LPTSTR)   MissingEntry,RC_STRING_MAX_SIZE);    
+	LoadString( GetModuleHandle(NULL), IDS_DllNotLoaded, (LPTSTR)   DllNotLoaded,RC_STRING_MAX_SIZE);
+	LoadString( GetModuleHandle(NULL), IDS_MissingEntry, (LPTSTR)   MissingEntry,RC_STRING_MAX_SIZE);
 	LoadString( GetModuleHandle(NULL), IDS_FailureMessage, (LPTSTR) FailureMessage,RC_STRING_MAX_SIZE);
 	LoadString( GetModuleHandle(NULL), IDS_SuccessMessage, (LPTSTR) SuccessMessage,RC_STRING_MAX_SIZE);
 
@@ -384,7 +384,7 @@
 	OleInitialize(0);
 
 	// (Un)register every dll whose filename was passed in the command-line string
-	for (i = 1; i < argc; i++) {
+	for (i = 1; i < argc && nRetValue == EXITCODE_SUCCESS; i++) {
 		// Arguments that do not start with a slash (/) are filenames
 		if (*argv[i] != _T('/')) {
 			lptDllName = argv[i];
@@ -425,7 +425,7 @@
 					}
 				}
 
-				if (bInstall) {
+				if (bInstall && nRetValue == EXITCODE_SUCCESS) {
 					// Get the address of DllInstall
 					fnDllInstall = (DLLINSTALL)GetProcAddress(hDll,szDllInstall);
 					if (fnDllInstall) {




More information about the Ros-diffs mailing list