On 6/1/07, James Hawkins <[EMAIL PROTECTED]> wrote:
On 6/1/07, Tom Spear <[EMAIL PROTECTED]> wrote:
> Here is a 2nd attempt at the last one I sent.  This time the root
> field is initialized, and this part of the patch is written against
> current git, not against changes to my own tree.  Oh and its onl;y a
> 2-parter
>
> This will make wine's programs/uninstaller look thru not only
> HKEY_LOCAL_MACHINE for uninstall entries, but also HKEY_CURRENT_USER.
>

+    /* Loop thru HKCU first, then thru HKLM  */
+    for (iRootKey=0; iRootKey<sizeof(rootKeys) / sizeof(rootKeys[0]);
++iRootKey)
+    {
+    /* If there is no uninstall info in a specific root key,
+     * finish this run and go to the next */
+    if (RegOpenKeyExW(rootKeys[iRootKey], PathUninstallW, 0,
+                      KEY_READ, &hkeyUninst) != ERROR_SUCCESS)
+        continue;

This whole patch would be a lot simpler if you just used one root variable:

if (RegOpenKeyExW(HKCU....) == ERROR_SUCCESS) root = HKCU;
else if (RegOpenKeyExW(HKLM....) == ERROR_SUCCESS) root = HKLM;
else bail out

Now just use root everywhere instead of having an array of just two
constants, and you get rid of the index.

root is used in more than just FetchUninstallInformation....  It is
used in UninstallProgram.  So unless I declare root as a global
variable, it would not be accessible by UninstallProgram, and would
therefore fail to compile.  Also, what if a new root key is added in
later on by MS, that allows Uninstall stuff to be placed in it?  This
way, we just add the name of that new root key to the array.
Otherwise, someone has to add another

else if (RegOpenKeyExW(.....) == ERROR_SUCCESS) root = .....;



--
Thanks

Tom


Reply via email to