msi: Handle errors from IStorage_CreateStream instead of trying to open the stream first in msi_commit_streams.
This commit is contained in:
parent
db3fdbe1e3
commit
fa23c7fcb3
|
@ -613,16 +613,9 @@ UINT msi_commit_streams( MSIDATABASE *db )
|
|||
name = msi_string_lookup( db->strings, db->streams[i].str_index, NULL );
|
||||
if (!(encname = encode_streamname( FALSE, name ))) return ERROR_OUTOFMEMORY;
|
||||
|
||||
hr = open_stream( db, encname, &stream );
|
||||
if (FAILED( hr )) /* new stream */
|
||||
hr = IStorage_CreateStream( db->storage, encname, STGM_WRITE|STGM_SHARE_EXCLUSIVE, 0, 0, &stream );
|
||||
if (SUCCEEDED( hr ))
|
||||
{
|
||||
hr = IStorage_CreateStream( db->storage, encname, STGM_WRITE|STGM_SHARE_EXCLUSIVE, 0, 0, &stream );
|
||||
if (FAILED( hr ))
|
||||
{
|
||||
ERR("failed to create stream %s (hr = %08x)\n", debugstr_w(encname), hr);
|
||||
msi_free( encname );
|
||||
return ERROR_FUNCTION_FAILED;
|
||||
}
|
||||
hr = write_stream( stream, db->streams[i].stream );
|
||||
if (FAILED( hr ))
|
||||
{
|
||||
|
@ -631,12 +624,18 @@ UINT msi_commit_streams( MSIDATABASE *db )
|
|||
IStream_Release( stream );
|
||||
return ERROR_FUNCTION_FAILED;
|
||||
}
|
||||
hr = IStream_Commit( stream, 0 );
|
||||
IStream_Release( stream );
|
||||
if (FAILED( hr ))
|
||||
{
|
||||
ERR("failed to commit stream %s (hr = %08x)\n", debugstr_w(encname), hr);
|
||||
msi_free( encname );
|
||||
return ERROR_FUNCTION_FAILED;
|
||||
}
|
||||
}
|
||||
hr = IStream_Commit( stream, 0 );
|
||||
IStream_Release( stream );
|
||||
if (FAILED( hr ))
|
||||
else if (hr != STG_E_FILEALREADYEXISTS)
|
||||
{
|
||||
WARN("failed to commit stream %s (hr = %08x)\n", debugstr_w(encname), hr);
|
||||
ERR("failed to create stream %s (hr = %08x)\n", debugstr_w(encname), hr);
|
||||
msi_free( encname );
|
||||
return ERROR_FUNCTION_FAILED;
|
||||
}
|
||||
|
|
|
@ -3189,7 +3189,8 @@ static void test_try_transform(void)
|
|||
r = MsiDatabaseApplyTransformA( hdb, mstfile, 0 );
|
||||
ok( r == ERROR_SUCCESS, "return code %d, should be ERROR_SUCCESS\n", r );
|
||||
|
||||
MsiDatabaseCommit( hdb );
|
||||
r = MsiDatabaseCommit( hdb );
|
||||
ok( r == ERROR_SUCCESS , "Failed to commit database\n" );
|
||||
|
||||
/* check new values */
|
||||
hrec = 0;
|
||||
|
|
Loading…
Reference in New Issue