@@ -144,7 +144,8 @@ UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
144144 HRESULT r ;
145145 MSIDATABASE * db = NULL ;
146146 UINT ret = ERROR_FUNCTION_FAILED ;
147- LPCWSTR szMode , save_path ;
147+ LPCWSTR save_path ;
148+ UINT mode ;
148149 STATSTG stat ;
149150 BOOL created = FALSE, patch = FALSE;
150151 WCHAR path [MAX_PATH ];
@@ -154,31 +155,34 @@ UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
154155 if ( !pdb )
155156 return ERROR_INVALID_PARAMETER ;
156157
157- if (szPersist - MSIDBOPEN_PATCHFILE <= MSIDBOPEN_CREATEDIRECT )
158+ save_path = szDBPath ;
159+ if ( IS_INTMSIDBOPEN (szPersist ) )
158160 {
159- TRACE ("Database is a patch\n" );
160- szPersist -= MSIDBOPEN_PATCHFILE ;
161- patch = TRUE;
161+ mode = LOWORD (szPersist );
162162 }
163-
164- save_path = szDBPath ;
165- szMode = szPersist ;
166- if ( !IS_INTMSIDBOPEN (szPersist ) )
163+ else
167164 {
168165 if (!CopyFileW ( szDBPath , szPersist , FALSE ))
169166 return ERROR_OPEN_FAILED ;
170167
171168 szDBPath = szPersist ;
172- szPersist = MSIDBOPEN_TRANSACT ;
169+ mode = MSI_OPEN_TRANSACT ;
173170 created = TRUE;
174171 }
175172
176- if ( szPersist == MSIDBOPEN_READONLY )
173+ if ((mode & MSI_OPEN_PATCHFILE ) == MSI_OPEN_PATCHFILE )
174+ {
175+ TRACE ("Database is a patch\n" );
176+ mode &= ~MSI_OPEN_PATCHFILE ;
177+ patch = TRUE;
178+ }
179+
180+ if ( mode == MSI_OPEN_READONLY )
177181 {
178182 r = StgOpenStorage ( szDBPath , NULL ,
179183 STGM_DIRECT |STGM_READ |STGM_SHARE_DENY_WRITE , NULL , 0 , & stg );
180184 }
181- else if ( szPersist == MSIDBOPEN_CREATE )
185+ else if ( mode == MSI_OPEN_CREATE )
182186 {
183187 r = StgCreateDocfile ( szDBPath ,
184188 STGM_CREATE |STGM_TRANSACTED |STGM_READWRITE |STGM_SHARE_EXCLUSIVE , 0 , & stg );
@@ -187,7 +191,7 @@ UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
187191 r = db_initialize ( stg , patch ? & CLSID_MsiPatch : & CLSID_MsiDatabase );
188192 created = TRUE;
189193 }
190- else if ( szPersist == MSIDBOPEN_CREATEDIRECT )
194+ else if ( mode == MSI_OPEN_CREATEDIRECT )
191195 {
192196 r = StgCreateDocfile ( szDBPath ,
193197 STGM_CREATE |STGM_DIRECT |STGM_READWRITE |STGM_SHARE_EXCLUSIVE , 0 , & stg );
@@ -196,19 +200,19 @@ UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
196200 r = db_initialize ( stg , patch ? & CLSID_MsiPatch : & CLSID_MsiDatabase );
197201 created = TRUE;
198202 }
199- else if ( szPersist == MSIDBOPEN_TRANSACT )
203+ else if ( mode == MSI_OPEN_TRANSACT )
200204 {
201205 r = StgOpenStorage ( szDBPath , NULL ,
202206 STGM_TRANSACTED |STGM_READWRITE |STGM_SHARE_DENY_WRITE , NULL , 0 , & stg );
203207 }
204- else if ( szPersist == MSIDBOPEN_DIRECT )
208+ else if ( mode == MSI_OPEN_DIRECT )
205209 {
206210 r = StgOpenStorage ( szDBPath , NULL ,
207211 STGM_DIRECT |STGM_READWRITE |STGM_SHARE_EXCLUSIVE , NULL , 0 , & stg );
208212 }
209213 else
210214 {
211- ERR ("unknown flag %p \n" ,szPersist );
215+ ERR ("unknown flag %x \n" ,mode );
212216 return ERROR_INVALID_PARAMETER ;
213217 }
214218
@@ -267,7 +271,7 @@ UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
267271 enum_stream_names ( stg );
268272
269273 db -> storage = stg ;
270- db -> mode = szMode ;
274+ db -> mode = mode ;
271275 if (created )
272276 db -> deletefile = strdupW ( szDBPath );
273277 list_init ( & db -> tables );
@@ -1977,7 +1981,7 @@ MSIDBSTATE WINAPI MsiGetDatabaseState( MSIHANDLE handle )
19771981 if (!(db = msihandle2msiinfo ( handle , MSIHANDLETYPE_DATABASE )))
19781982 return MSIDBSTATE_ERROR ;
19791983
1980- if (db -> mode != MSIDBOPEN_READONLY )
1984+ if (db -> mode != MSI_OPEN_READONLY )
19811985 ret = MSIDBSTATE_WRITE ;
19821986 msiobj_release ( & db -> hdr );
19831987
0 commit comments