Jacek Caban : itss: Fix opening streams with back slashes.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Feb 23 05:28:12 CST 2007


Module: wine
Branch: master
Commit: 18632c2b3c13d5b369051a919151b40dbcd25f91
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=18632c2b3c13d5b369051a919151b40dbcd25f91

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Feb 22 21:08:47 2007 +0100

itss: Fix opening streams with back slashes.

---

 dlls/itss/storage.c |   18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/dlls/itss/storage.c b/dlls/itss/storage.c
index 6c163ad..c3c144c 100644
--- a/dlls/itss/storage.c
+++ b/dlls/itss/storage.c
@@ -329,7 +329,7 @@ static HRESULT WINAPI ITSS_IStorageImpl_OpenStream(
     DWORD len;
     struct chmUnitInfo ui;
     int r;
-    WCHAR *path;
+    WCHAR *path, *p;
 
     TRACE("%p %s %p %u %u %p\n", This, debugstr_w(pwcsName),
           reserved1, grfMode, reserved2, ppstm );
@@ -337,21 +337,29 @@ static HRESULT WINAPI ITSS_IStorageImpl_OpenStream(
     len = strlenW( This->dir ) + strlenW( pwcsName ) + 1;
     path = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) );
     strcpyW( path, This->dir );
-    if( pwcsName[0] == '/' )
+
+    if( pwcsName[0] == '/' || pwcsName[0] == '\\' )
     {
-        WCHAR *p = &path[strlenW( path ) - 1];
+        p = &path[strlenW( path ) - 1];
         while( ( path <= p ) && ( *p == '/' ) )
             *p-- = 0;
     }
     strcatW( path, pwcsName );
 
+    for(p=path; *p; p++) {
+        if(*p == '\\')
+            *p = '/';
+    }
+
     TRACE("Resolving %s\n", debugstr_w(path));
 
     r = chm_resolve_object(This->chmfile, path, &ui);
     HeapFree( GetProcessHeap(), 0, path );
 
-    if( r != CHM_RESOLVE_SUCCESS )
+    if( r != CHM_RESOLVE_SUCCESS ) {
+        WARN("Could not resolve object\n");
         return STG_E_FILENOTFOUND;
+    }
 
     stm = ITSS_create_stream( This, &ui );
     if( !stm )
@@ -660,7 +668,7 @@ static HRESULT WINAPI ITSS_IStream_Read(
     This->addr += count;
     if( pcbRead )
         *pcbRead = count;
-    
+
     return count ? S_OK : S_FALSE;
 }
 




More information about the wine-cvs mailing list