From c696e9ef2a1acc28cd6741cd93ad1e4a83d76dd7 Mon Sep 17 00:00:00 2001 From: "dprice%netscape.com" Date: Tue, 7 May 2002 07:22:20 +0000 Subject: [PATCH] 142170 r=ssu sr=jag adt=jaime a=asa add message= flag to RunApp sections of .ini files 142282 r=ssu,syd,dprice sr=mscott adt=jaime a=chofmann add supercede attribute to Components sections of .ini files --- xpinstall/wizard/windows/setup/extra.c | 111 ++++++++++++++++++++++- xpinstall/wizard/windows/setup/extra.h | 3 + xpinstall/wizard/windows/setup/ifuncns.c | 7 ++ xpinstall/wizard/windows/setup/setup.h | 2 + 4 files changed, 120 insertions(+), 3 deletions(-) diff --git a/xpinstall/wizard/windows/setup/extra.c b/xpinstall/wizard/windows/setup/extra.c index 9c27376c664d..2d7892e08fc0 100644 --- a/xpinstall/wizard/windows/setup/extra.c +++ b/xpinstall/wizard/windows/setup/extra.c @@ -2901,6 +2901,37 @@ BOOL IsInList(DWORD dwCurrentItem, DWORD dwItems, DWORD *dwItemsSelected) return(FALSE); } +void RestoreInvisibleFlag(siC *siCNode) +{ + char szBuf[MAX_BUF_TINY]; + char szAttribute[MAX_BUF_TINY]; + + GetPrivateProfileString(siCNode->szReferenceName, "Attributes", "", szBuf, sizeof(szBuf), szFileIniConfig); + lstrcpy(szAttribute, szBuf); + strupr(szAttribute); + + if(strstr(szAttribute, "INVISIBLE")) + siCNode->dwAttributes |= SIC_INVISIBLE; + else + siCNode->dwAttributes &= ~SIC_INVISIBLE; +} + +void RestoreAdditionalFlag(siC *siCNode) +{ + char szBuf[MAX_BUF_TINY]; + char szAttribute[MAX_BUF_TINY]; + + GetPrivateProfileString(siCNode->szReferenceName, "Attributes", "", szBuf, sizeof(szBuf), szFileIniConfig); + lstrcpy(szAttribute, szBuf); + strupr(szAttribute); + + if(strstr(szAttribute, "ADDITIONAL") && !strstr(szAttribute, "NOTADDITIONAL")) + siCNode->dwAttributes |= SIC_ADDITIONAL; + else + siCNode->dwAttributes &= ~SIC_ADDITIONAL; +} + + // This function: // - Zeros the SELECTED and ADDITIONAL attributes of all components. // - Set all attributes as specified for the specific Setup Type @@ -2928,13 +2959,18 @@ void SiCNodeSetItemsSelected(DWORD dwSetupType) if(siCNode == NULL) break; + /* clear these flags for all components so they can be + * reset later if they belong to the setup type the user + * selected */ siCNode->dwAttributes &= ~SIC_SELECTED; siCNode->dwAttributes &= ~SIC_ADDITIONAL; + siCNode->dwAttributes |= SIC_INVISIBLE; /* Force Upgrade needs to be performed here because the user has just * selected the destination path for the product. The destination path is * critical to the checking of the Force Upgrade. */ ResolveForceUpgrade(siCNode); + ResolveSupercede(siCNode); siCNode = siCNode->Next; } while((siCNode != NULL) && (siCNode != siComponents)); @@ -2946,6 +2982,12 @@ void SiCNodeSetItemsSelected(DWORD dwSetupType) { if((siCNode = SiCNodeFind(siComponents, szComponentSection)) != NULL) { + /* Component is in the Setup Type the user selected, so we now need to + * reset the INVISIBLE and ADDITIONAL flags because they were unset + * above and also are not reset anywhere else. */ + RestoreInvisibleFlag(siCNode); + RestoreAdditionalFlag(siCNode); + wsprintf(szOverrideSection, "%s-Override-%s", siCNode->szReferenceName, szSTSection); GetPrivateProfileString(szOverrideSection, "Attributes", "", szOverrideAttributes, sizeof(szOverrideAttributes), szFileIniConfig); @@ -2963,12 +3005,15 @@ void SiCNodeSetItemsSelected(DWORD dwSetupType) { /* Setup Type other than custom detected, so * make sure all components from this Setup Type - * is selected (regardless if it's DISABLED or not). */ - siCNode->dwAttributes |= SIC_SELECTED; + * is selected (regardless if it's DISABLED or not). + * Don't select components that are superceded */ + if(!siCNode->bSupercede) + siCNode->dwAttributes |= SIC_SELECTED; + if(*szOverrideAttributes != '\0') siCNode->dwAttributes = ParseComponentAttributes(szOverrideAttributes, siCNode->dwAttributes, TRUE); } - else if(!(siCNode->dwAttributes & SIC_DISABLED) && !siCNode->bForceUpgrade) + else if(!(siCNode->dwAttributes & SIC_DISABLED) && !siCNode->bForceUpgrade && !siCNode->bSupercede) { /* Custom setup type detected and the component is * not DISABLED and FORCE_UPGRADE. Reset the component's @@ -2977,6 +3022,7 @@ void SiCNodeSetItemsSelected(DWORD dwSetupType) * it as is. The user will see the component in the Options * Dialogs as not selected and DISABLED. Not sure why we * want this, but marketing might find it useful someday. */ + GetPrivateProfileString(siCNode->szReferenceName, "Attributes", "", szBuf, sizeof(szBuf), szFileIniConfig); siCNode->dwAttributes = ParseComponentAttributes(szBuf, 0, FALSE); if(*szOverrideAttributes != '\0') @@ -3916,6 +3962,12 @@ HRESULT ParseComponentAttributes(char *szAttribute, DWORD dwAttributes, BOOL bOv else if(strstr(szBuf, "ADDITIONAL")) dwAttributes |= SIC_ADDITIONAL; + if(strstr(szBuf, "NOTSUPERCEDE")) + dwAttributes &= ~SIC_SUPERCEDE; + else if(strstr(szBuf, "SUPERCEDE")) + dwAttributes |= SIC_SUPERCEDE; + + return(dwAttributes); } @@ -3946,6 +3998,59 @@ siC *SiCNodeFind(siC *siCHeadNode, char *szInReferenceName) return(NULL); } +BOOL ResolveSupercede(siC *siCObject) +{ + DWORD dwIndex; + char szFilePath[MAX_BUF]; + char szSupercedeFile[MAX_BUF]; + char szType[MAX_BUF_TINY]; + char szKey[MAX_BUF_TINY]; + + siCObject->bSupercede = FALSE; + if(siCObject->dwAttributes & SIC_SUPERCEDE) + { + dwIndex = 0; + GetPrivateProfileString(siCObject->szReferenceName, "SupercedeType", "", szType, sizeof(szType), szFileIniConfig); + if(*szType !='\0') + { + if(lstrcmpi(szType, "File Exists") == 0) + { + wsprintf(szKey, "SupercedeFile%d", dwIndex); + GetPrivateProfileString(siCObject->szReferenceName, szKey, "", szSupercedeFile, sizeof(szSupercedeFile), szFileIniConfig); + while(*szSupercedeFile != '\0') + { + DecryptString(szFilePath, szSupercedeFile); + if(FileExists(szFilePath)) + { + siCObject->bSupercede = TRUE; + + /* Found at least one file, so break out of while loop */ + break; + } + wsprintf(szKey, "SupercedeFile%d", ++dwIndex); + GetPrivateProfileString(siCObject->szReferenceName, szKey, "", szSupercedeFile, sizeof(szSupercedeFile), szFileIniConfig); + } + } + } + + if(siCObject->bSupercede) + { + siCObject->dwAttributes &= ~SIC_SELECTED; + siCObject->dwAttributes |= SIC_DISABLED; + } + else + /* Make sure to unset the DISABLED bit. If the Setup Type is other than + * Custom, then we don't care if it's DISABLED or not because this flag + * is only used in the Custom dialogs. + * + * If the Setup Type is Custom and this component is DISABLED by default + * via the config.ini, it's default value will be restored in the + * SiCNodeSetItemsSelected() function that called ResolveSupercede(). */ + siCObject->dwAttributes &= ~SIC_DISABLED; + } + return(siCObject->bSupercede); +} + BOOL ResolveForceUpgrade(siC *siCObject) { DWORD dwIndex; diff --git a/xpinstall/wizard/windows/setup/extra.h b/xpinstall/wizard/windows/setup/extra.h index 41a7a1e21407..5d674bf929e6 100644 --- a/xpinstall/wizard/windows/setup/extra.h +++ b/xpinstall/wizard/windows/setup/extra.h @@ -191,6 +191,9 @@ int CRCCheckArchivesStartup(char *szCorruptedArchiveList, DWORD dwCorruptedArchiveListSize, BOOL bIncludeTempPath); BOOL ResolveForceUpgrade(siC *siCObject); +BOOL ResolveSupercede(siC *siCObject); +void RestoreInvisibleFlag(siC *siCNode); +void RestoreAdditionalFlag(siC *siCNode); void SwapFTPAndHTTP(char *szInUrl, DWORD dwInUrlSize); void ClearWinRegUninstallFileDeletion(void); int AppendToGlobalMessageStream(char *szInfo); diff --git a/xpinstall/wizard/windows/setup/ifuncns.c b/xpinstall/wizard/windows/setup/ifuncns.c index 4c5d45f612a8..695513c03eb7 100644 --- a/xpinstall/wizard/windows/setup/ifuncns.c +++ b/xpinstall/wizard/windows/setup/ifuncns.c @@ -1345,7 +1345,14 @@ HRESULT ProcessRunApp(DWORD dwTiming, char *szSectionPrefix) FALSE); } else + { + GetPrivateProfileString(szSection, "Message", "", szBuf, sizeof(szBuf), szFileIniConfig); + if ( szBuf[0] != '\0' ) + ShowMessage(szBuf, TRUE); WinSpawn(szTarget, szParameters, szWorkingDir, SW_SHOWNORMAL, bWait); + if ( szBuf[0] != '\0' ) + ShowMessage(szBuf, FALSE); + } } } diff --git a/xpinstall/wizard/windows/setup/setup.h b/xpinstall/wizard/windows/setup/setup.h index 1071855370e1..9f781277992b 100644 --- a/xpinstall/wizard/windows/setup/setup.h +++ b/xpinstall/wizard/windows/setup/setup.h @@ -196,6 +196,7 @@ typedef int PRInt32; #define SIC_IGNORE_DOWNLOAD_ERROR 0x00000100 #define SIC_IGNORE_XPINSTALL_ERROR 0x00000200 #define SIC_UNCOMPRESS 0x00000400 +#define SIC_SUPERCEDE 0x00000800 /* AC: Additional Components */ #define AC_NONE 0 @@ -447,6 +448,7 @@ struct sinfoComponent LPSTR szParameter; LPSTR szReferenceName; BOOL bForceUpgrade; + BOOL bSupercede; int iNetRetries; int iCRCRetries; int iNetTimeOuts;