Hans Leidekker : msi: Encode stream name in the callers of db_get_raw_stream.
Alexandre Julliard
julliard at winehq.org
Fri Feb 19 09:21:35 CST 2010
Module: wine
Branch: master
Commit: 9f68142118499dec47f48ccda91383615992bbe2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9f68142118499dec47f48ccda91383615992bbe2
Author: Hans Leidekker <hans at codeweavers.com>
Date: Fri Feb 19 12:26:30 2010 +0100
msi: Encode stream name in the callers of db_get_raw_stream.
---
dlls/msi/database.c | 23 ++++++++++-------------
dlls/msi/table.c | 8 +++++---
2 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/dlls/msi/database.c b/dlls/msi/database.c
index 757be67..8ec2411 100644
--- a/dlls/msi/database.c
+++ b/dlls/msi/database.c
@@ -125,20 +125,14 @@ static UINT clone_open_stream( MSIDATABASE *db, LPCWSTR name, IStream **stm )
UINT db_get_raw_stream( MSIDATABASE *db, LPCWSTR stname, IStream **stm )
{
- LPWSTR encname;
HRESULT r;
- encname = encode_streamname(FALSE, stname);
-
- TRACE("%s -> %s\n",debugstr_w(stname),debugstr_w(encname));
+ TRACE("%s\n", debugstr_w(stname));
- if (clone_open_stream( db, encname, stm ) == ERROR_SUCCESS)
- {
- msi_free( encname );
+ if (clone_open_stream( db, stname, stm ) == ERROR_SUCCESS)
return ERROR_SUCCESS;
- }
- r = IStorage_OpenStream( db->storage, encname, NULL,
+ r = IStorage_OpenStream( db->storage, stname, NULL,
STGM_READ | STGM_SHARE_EXCLUSIVE, 0, stm );
if( FAILED( r ) )
{
@@ -147,15 +141,13 @@ UINT db_get_raw_stream( MSIDATABASE *db, LPCWSTR stname, IStream **stm )
LIST_FOR_EACH_ENTRY( transform, &db->transforms, MSITRANSFORM, entry )
{
TRACE("looking for %s in transform storage\n", debugstr_w(stname) );
- r = IStorage_OpenStream( transform->stg, encname, NULL,
+ r = IStorage_OpenStream( transform->stg, stname, NULL,
STGM_READ | STGM_SHARE_EXCLUSIVE, 0, stm );
if (SUCCEEDED(r))
break;
}
}
- msi_free( encname );
-
if( SUCCEEDED(r) )
{
MSISTREAM *stream;
@@ -181,10 +173,15 @@ UINT read_raw_stream_data( MSIDATABASE *db, LPCWSTR stname,
ULONG sz, count;
IStream *stm = NULL;
STATSTG stat;
+ LPWSTR encname;
+
+ encname = encode_streamname( FALSE, stname );
+ r = db_get_raw_stream( db, encname, &stm );
+ msi_free( encname );
- r = db_get_raw_stream( db, stname, &stm );
if( r != ERROR_SUCCESS)
return ret;
+
r = IStream_Stat(stm, &stat, STATFLAG_NONAME );
if( FAILED( r ) )
{
diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index cc40515..6737ac5 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -1168,7 +1168,7 @@ static UINT TABLE_fetch_stream( struct tagMSIVIEW *view, UINT row, UINT col, ISt
{
MSITABLEVIEW *tv = (MSITABLEVIEW*)view;
UINT r;
- LPWSTR full_name = NULL;
+ LPWSTR encname, full_name = NULL;
if( !view->ops->fetch_int )
return ERROR_INVALID_PARAMETER;
@@ -1180,11 +1180,13 @@ static UINT TABLE_fetch_stream( struct tagMSIVIEW *view, UINT row, UINT col, ISt
return r;
}
- r = db_get_raw_stream( tv->db, full_name, stm );
+ encname = encode_streamname( FALSE, full_name );
+ r = db_get_raw_stream( tv->db, encname, stm );
if( r )
ERR("fetching stream %s, error = %d\n",debugstr_w(full_name), r);
- msi_free( full_name );
+ msi_free( full_name );
+ msi_free( encname );
return r;
}
More information about the wine-cvs
mailing list