summaryrefslogtreecommitdiff
path: root/setup_native/source/win32/customactions/shellextensions/upgrade.cxx
diff options
context:
space:
mode:
authorBjoern Michaelsen <bjoern.michaelsen@canonical.com>2011-08-23 15:06:03 +0200
committerBjoern Michaelsen <bjoern.michaelsen@canonical.com>2011-08-23 15:06:03 +0200
commitd8b6cc3b44ddcf9647653dc8ee88f3d9024feebf (patch)
tree3d395e7313279565a46774ac2921b987e24b9fc5 /setup_native/source/win32/customactions/shellextensions/upgrade.cxx
parentb52ec9a4fa9b8eb93a181fac3613f1de7d1d0825 (diff)
recreated tag libreoffice-3.3.0.4 which had these commits:
commit 04144eede67d986878496224a1bfec8b5666f1fe (tag: refs/tags/libreoffice-3.3.0.4, refs/remotes/origin/libreoffice-3-3-0) Author: Petr Mladek <pmladek@suse.cz> Date: Tue Jan 18 19:01:16 2011 +0100 Version 3.3.0.4, tag libreoffice-3.3.0.4 (3.3-rc4) commit c2d496a993f9643bc8a737c505f070246fcf6fad Author: Kohei Yoshida <kyoshida@novell.com> Date: Fri Jan 14 11:53:12 2011 -0500 Remove pesky on-line registration menu entry. (fdo#33112) .../uiconfig/sbibliography/menubar/menubar.xml | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) commit da172d85638baf1bcc1dd2bdc985f1a50d308bc3 Author: Petr Mladek <pmladek@suse.cz> Date: Tue Jan 11 22:59:36 2011 +0100 Branch libreoffice-3-3-0 This is 'libreoffice-3-3-0' - the stable branch for the 3.3.0 release. Only very safe changes, reviewed by three people are allowed. If you want to commit more complicated fix for the next 3.3.x release, please use the 'libreoffice-3-3' branch. If you want to build something cool, unstable, and risky, use master.
Notes
split repo tag: components_libreoffice-3.3.0.4
Diffstat (limited to 'setup_native/source/win32/customactions/shellextensions/upgrade.cxx')
-rw-r--r--setup_native/source/win32/customactions/shellextensions/upgrade.cxx92
1 files changed, 46 insertions, 46 deletions
diff --git a/setup_native/source/win32/customactions/shellextensions/upgrade.cxx b/setup_native/source/win32/customactions/shellextensions/upgrade.cxx
index 6280bfb5b2e5..2efd60ad868a 100644
--- a/setup_native/source/win32/customactions/shellextensions/upgrade.cxx
+++ b/setup_native/source/win32/customactions/shellextensions/upgrade.cxx
@@ -2,7 +2,7 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
+ *
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
@@ -49,82 +49,82 @@
using namespace std;
-namespace
+namespace
{
// The provided GUID must be without surounding '{}'
string GetGuidPart(const string& guid, int index)
{
- assert((guid.length() == 36) && "No GUID or wrong format!");
+ assert((guid.length() == 36) && "No GUID or wrong format!");
assert(((index > -1) && (index < 5)) && "Out of range!");
-
+
if (index == 0) return string(guid.c_str(), 8);
if (index == 1) return string(guid.c_str() + 9, 4);
if (index == 2) return string(guid.c_str() + 14, 4);
if (index == 3) return string(guid.c_str() + 19, 4);
if (index == 4) return string(guid.c_str() + 24, 12);
-
+
return string();
}
-
+
void Swap(char* p1, char* p2)
{
char tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
-
+
string Invert(const string& str)
{
char* buff = reinterpret_cast<char*>(_alloca(str.length()));
strncpy(buff, str.c_str(), str.length());
-
+
char* front = buff;
char* back = buff + str.length() - 1;
-
- while (front < back)
- Swap(front++, back--);
-
- return string(buff, str.length());
+
+ while (front < back)
+ Swap(front++, back--);
+
+ return string(buff, str.length());
}
-
+
// Convert the upgrade code (which is a GUID) according
// to the way the windows installer does when writing it
// to the registry
- // The first 8 bytes will be inverted, from the the last
+ // The first 8 bytes will be inverted, from the the last
// 8 bytes always the nibbles will be inverted for further
- // details look in the MSDN under compressed registry keys
+ // details look in the MSDN under compressed registry keys
string ConvertGuid(const string& guid)
{
string convertedGuid;
-
+
string part = GetGuidPart(guid, 0);
convertedGuid = Invert(part);
-
+
part = GetGuidPart(guid, 1);
convertedGuid += Invert(part);
-
+
part = GetGuidPart(guid, 2);
convertedGuid += Invert(part);
-
+
part = GetGuidPart(guid, 3);
convertedGuid += Invert(string(part.c_str(), 2));
convertedGuid += Invert(string(part.c_str() + 2, 2));
-
- part = GetGuidPart(guid, 4);
+
+ part = GetGuidPart(guid, 4);
int pos = 0;
for (int i = 0; i < 6; i++)
{
convertedGuid += Invert(string(part.c_str() + pos, 2));
- pos += 2;
+ pos += 2;
}
return convertedGuid;
}
-
+
string GetMsiProperty(MSIHANDLE handle, const string& sProperty)
{
- string result;
- TCHAR szDummy[1] = TEXT("");
- DWORD nChars = 0;
+ string result;
+ TCHAR szDummy[1] = TEXT("");
+ DWORD nChars = 0;
if (MsiGetProperty(handle, sProperty.c_str(), szDummy, &nChars) == ERROR_MORE_DATA)
{
@@ -132,13 +132,13 @@ namespace
LPTSTR buffer = reinterpret_cast<LPTSTR>(_alloca(nBytes));
ZeroMemory( buffer, nBytes );
MsiGetProperty(handle, sProperty.c_str(), buffer, &nChars);
- result = buffer;
+ result = buffer;
}
- return result;
+ return result;
}
inline bool IsSetMsiProperty(MSIHANDLE handle, const string& sProperty)
- {
+ {
return (GetMsiProperty(handle, sProperty).length() > 0);
}
@@ -157,51 +157,51 @@ namespace
{
HKEY hKey;
if (RegOpenKey(hRootKey, regKey.c_str(), &hKey) == ERROR_SUCCESS)
- {
+ {
DWORD nSubKeys;
DWORD lLongestSubKey;
-
+
if (RegQueryInfoKey(
hKey, NULL, NULL, NULL, &nSubKeys, &lLongestSubKey, NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
LPTSTR buffer = reinterpret_cast<LPTSTR>(_alloca(lLongestSubKey + 1));
-
+
for (DWORD i = 0; i < nSubKeys; i++)
- {
- LONG ret = RegEnumKey(hKey, i, buffer, lLongestSubKey + 1);
- if ((ret == ERROR_SUCCESS) && (buffer == upgradeKey))
+ {
+ LONG ret = RegEnumKey(hKey, i, buffer, lLongestSubKey + 1);
+ if ((ret == ERROR_SUCCESS) && (buffer == upgradeKey))
return true;
}
}
}
return false;
}
-} // namespace
+} // namespace
extern "C" UINT __stdcall SetProductInstallMode(MSIHANDLE handle)
{
- string upgradeCode = GetMsiProperty(handle, TEXT("UpgradeCode"));
+ string upgradeCode = GetMsiProperty(handle, TEXT("UpgradeCode"));
upgradeCode = ConvertGuid(string(upgradeCode.c_str() + 1, upgradeCode.length() - 2));
-
- //MessageBox(NULL, upgradeCode.c_str(), TEXT("Debug"), MB_OK);
-
+
+ //MessageBox(NULL, upgradeCode.c_str(), TEXT("Debug"), MB_OK);
+
if (RegistryKeyHasUpgradeSubKey(
- HKEY_CURRENT_USER,
+ HKEY_CURRENT_USER,
TEXT("Software\\Microsoft\\Installer\\UpgradeCodes"),
upgradeCode) && IsSetMsiProperty(handle, TEXT("ALLUSERS")))
- {
+ {
UnsetMsiProperty(handle, TEXT("ALLUSERS"));
//MessageBox(NULL, "ALLUSERS removed", "DEBUG", MB_OK);
}
else if (RegistryKeyHasUpgradeSubKey(
- HKEY_LOCAL_MACHINE,
+ HKEY_LOCAL_MACHINE,
TEXT("Software\\Classes\\Installer\\UpgradeCodes"),
upgradeCode) && !IsSetMsiProperty(handle, TEXT("ALLUSERS")))
{
SetMsiProperty(handle, TEXT("ALLUSERS"));
//MessageBox(NULL, "ALLUSERS set", "DEBUG", MB_OK);
- }
- return ERROR_SUCCESS;
+ }
+ return ERROR_SUCCESS;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */