Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
7ee50b69
Commit
7ee50b69
authored
Feb 21, 2006
by
Huw Davies
Committed by
Alexandre Julliard
Feb 21, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msxml3: Use url monikers to load xml.
parent
2df3ad64
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
187 additions
and
19 deletions
+187
-19
Makefile.in
dlls/msxml3/Makefile.in
+1
-1
domdoc.c
dlls/msxml3/domdoc.c
+186
-18
No files found.
dlls/msxml3/Makefile.in
View file @
7ee50b69
...
...
@@ -4,7 +4,7 @@ TOPOBJDIR = ../..
SRCDIR
=
@srcdir@
VPATH
=
@srcdir@
MODULE
=
msxml3.dll
IMPORTS
=
oleaut
32 advapi32 kernel32 ntdll
IMPORTS
=
urlmon shlwapi oleaut32 ole
32 advapi32 kernel32 ntdll
EXTRALIBS
=
-luuid
$(LIBUNICODE)
@XML2LIBS@ @XSLTLIBS@
EXTRAINCL
=
@XML2INCL@ @XSLTINCL@
...
...
dlls/msxml3/domdoc.c
View file @
7ee50b69
...
...
@@ -30,6 +30,10 @@
#include "winnls.h"
#include "ole2.h"
#include "msxml2.h"
#include "wininet.h"
#include "urlmon.h"
#include "winreg.h"
#include "shlwapi.h"
#include "wine/debug.h"
...
...
@@ -39,6 +43,124 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml);
#ifdef HAVE_LIBXML2
typedef
struct
{
const
struct
IBindStatusCallbackVtbl
*
lpVtbl
;
}
bsc
;
static
HRESULT
WINAPI
bsc_QueryInterface
(
IBindStatusCallback
*
iface
,
REFIID
riid
,
LPVOID
*
ppobj
)
{
if
(
IsEqualGUID
(
riid
,
&
IID_IUnknown
)
||
IsEqualGUID
(
riid
,
&
IID_IBindStatusCallback
))
{
IBindStatusCallback_AddRef
(
iface
);
*
ppobj
=
iface
;
return
S_OK
;
}
FIXME
(
"interface %s not implemented
\n
"
,
debugstr_guid
(
riid
));
return
E_NOINTERFACE
;
}
static
ULONG
WINAPI
bsc_AddRef
(
IBindStatusCallback
*
iface
)
{
return
2
;
}
static
ULONG
WINAPI
bsc_Release
(
IBindStatusCallback
*
iface
)
{
return
1
;
}
static
HRESULT
WINAPI
bsc_OnStartBinding
(
IBindStatusCallback
*
iface
,
DWORD
dwReserved
,
IBinding
*
pib
)
{
return
S_OK
;
}
static
HRESULT
WINAPI
bsc_GetPriority
(
IBindStatusCallback
*
iface
,
LONG
*
pnPriority
)
{
return
S_OK
;
}
static
HRESULT
WINAPI
bsc_OnLowResource
(
IBindStatusCallback
*
iface
,
DWORD
reserved
)
{
return
S_OK
;
}
static
HRESULT
WINAPI
bsc_OnProgress
(
IBindStatusCallback
*
iface
,
ULONG
ulProgress
,
ULONG
ulProgressMax
,
ULONG
ulStatusCode
,
LPCWSTR
szStatusText
)
{
return
S_OK
;
}
static
HRESULT
WINAPI
bsc_OnStopBinding
(
IBindStatusCallback
*
iface
,
HRESULT
hresult
,
LPCWSTR
szError
)
{
return
S_OK
;
}
static
HRESULT
WINAPI
bsc_GetBindInfo
(
IBindStatusCallback
*
iface
,
DWORD
*
grfBINDF
,
BINDINFO
*
pbindinfo
)
{
*
grfBINDF
=
BINDF_RESYNCHRONIZE
;
return
S_OK
;
}
static
HRESULT
WINAPI
bsc_OnDataAvailable
(
IBindStatusCallback
*
iface
,
DWORD
grfBSCF
,
DWORD
dwSize
,
FORMATETC
*
pformatetc
,
STGMEDIUM
*
pstgmed
)
{
return
S_OK
;
}
static
HRESULT
WINAPI
bsc_OnObjectAvailable
(
IBindStatusCallback
*
iface
,
REFIID
riid
,
IUnknown
*
punk
)
{
return
S_OK
;
}
const
struct
IBindStatusCallbackVtbl
bsc_vtbl
=
{
bsc_QueryInterface
,
bsc_AddRef
,
bsc_Release
,
bsc_OnStartBinding
,
bsc_GetPriority
,
bsc_OnLowResource
,
bsc_OnProgress
,
bsc_OnStopBinding
,
bsc_GetBindInfo
,
bsc_OnDataAvailable
,
bsc_OnObjectAvailable
};
static
bsc
domdoc_bsc
=
{
&
bsc_vtbl
};
typedef
struct
_domdoc
{
const
struct
IXMLDOMDocumentVtbl
*
lpVtbl
;
...
...
@@ -750,39 +872,85 @@ static xmlDocPtr doparse( char *ptr, int len )
static
xmlDocPtr
doread
(
LPWSTR
filename
)
{
HANDLE
handle
,
mapping
;
DWORD
len
;
xmlDocPtr
xmldoc
=
NULL
;
char
*
ptr
;
HRESULT
hr
;
IBindCtx
*
pbc
;
IStream
*
stream
,
*
memstream
;
WCHAR
url
[
INTERNET_MAX_URL_LENGTH
];
BYTE
buf
[
4096
];
DWORD
read
,
written
;
TRACE
(
"%s
\n
"
,
debugstr_w
(
filename
));
handle
=
CreateFileW
(
filename
,
GENERIC_READ
,
FILE_SHARE_READ
,
NULL
,
OPEN_EXISTING
,
0
,
NULL
);
if
(
handle
==
INVALID_HANDLE_VALUE
)
return
xmldoc
;
if
(
!
PathIsURLW
(
filename
))
{
WCHAR
fullpath
[
MAX_PATH
];
DWORD
needed
=
sizeof
(
url
)
/
sizeof
(
WCHAR
);
if
(
!
PathSearchAndQualifyW
(
filename
,
fullpath
,
sizeof
(
fullpath
)
/
sizeof
(
WCHAR
)))
{
WARN
(
"can't find path
\n
"
);
return
NULL
;
}
if
(
FAILED
(
UrlCreateFromPathW
(
fullpath
,
url
,
&
needed
,
0
)))
{
ERR
(
"can't create url from path
\n
"
);
return
NULL
;
}
filename
=
url
;
}
len
=
GetFileSize
(
handle
,
NULL
);
if
(
len
!=
INVALID_FILE_SIZE
||
GetLastError
()
==
NO_ERROR
)
hr
=
CreateBindCtx
(
0
,
&
pbc
);
if
(
SUCCEEDED
(
hr
)
)
{
mapping
=
CreateFileMappingW
(
handle
,
NULL
,
PAGE_READONLY
,
0
,
0
,
NULL
);
if
(
mapping
)
hr
=
RegisterBindStatusCallback
(
pbc
,
(
IBindStatusCallback
*
)
&
domdoc_bsc
.
lpVtbl
,
NULL
,
0
);
if
(
SUCCEEDED
(
hr
)
)
{
ptr
=
MapViewOfFile
(
mapping
,
FILE_MAP_READ
,
0
,
0
,
len
);
if
(
ptr
)
IMoniker
*
moniker
;
hr
=
CreateURLMoniker
(
NULL
,
filename
,
&
moniker
);
if
(
SUCCEEDED
(
hr
))
{
xmldoc
=
doparse
(
ptr
,
len
);
UnmapViewOfFile
(
ptr
);
hr
=
IMoniker_BindToStorage
(
moniker
,
pbc
,
NULL
,
&
IID_IStream
,
(
LPVOID
*
)
&
stream
);
IMoniker_Release
(
moniker
);
}
}
CloseHandle
(
mapping
);
IBindCtx_Release
(
pbc
);
}
if
(
FAILED
(
hr
))
return
NULL
;
hr
=
CreateStreamOnHGlobal
(
NULL
,
TRUE
,
&
memstream
);
if
(
FAILED
(
hr
))
{
IStream_Release
(
stream
);
return
NULL
;
}
CloseHandle
(
handle
);
do
{
IStream_Read
(
stream
,
buf
,
sizeof
(
buf
),
&
read
);
hr
=
IStream_Write
(
memstream
,
buf
,
read
,
&
written
);
}
while
(
SUCCEEDED
(
hr
)
&&
written
!=
0
&&
read
!=
0
);
if
(
SUCCEEDED
(
hr
))
{
HGLOBAL
hglobal
;
hr
=
GetHGlobalFromStream
(
memstream
,
&
hglobal
);
if
(
SUCCEEDED
(
hr
))
{
DWORD
len
=
GlobalSize
(
hglobal
);
char
*
ptr
=
GlobalLock
(
hglobal
);
if
(
len
!=
0
)
xmldoc
=
doparse
(
ptr
,
len
);
GlobalUnlock
(
hglobal
);
}
}
IStream_Release
(
memstream
);
IStream_Release
(
stream
);
return
xmldoc
;
}
static
HRESULT
WINAPI
domdoc_load
(
IXMLDOMDocument
*
iface
,
VARIANT
xmlSource
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment