head 1.2; access; symbols netbsd-7-2-RELEASE:1.1.1.2 netbsd-7-1-2-RELEASE:1.1.1.2 netbsd-7-1-1-RELEASE:1.1.1.2 netbsd-7-1:1.1.1.2.0.40 netbsd-7-1-RELEASE:1.1.1.2 netbsd-7-1-RC2:1.1.1.2 netbsd-7-1-RC1:1.1.1.2 netbsd-7-0-2-RELEASE:1.1.1.2 netbsd-7-0-1-RELEASE:1.1.1.2 netbsd-7-0:1.1.1.2.0.38 netbsd-7-0-RELEASE:1.1.1.2 netbsd-7-0-RC3:1.1.1.2 netbsd-7-0-RC2:1.1.1.2 netbsd-7-0-RC1:1.1.1.2 netbsd-5-2-3-RELEASE:1.1.1.2 netbsd-5-1-5-RELEASE:1.1.1.2 netbsd-6-0-6-RELEASE:1.1.1.2 netbsd-6-1-5-RELEASE:1.1.1.2 netbsd-7:1.1.1.2.0.36 netbsd-7-base:1.1.1.2 netbsd-6-1-4-RELEASE:1.1.1.2 netbsd-6-0-5-RELEASE:1.1.1.2 riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.1.1.2 riastradh-drm2:1.1.1.2.0.34 riastradh-drm2-base:1.1.1.2 netbsd-6-1-3-RELEASE:1.1.1.2 netbsd-6-0-4-RELEASE:1.1.1.2 netbsd-5-2-2-RELEASE:1.1.1.2 netbsd-5-1-4-RELEASE:1.1.1.2 netbsd-6-1-2-RELEASE:1.1.1.2 netbsd-6-0-3-RELEASE:1.1.1.2 netbsd-5-2-1-RELEASE:1.1.1.2 netbsd-5-1-3-RELEASE:1.1.1.2 netbsd-6-1-1-RELEASE:1.1.1.2 netbsd-6-1:1.1.1.2.0.32 netbsd-6-0-2-RELEASE:1.1.1.2 netbsd-6-1-RELEASE:1.1.1.2 netbsd-6-1-RC4:1.1.1.2 netbsd-6-1-RC3:1.1.1.2 netbsd-6-1-RC2:1.1.1.2 netbsd-6-1-RC1:1.1.1.2 netbsd-5-2:1.1.1.2.0.30 netbsd-6-0-1-RELEASE:1.1.1.2 netbsd-5-2-RELEASE:1.1.1.2 netbsd-5-2-RC1:1.1.1.2 netbsd-6-0:1.1.1.2.0.28 netbsd-6-0-RELEASE:1.1.1.2 netbsd-6-0-RC2:1.1.1.2 netbsd-6-0-RC1:1.1.1.2 netbsd-6:1.1.1.2.0.26 netbsd-6-base:1.1.1.2 netbsd-5-1-2-RELEASE:1.1.1.2 netbsd-5-1-1-RELEASE:1.1.1.2 netbsd-5-1:1.1.1.2.0.24 netbsd-5-1-RELEASE:1.1.1.2 netbsd-5-1-RC4:1.1.1.2 netbsd-5-1-RC3:1.1.1.2 netbsd-5-1-RC2:1.1.1.2 netbsd-5-1-RC1:1.1.1.2 netbsd-5-0-2-RELEASE:1.1.1.2 netbsd-5-0-1-RELEASE:1.1.1.2 netbsd-5-0:1.1.1.2.0.22 netbsd-5-0-RELEASE:1.1.1.2 netbsd-5-0-RC4:1.1.1.2 netbsd-5-0-RC3:1.1.1.2 netbsd-5-0-RC2:1.1.1.2 netbsd-5-0-RC1:1.1.1.2 netbsd-5:1.1.1.2.0.20 netbsd-5-base:1.1.1.2 netbsd-4-0-1-RELEASE:1.1.1.2 netbsd-4-0:1.1.1.2.0.18 netbsd-4-0-RELEASE:1.1.1.2 netbsd-4-0-RC5:1.1.1.2 netbsd-4-0-RC4:1.1.1.2 netbsd-4-0-RC3:1.1.1.2 netbsd-4-0-RC2:1.1.1.2 netbsd-4-0-RC1:1.1.1.2 netbsd-3-1-1-RELEASE:1.1.1.2 netbsd-3-0-3-RELEASE:1.1.1.2 abandoned-netbsd-4-base:1.1.1.2 abandoned-netbsd-4:1.1.1.2.0.12 netbsd-3-1:1.1.1.2.0.14 netbsd-3-1-RELEASE:1.1.1.2 netbsd-3-0-2-RELEASE:1.1.1.2 netbsd-3-1-RC4:1.1.1.2 netbsd-3-1-RC3:1.1.1.2 netbsd-3-1-RC2:1.1.1.2 netbsd-3-1-RC1:1.1.1.2 netbsd-4:1.1.1.2.0.16 netbsd-4-base:1.1.1.2 netbsd-3-0-1-RELEASE:1.1.1.2 netbsd-3-0:1.1.1.2.0.10 netbsd-3-0-RELEASE:1.1.1.2 netbsd-3-0-RC6:1.1.1.2 netbsd-3-0-RC5:1.1.1.2 netbsd-3-0-RC4:1.1.1.2 netbsd-3-0-RC3:1.1.1.2 netbsd-3-0-RC2:1.1.1.2 netbsd-3-0-RC1:1.1.1.2 netbsd-2-0-3-RELEASE:1.1.1.2 netbsd-2-1:1.1.1.2.0.8 netbsd-2-1-RELEASE:1.1.1.2 netbsd-2-1-RC6:1.1.1.2 netbsd-2-1-RC5:1.1.1.2 netbsd-2-1-RC4:1.1.1.2 netbsd-2-1-RC3:1.1.1.2 netbsd-2-1-RC2:1.1.1.2 netbsd-2-1-RC1:1.1.1.2 netbsd-2-0-2-RELEASE:1.1.1.2 v4-5-0:1.1.1.2 v4-5-0_beforeimport:1.1.1.2 netbsd-3:1.1.1.2.0.6 netbsd-3-base:1.1.1.2 netbsd-2-0-1-RELEASE:1.1.1.2 netbsd-2:1.1.1.2.0.4 netbsd-2-base:1.1.1.2 netbsd-2-0-RELEASE:1.1.1.2 netbsd-2-0-RC5:1.1.1.2 netbsd-2-0-RC4:1.1.1.2 netbsd-2-0-RC3:1.1.1.2 netbsd-2-0-RC2:1.1.1.2 netbsd-2-0-RC1:1.1.1.2 netbsd-2-0:1.1.1.2.0.2 netbsd-2-0-base:1.1.1.2 v4-4-0:1.1.1.2 v4-4-0_beforeimport:1.1.1.1 netbsd-1-6-PATCH002-RELEASE:1.1.1.1 netbsd-1-6-PATCH002:1.1.1.1 netbsd-1-6-PATCH002-RC4:1.1.1.1 v4-3-0-2003-12-19:1.1.1.1 netbsd-1-6-PATCH002-RC3:1.1.1.1 netbsd-1-6-PATCH002-RC2:1.1.1.1 netbsd-1-6-PATCH002-RC1:1.1.1.1 netbsd-1-6:1.1.1.1.0.2 netbsd-1-6-base:1.1.1.1 v4-3-0:1.1.1.1 XF86:1.1.1; locks; strict; comment @// @; 1.2 date 2015.07.23.08.12.47; author mrg; state dead; branches; next 1.1; commitid 3Fk7MoycOv7VSnuy; 1.1 date 2003.02.28.13.19.12; author tron; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 2003.02.28.13.19.12; author tron; state Exp; branches; next 1.1.1.2; 1.1.1.2 date 2004.03.05.14.26.09; author tron; state Exp; branches; next ; desc @@ 1.2 log @remove obsolete XFree86 sources. @ text @#include "xmlparse.h" #ifdef XML_UNICODE #define UNICODE #endif #include #include #include #include #include #include "xmlurl.h" #include "xmlmime.h" static int processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url); typedef void (*StopHandler)(void *, HRESULT); class Callback : public IBindStatusCallback { public: // IUnknown methods STDMETHODIMP QueryInterface(REFIID,void **); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // IBindStatusCallback methods STDMETHODIMP OnStartBinding(DWORD, IBinding *); STDMETHODIMP GetPriority(LONG *); STDMETHODIMP OnLowResource(DWORD); STDMETHODIMP OnProgress(ULONG, ULONG, ULONG, LPCWSTR); STDMETHODIMP OnStopBinding(HRESULT, LPCWSTR); STDMETHODIMP GetBindInfo(DWORD *, BINDINFO *); STDMETHODIMP OnDataAvailable(DWORD, DWORD, FORMATETC *, STGMEDIUM *); STDMETHODIMP OnObjectAvailable(REFIID, IUnknown *); Callback(XML_Parser, IMoniker *, StopHandler, void *); ~Callback(); int externalEntityRef(const XML_Char *context, const XML_Char *systemId, const XML_Char *publicId); private: XML_Parser parser_; IMoniker *baseMoniker_; DWORD totalRead_; ULONG ref_; IBinding *pBinding_; StopHandler stopHandler_; void *stopArg_; }; STDMETHODIMP_(ULONG) Callback::AddRef() { return ref_++; } STDMETHODIMP_(ULONG) Callback::Release() { if (--ref_ == 0) { delete this; return 0; } return ref_; } STDMETHODIMP Callback::QueryInterface(REFIID riid, void** ppv) { if (IsEqualGUID(riid, IID_IUnknown)) *ppv = (IUnknown *)this; else if (IsEqualGUID(riid, IID_IBindStatusCallback)) *ppv = (IBindStatusCallback *)this; else return E_NOINTERFACE; ((LPUNKNOWN)*ppv)->AddRef(); return S_OK; } STDMETHODIMP Callback::OnStartBinding(DWORD, IBinding* pBinding) { pBinding_ = pBinding; pBinding->AddRef(); return S_OK; } STDMETHODIMP Callback::GetPriority(LONG *) { return E_NOTIMPL; } STDMETHODIMP Callback::OnLowResource(DWORD) { return E_NOTIMPL; } STDMETHODIMP Callback::OnProgress(ULONG, ULONG, ULONG, LPCWSTR) { return S_OK; } STDMETHODIMP Callback::OnStopBinding(HRESULT hr, LPCWSTR szError) { if (pBinding_) { pBinding_->Release(); pBinding_ = 0; } if (baseMoniker_) { baseMoniker_->Release(); baseMoniker_ = 0; } stopHandler_(stopArg_, hr); return S_OK; } STDMETHODIMP Callback::GetBindInfo(DWORD* pgrfBINDF, BINDINFO* pbindinfo) { *pgrfBINDF = BINDF_ASYNCHRONOUS; return S_OK; } static void reportError(XML_Parser parser) { int code = XML_GetErrorCode(parser); const XML_Char *message = XML_ErrorString(code); if (message) _ftprintf(stderr, _T("%s:%d:%ld: %s\n"), XML_GetBase(parser), XML_GetErrorLineNumber(parser), XML_GetErrorColumnNumber(parser), message); else _ftprintf(stderr, _T("%s: (unknown message %d)\n"), XML_GetBase(parser), code); } STDMETHODIMP Callback::OnDataAvailable(DWORD grfBSCF, DWORD dwSize, FORMATETC *pfmtetc, STGMEDIUM* pstgmed) { if (grfBSCF & BSCF_FIRSTDATANOTIFICATION) { IWinInetHttpInfo *hp; HRESULT hr = pBinding_->QueryInterface(IID_IWinInetHttpInfo, (void **)&hp); if (SUCCEEDED(hr)) { char contentType[1024]; DWORD bufSize = sizeof(contentType); DWORD flags = 0; contentType[0] = 0; hr = hp->QueryInfo(HTTP_QUERY_CONTENT_TYPE, contentType, &bufSize, 0, NULL); if (SUCCEEDED(hr)) { char charset[CHARSET_MAX]; getXMLCharset(contentType, charset); if (charset[0]) { #ifdef XML_UNICODE XML_Char wcharset[CHARSET_MAX]; XML_Char *p1 = wcharset; const char *p2 = charset; while ((*p1++ = (unsigned char)*p2++) != 0) ; XML_SetEncoding(parser_, wcharset); #else XML_SetEncoding(parser_, charset); #endif } } hp->Release(); } } if (!parser_) return E_ABORT; if (pstgmed->tymed == TYMED_ISTREAM) { while (totalRead_ < dwSize) { #define READ_MAX (64*1024) DWORD nToRead = dwSize - totalRead_; if (nToRead > READ_MAX) nToRead = READ_MAX; void *buf = XML_GetBuffer(parser_, nToRead); if (!buf) { _ftprintf(stderr, _T("out of memory\n")); return E_ABORT; } DWORD nRead; HRESULT hr = pstgmed->pstm->Read(buf, nToRead, &nRead); if (SUCCEEDED(hr)) { totalRead_ += nRead; if (!XML_ParseBuffer(parser_, nRead, (grfBSCF & BSCF_LASTDATANOTIFICATION) != 0 && totalRead_ == dwSize)) { reportError(parser_); return E_ABORT; } } } } return S_OK; } STDMETHODIMP Callback::OnObjectAvailable(REFIID, IUnknown *) { return S_OK; } int Callback::externalEntityRef(const XML_Char *context, const XML_Char *systemId, const XML_Char *publicId) { XML_Parser entParser = XML_ExternalEntityParserCreate(parser_, context, 0); XML_SetBase(entParser, systemId); int ret = processURL(entParser, baseMoniker_, systemId); XML_ParserFree(entParser); return ret; } Callback::Callback(XML_Parser parser, IMoniker *baseMoniker, StopHandler stopHandler, void *stopArg) : parser_(parser), baseMoniker_(baseMoniker), ref_(0), pBinding_(0), totalRead_(0), stopHandler_(stopHandler), stopArg_(stopArg) { if (baseMoniker_) baseMoniker_->AddRef(); } Callback::~Callback() { if (pBinding_) pBinding_->Release(); if (baseMoniker_) baseMoniker_->Release(); } static int externalEntityRef(void *arg, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId) { return ((Callback *)arg)->externalEntityRef(context, systemId, publicId); } static HRESULT openStream(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *uri, StopHandler stopHandler, void *stopArg) { if (!XML_SetBase(parser, uri)) return E_OUTOFMEMORY; HRESULT hr; IMoniker *m; #ifdef XML_UNICODE hr = CreateURLMoniker(0, uri, &m); #else LPWSTR uriw = new wchar_t[strlen(uri) + 1]; for (int i = 0;; i++) { uriw[i] = uri[i]; if (uriw[i] == 0) break; } hr = CreateURLMoniker(baseMoniker, uriw, &m); delete [] uriw; #endif if (FAILED(hr)) return hr; IBindStatusCallback *cb = new Callback(parser, m, stopHandler, stopArg); XML_SetExternalEntityRefHandler(parser, externalEntityRef); XML_SetExternalEntityRefHandlerArg(parser, cb); cb->AddRef(); IBindCtx *b; if (FAILED(hr = CreateAsyncBindCtx(0, cb, 0, &b))) { cb->Release(); m->Release(); return hr; } cb->Release(); IStream *pStream; hr = m->BindToStorage(b, 0, IID_IStream, (void **)&pStream); if (SUCCEEDED(hr)) { if (pStream) pStream->Release(); } if (hr == MK_S_ASYNCHRONOUS) hr = S_OK; m->Release(); b->Release(); return hr; } struct QuitInfo { const XML_Char *url; HRESULT hr; int stop; }; static void winPerror(const XML_Char *url, HRESULT hr) { LPVOID buf; if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE, GetModuleHandleA("urlmon.dll"), hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL) || FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL)) { /* The system error messages seem to end with a newline. */ _ftprintf(stderr, _T("%s: %s"), url, buf); fflush(stderr); LocalFree(buf); } else _ftprintf(stderr, _T("%s: error %x\n"), url, hr); } static void threadQuit(void *p, HRESULT hr) { QuitInfo *qi = (QuitInfo *)p; qi->hr = hr; qi->stop = 1; } extern "C" int XML_URLInit() { return SUCCEEDED(CoInitialize(0)); } extern "C" void XML_URLUninit() { CoUninitialize(); } static int processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url) { QuitInfo qi; qi.stop = 0; qi.url = url; XML_SetBase(parser, url); HRESULT hr = openStream(parser, baseMoniker, url, threadQuit, &qi); if (FAILED(hr)) { winPerror(url, hr); return 0; } else if (FAILED(qi.hr)) { winPerror(url, qi.hr); return 0; } MSG msg; while (!qi.stop && GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return 1; } extern "C" int XML_ProcessURL(XML_Parser parser, const XML_Char *url, unsigned flags) { return processURL(parser, 0, url); } @ 1.1 log @Initial revision @ text @@ 1.1.1.1 log @Import of XFree86 4.3.0. @ text @@ 1.1.1.2 log @Import of XFree86 4.4.0. @ text @d1 1 a1 1 #include "expat.h" d13 2 a14 2 static int processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url); d35 1 a35 2 int externalEntityRef(const XML_Char *context, const XML_Char *systemId, const XML_Char *publicId); d46 1 a46 2 STDMETHODIMP_(ULONG) Callback::AddRef() d51 1 a51 2 STDMETHODIMP_(ULONG) Callback::Release() d60 1 a60 2 STDMETHODIMP Callback::QueryInterface(REFIID riid, void** ppv) d72 1 a72 2 STDMETHODIMP Callback::OnStartBinding(DWORD, IBinding* pBinding) d79 1 a79 2 STDMETHODIMP Callback::GetPriority(LONG *) d84 1 a84 2 STDMETHODIMP Callback::OnLowResource(DWORD) d89 1 a89 2 STDMETHODIMP Callback::OnProgress(ULONG, ULONG, ULONG, LPCWSTR) d94 1 a94 2 STDMETHODIMP Callback::OnStopBinding(HRESULT hr, LPCWSTR szError) d108 1 a108 2 STDMETHODIMP Callback::GetBindInfo(DWORD* pgrfBINDF, BINDINFO* pbindinfo) d114 2 a115 2 static void reportError(XML_Parser parser) d126 1 a126 2 _ftprintf(stderr, _T("%s: (unknown message %d)\n"), XML_GetBase(parser), code); d129 4 a132 5 STDMETHODIMP Callback::OnDataAvailable(DWORD grfBSCF, DWORD dwSize, FORMATETC *pfmtetc, STGMEDIUM* pstgmed) d136 1 a136 2 HRESULT hr = pBinding_->QueryInterface(IID_IWinInetHttpInfo, (void **)&hp); d142 1 a142 2 hr = hp->QueryInfo(HTTP_QUERY_CONTENT_TYPE, contentType, &bufSize, 0, NULL); d192 1 a192 2 STDMETHODIMP Callback::OnObjectAvailable(REFIID, IUnknown *) d197 1 a197 4 int Callback::externalEntityRef(const XML_Char *context, const XML_Char *systemId, const XML_Char *publicId) d206 1 a206 2 Callback::Callback(XML_Parser parser, IMoniker *baseMoniker, StopHandler stopHandler, void *stopArg) d227 6 a232 6 static int externalEntityRef(void *arg, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId) d238 5 a242 5 static HRESULT openStream(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *uri, StopHandler stopHandler, void *stopArg) d292 2 a293 2 static void winPerror(const XML_Char *url, HRESULT hr) d321 1 a321 2 static void threadQuit(void *p, HRESULT hr) d329 1 a329 2 int XML_URLInit(void) d335 1 a335 2 void XML_URLUninit(void) d340 2 a341 3 static int processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url) d366 3 a368 4 int XML_ProcessURL(XML_Parser parser, const XML_Char *url, unsigned flags) @