mirror of
https://github.com/reactos/reactos.git
synced 2024-10-04 16:36:11 +00:00
[ITSS]
sync itss to wine 1.1.40 svn path=/trunk/; revision=45979
This commit is contained in:
parent
314b9e10be
commit
6534ce1c51
|
@ -829,6 +829,38 @@ struct chmFile *chm_openW(const WCHAR *filename)
|
|||
return newHandle;
|
||||
}
|
||||
|
||||
/* Duplicate an ITS archive handle */
|
||||
struct chmFile *chm_dup(struct chmFile *oldHandle)
|
||||
{
|
||||
struct chmFile *newHandle=NULL;
|
||||
|
||||
newHandle = HeapAlloc(GetProcessHeap(), 0, sizeof(struct chmFile));
|
||||
memcpy(newHandle, oldHandle, sizeof(struct chmFile));
|
||||
|
||||
/* duplicate fd handle */
|
||||
DuplicateHandle(GetCurrentProcess(), oldHandle->fd,
|
||||
GetCurrentProcess(), &(newHandle->fd),
|
||||
0, FALSE, DUPLICATE_SAME_ACCESS);
|
||||
newHandle->lzx_state = NULL;
|
||||
newHandle->cache_blocks = NULL;
|
||||
newHandle->cache_block_indices = NULL;
|
||||
newHandle->cache_num_blocks = 0;
|
||||
|
||||
/* initialize mutexes, if needed */
|
||||
InitializeCriticalSection(&newHandle->mutex);
|
||||
newHandle->mutex.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": chmFile.mutex");
|
||||
InitializeCriticalSection(&newHandle->lzx_mutex);
|
||||
newHandle->lzx_mutex.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": chmFile.lzx_mutex");
|
||||
InitializeCriticalSection(&newHandle->cache_mutex);
|
||||
newHandle->cache_mutex.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": chmFile.cache_mutex");
|
||||
|
||||
/* initialize cache */
|
||||
chm_set_param(newHandle, CHM_PARAM_MAX_BLOCKS_CACHED,
|
||||
CHM_MAX_BLOCKS_CACHED);
|
||||
|
||||
return newHandle;
|
||||
}
|
||||
|
||||
/* close an ITS archive */
|
||||
void chm_close(struct chmFile *h)
|
||||
{
|
||||
|
|
|
@ -73,6 +73,7 @@ struct chmUnitInfo
|
|||
};
|
||||
|
||||
struct chmFile* chm_openW(const WCHAR *filename);
|
||||
struct chmFile *chm_dup(struct chmFile *oldHandle);
|
||||
|
||||
/* close an ITS archive */
|
||||
void chm_close(struct chmFile *h);
|
||||
|
|
|
@ -16,7 +16,7 @@ DelReg=Classes.Reg, Misc.Reg
|
|||
HKCR,"CLSID\%CLSID_ITStorage%",,,"Microsoft InfoTech IStorage System"
|
||||
HKCR,"CLSID\%CLSID_ITStorage%\InProcServer32",,,"itss.dll"
|
||||
HKCR,"CLSID\%CLSID_ITStorage%\InProcServer32","ThreadingModel",,"Both"
|
||||
HKCR,"CLSID\%CLSID_ITStorage%\NotInsertable",,,""
|
||||
HKCR,"CLSID\%CLSID_ITStorage%\NotInsertable",,16
|
||||
HKCR,"CLSID\%CLSID_ITStorage%\ProgID",,,"MSITFS1.0"
|
||||
HKCR,"CLSID\%CLSID_ITStorage%\VersionIndependentProgID",,,"MSITFS"
|
||||
|
||||
|
@ -28,7 +28,7 @@ HKCR,"MSITFS\CurVer",,,"MSITFS1.0"
|
|||
HKCR,"CLSID\%CLSID_MSITStore%",,,"Microsoft InfoTech Protocol for IE 3.0"
|
||||
HKCR,"CLSID\%CLSID_MSITStore%\InProcServer32",,,"itss.dll"
|
||||
HKCR,"CLSID\%CLSID_MSITStore%\InProcServer32","ThreadingModel",,"Both"
|
||||
HKCR,"CLSID\%CLSID_MSITStore%\NotInsertable",,,""
|
||||
HKCR,"CLSID\%CLSID_MSITStore%\NotInsertable",,16
|
||||
HKCR,"CLSID\%CLSID_MSITStore%\ProgID",,,"MSITFS1.0"
|
||||
HKCR,"CLSID\%CLSID_MSITStore%\VersionIndependentProgID",,,"MSITFS"
|
||||
|
||||
|
@ -41,9 +41,9 @@ HKCR,"MSITStore\CurVer",,,"MSITStore1.0"
|
|||
HKCR,"CLSID\%CLSID_ITSProtocol%",,,"Microsoft InfoTech Protocol for IE 4.0"
|
||||
HKCR,"CLSID\%CLSID_ITSProtocol%\InProcServer32",,,"itss.dll"
|
||||
HKCR,"CLSID\%CLSID_ITSProtocol%\InProcServer32","ThreadingModel",,"Both"
|
||||
HKCR,"CLSID\%CLSID_ITSProtocol%\NotInsertable",,,""
|
||||
HKCR,"CLSID\%CLSID_ITSProtocol%\NotInsertable",,16
|
||||
HKCR,"CLSID\%CLSID_ITSProtocol%\ProgID",,,"MSITFS1.0"
|
||||
HKCR,"CLSID\%CLSID_ITSProtocol%%\VersionIndependentProgID",,,"MSITFS"
|
||||
HKCR,"CLSID\%CLSID_ITSProtocol%\VersionIndependentProgID",,,"MSITFS"
|
||||
|
||||
HKCR,"ITSProtocol","Microsoft InfoTech Protocols for IE 4.0"
|
||||
HKCR,"ITSProtocol\CLSID",,,"%CLSID_ITSProtocol%"
|
||||
|
@ -54,7 +54,7 @@ HKCR,"ITSProtocol\CurVer",,,"ITSProtocol1.0"
|
|||
HKCR,"CLSID\%CLSID_MSFSStore%",,,"Microsoft InfoTech IStorage for Win32 Files"
|
||||
HKCR,"CLSID\%CLSID_MSFSStore%\InProcServer32",,,"itss.dll"
|
||||
HKCR,"CLSID\%CLSID_MSFSStore%\InProcServer32","ThreadingModel",,"Both"
|
||||
HKCR,"CLSID\%CLSID_MSFSStore%\NotInsertable",,,""
|
||||
HKCR,"CLSID\%CLSID_MSFSStore%\NotInsertable",,16
|
||||
HKCR,"CLSID\%CLSID_MSFSStore%\ProgID",,,"MSITFS1.0"
|
||||
HKCR,"CLSID\%CLSID_MSFSStore%\VersionIndependentProgID",,,"MSITFS"
|
||||
|
||||
|
|
|
@ -391,10 +391,43 @@ static HRESULT WINAPI ITSS_IStorageImpl_OpenStorage(
|
|||
IStorage** ppstg)
|
||||
{
|
||||
ITSS_IStorageImpl *This = (ITSS_IStorageImpl *)iface;
|
||||
static const WCHAR szRoot[] = { '/', 0 };
|
||||
struct chmFile *chmfile;
|
||||
WCHAR *path, *p;
|
||||
DWORD len;
|
||||
|
||||
FIXME("%p %s %p %u %p %u %p\n", This, debugstr_w(pwcsName),
|
||||
TRACE("%p %s %p %u %p %u %p\n", This, debugstr_w(pwcsName),
|
||||
pstgPriority, grfMode, snbExclude, reserved, ppstg);
|
||||
return E_NOTIMPL;
|
||||
|
||||
chmfile = chm_dup( This->chmfile );
|
||||
if( !chmfile )
|
||||
return E_FAIL;
|
||||
|
||||
len = strlenW( This->dir ) + strlenW( pwcsName ) + 1;
|
||||
path = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) );
|
||||
strcpyW( path, This->dir );
|
||||
|
||||
if( pwcsName[0] == '/' || pwcsName[0] == '\\' )
|
||||
{
|
||||
p = &path[strlenW( path ) - 1];
|
||||
while( ( path <= p ) && ( *p == '/' ) )
|
||||
*p-- = 0;
|
||||
}
|
||||
strcatW( path, pwcsName );
|
||||
|
||||
for(p=path; *p; p++) {
|
||||
if(*p == '\\')
|
||||
*p = '/';
|
||||
}
|
||||
|
||||
if(*--p == '/')
|
||||
*p = 0;
|
||||
|
||||
strcatW( path, szRoot );
|
||||
|
||||
TRACE("Resolving %s\n", debugstr_w(path));
|
||||
|
||||
return ITSS_create_chm_storage(chmfile, path, ppstg);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ITSS_IStorageImpl_CopyTo(
|
||||
|
|
Loading…
Reference in a new issue