From 230af9d21f66bb08b7945f36d0de809997b54982 Mon Sep 17 00:00:00 2001 From: Mike McCormack Date: Fri, 14 Jul 2006 15:19:08 +0900 Subject: [PATCH] msi: Move version string conversions to registry.c. --- dlls/msi/action.c | 4 ++-- dlls/msi/action.h | 1 - dlls/msi/helpers.c | 41 ----------------------------------------- dlls/msi/msipriv.h | 3 +++ dlls/msi/registry.c | 32 ++++++++++++++++++++++++++++++++ dlls/msi/upgrade.c | 4 ++-- 6 files changed, 39 insertions(+), 46 deletions(-) diff --git a/dlls/msi/action.c b/dlls/msi/action.c index a953da4cac4..51a58729cd4 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -3088,7 +3088,7 @@ static UINT ACTION_PublishProduct(MSIPACKAGE *package) buffer = msi_dup_property( package, szProductVersion ); if (buffer) { - DWORD verdword = build_version_dword(buffer); + DWORD verdword = msi_version_str_to_dword(buffer); msi_reg_set_val_dword( hkey, INSTALLPROPERTY_VERSIONW, verdword ); } msi_free(buffer); @@ -3588,7 +3588,7 @@ static UINT ACTION_RegisterProduct(MSIPACKAGE *package) buffer = msi_dup_property( package, szProductVersion ); if (buffer) { - DWORD verdword = build_version_dword(buffer); + DWORD verdword = msi_version_str_to_dword(buffer); msi_reg_set_val_dword( hkey, INSTALLPROPERTY_VERSIONW, verdword ); msi_reg_set_val_dword( hkey, INSTALLPROPERTY_VERSIONMAJORW, verdword>>24 ); diff --git a/dlls/msi/action.h b/dlls/msi/action.h index 9c52db8e762..31ac28e01d2 100644 --- a/dlls/msi/action.h +++ b/dlls/msi/action.h @@ -266,7 +266,6 @@ extern MSIFOLDER *get_loaded_folder( MSIPACKAGE *package, LPCWSTR dir ); extern int track_tempfile(MSIPACKAGE *package, LPCWSTR name, LPCWSTR path); extern UINT schedule_action(MSIPACKAGE *package, UINT script, LPCWSTR action); extern LPWSTR build_icon_path(MSIPACKAGE *, LPCWSTR); -extern DWORD build_version_dword(LPCWSTR); extern LPWSTR build_directory_name(DWORD , ...); extern BOOL create_full_pathW(const WCHAR *path); extern BOOL ACTION_VerifyComponentForAction(MSICOMPONENT*, INSTALLSTATE); diff --git a/dlls/msi/helpers.c b/dlls/msi/helpers.c index 8dd499bfb2d..c40a851c874 100644 --- a/dlls/msi/helpers.c +++ b/dlls/msi/helpers.c @@ -43,47 +43,6 @@ const WCHAR cszSourceDir[] = {'S','o','u','r','c','e','D','i','r',0}; const WCHAR cszRootDrive[] = {'R','O','O','T','D','R','I','V','E',0}; const WCHAR cszbs[]={'\\',0}; -DWORD build_version_dword(LPCWSTR version_string) -{ - SHORT major,minor; - WORD build; - DWORD rc = 0x00000000; - LPCWSTR ptr1; - - ptr1 = version_string; - - if (!ptr1) - return rc; - else - major = atoiW(ptr1); - - - if(ptr1) - ptr1 = strchrW(ptr1,'.'); - if (ptr1) - { - ptr1++; - minor = atoiW(ptr1); - } - else - minor = 0; - - if (ptr1) - ptr1 = strchrW(ptr1,'.'); - - if (ptr1) - { - ptr1++; - build = atoiW(ptr1); - } - else - build = 0; - - rc = MAKELONG(build,MAKEWORD(minor,major)); - TRACE("%s -> 0x%lx\n",debugstr_w(version_string),rc); - return rc; -} - LPWSTR build_icon_path(MSIPACKAGE *package, LPCWSTR icon_name ) { LPWSTR SystemFolder, dest, FilePath; diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h index 077603e7b79..3f69910065d 100644 --- a/dlls/msi/msipriv.h +++ b/dlls/msi/msipriv.h @@ -415,6 +415,9 @@ extern UINT MSIREG_OpenUserComponentsKey(LPCWSTR szComponent, HKEY* key, BOOL cr extern UINT MSIREG_OpenUpgradeCodesKey(LPCWSTR szProduct, HKEY* key, BOOL create); extern UINT MSIREG_OpenUserUpgradeCodesKey(LPCWSTR szProduct, HKEY* key, BOOL create); +extern DWORD msi_version_str_to_dword(LPCWSTR p); +extern LPWSTR msi_version_dword_to_str(DWORD version); + extern LONG msi_reg_set_val_str( HKEY hkey, LPCWSTR name, LPCWSTR value ); extern LONG msi_reg_set_val_multi_str( HKEY hkey, LPCWSTR name, LPCWSTR value ); extern LONG msi_reg_set_val_dword( HKEY hkey, LPCWSTR name, DWORD val ); diff --git a/dlls/msi/registry.c b/dlls/msi/registry.c index 006551f5165..c7a7e8adf91 100644 --- a/dlls/msi/registry.c +++ b/dlls/msi/registry.c @@ -305,6 +305,38 @@ BOOL encode_base85_guid( GUID *guid, LPWSTR str ) return TRUE; } +DWORD msi_version_str_to_dword(LPCWSTR p) +{ + DWORD major, minor = 0, build = 0, version = 0; + + if (!p) + return version; + + major = atoiW(p); + + p = strchrW(p, '.'); + if (p) + { + minor = atoiW(p+1); + p = strchrW(p+1, '.'); + if (p) + build = atoiW(p+1); + } + + return MAKELONG(build, MAKEWORD(minor, major)); +} + +LPWSTR msi_version_dword_to_str(DWORD version) +{ + const WCHAR fmt[] = { '%','u','.','%','u','.','%','u',0 }; + LPWSTR str = msi_alloc(20); + sprintfW(str, fmt, + (version&0xff000000)>>24, + (version&0x00ff0000)>>16, + version&0x0000ffff); + return str; +} + LONG msi_reg_set_val_str( HKEY hkey, LPCWSTR name, LPCWSTR value ) { DWORD len = value ? (lstrlenW(value) + 1) * sizeof (WCHAR) : 0; diff --git a/dlls/msi/upgrade.c b/dlls/msi/upgrade.c index f65907f25dc..63b1d99c309 100644 --- a/dlls/msi/upgrade.c +++ b/dlls/msi/upgrade.c @@ -151,7 +151,7 @@ static UINT ITERATE_FindRelatedProducts(MSIRECORD *rec, LPVOID param) (LPBYTE)&check, &sz); /* check min */ ver = MSI_RecordGetString(rec,2); - comp_ver = build_version_dword(ver); + comp_ver = msi_version_str_to_dword(ver); r = check - comp_ver; if (r < 0 || (r == 0 && !(attributes & msidbUpgradeAttributesVersionMinInclusive))) @@ -163,7 +163,7 @@ static UINT ITERATE_FindRelatedProducts(MSIRECORD *rec, LPVOID param) /* check max */ ver = MSI_RecordGetString(rec,3); - comp_ver = build_version_dword(ver); + comp_ver = msi_version_str_to_dword(ver); r = check - comp_ver; if (r > 0 || (r == 0 && !(attributes & msidbUpgradeAttributesVersionMaxInclusive)))