From 0762dd68f8feeaa7698aa4d47cee02507a2c0190 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Wed, 1 Apr 2015 12:25:27 +0200 Subject: [PATCH] msi: Store the disk id for file patches. --- dlls/msi/action.c | 23 ++++++++++++++++++++++- dlls/msi/msipriv.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/dlls/msi/action.c b/dlls/msi/action.c index d1c46b8ce94..edd08f74ac3 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -1278,7 +1278,7 @@ static UINT load_file(MSIRECORD *row, LPVOID param) load_file_hash(package, file); load_file_disk_id(package, file); - TRACE("File Loaded (%s)\n",debugstr_w(file->File)); + TRACE("File loaded (file %s sequence %u)\n", debugstr_w(file->File), file->Sequence); list_add_tail( &package->files, &file->entry ); @@ -1336,6 +1336,25 @@ static UINT load_all_media( MSIPACKAGE *package ) return r; } +static UINT load_patch_disk_id( MSIPACKAGE *package, MSIFILEPATCH *patch ) +{ + static const WCHAR query[] = + {'S','E','L','E','C','T',' ','`','D','i','s','k','I','d','`',' ', 'F','R','O','M',' ', + '`','M','e','d','i','a','`',' ','W','H','E','R','E',' ', + '`','L','a','s','t','S','e','q','u','e','n','c','e','`',' ','>','=',' ','%','u',0}; + MSIRECORD *rec; + + if (!(rec = MSI_QueryGetRecord( package->db, query, patch->Sequence ))) + { + WARN("query failed\n"); + return ERROR_FUNCTION_FAILED; + } + + patch->disk_id = MSI_RecordGetInteger( rec, 1 ); + msiobj_release( &rec->hdr ); + return ERROR_SUCCESS; +} + static UINT load_patch(MSIRECORD *row, LPVOID param) { MSIPACKAGE *package = param; @@ -1365,6 +1384,8 @@ static UINT load_patch(MSIRECORD *row, LPVOID param) * _StreamRef - External key into MsiPatchHeaders (instead of the header field) */ + load_patch_disk_id( package, patch ); + TRACE("Patch loaded (file %s sequence %u)\n", debugstr_w(patch->File->File), patch->Sequence); list_add_tail( &package->filepatches, &patch->entry ); diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h index ac7ba32ebbc..b58dc322b08 100644 --- a/dlls/msi/msipriv.h +++ b/dlls/msi/msipriv.h @@ -594,6 +594,7 @@ typedef struct tagMSIFILEPATCH INT PatchSize; INT Attributes; BOOL IsApplied; + UINT disk_id; } MSIFILEPATCH; typedef struct tagMSIAPPID