Hans Leidekker : msi: Handle errors from IStorage_CreateStream instead of trying to open the stream first in msi_commit_streams.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Mar 16 10:34:24 CDT 2015
Module: wine
Branch: master
Commit: fa23c7fcb33a8c01189316c3b0a3600b078bd145
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fa23c7fcb33a8c01189316c3b0a3600b078bd145
Author: Hans Leidekker <hans at codeweavers.com>
Date: Mon Mar 16 10:56:35 2015 +0100
msi: Handle errors from IStorage_CreateStream instead of trying to open the stream first in msi_commit_streams.
---
dlls/msi/streams.c | 21 ++++++++++-----------
dlls/msi/tests/db.c | 3 ++-
2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/dlls/msi/streams.c b/dlls/msi/streams.c
index 4b151bb..7f9582c 100644
--- a/dlls/msi/streams.c
+++ b/dlls/msi/streams.c
@@ -613,30 +613,29 @@ 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 );
+ hr = write_stream( stream, db->streams[i].stream );
if (FAILED( hr ))
{
- ERR("failed to create stream %s (hr = %08x)\n", debugstr_w(encname), hr);
+ ERR("failed to write stream %s (hr = %08x)\n", debugstr_w(encname), hr);
msi_free( encname );
+ IStream_Release( stream );
return ERROR_FUNCTION_FAILED;
}
- hr = write_stream( stream, db->streams[i].stream );
+ hr = IStream_Commit( stream, 0 );
+ IStream_Release( stream );
if (FAILED( hr ))
{
- ERR("failed to write stream %s (hr = %08x)\n", debugstr_w(encname), hr);
+ ERR("failed to commit stream %s (hr = %08x)\n", debugstr_w(encname), hr);
msi_free( encname );
- IStream_Release( stream );
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;
}
diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index 3d8568d..d629e1c 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -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;
More information about the wine-cvs
mailing list