Implementing stub version of dbgeng.dll (Debugger Engine API)

Volodymyr M. Shcherbyna volodymyr at shcherbyna.com
Wed Nov 17 14:52:49 CST 2010


---
 dlls/dbgeng/Makefile.in |    7 +++
 dlls/dbgeng/dbgeng.c    |  111
+++++++++++++++++++++++++++++++++++++++++++++++
 dlls/dbgeng/dbgeng.spec |    2 +
 3 files changed, 120 insertions(+), 0 deletions(-)
 create mode 100644 dlls/dbgeng/Makefile.in
 create mode 100644 dlls/dbgeng/dbgeng.c
 create mode 100644 dlls/dbgeng/dbgeng.spec

diff --git a/dlls/dbgeng/Makefile.in b/dlls/dbgeng/Makefile.in
new file mode 100644
index 0000000..07c58ab
--- /dev/null
+++ b/dlls/dbgeng/Makefile.in
@@ -0,0 +1,7 @@
+MODULE    = dbgeng.dll
+IMPORTLIB = dbgebg
+IMPORTS   = kernel
+
+C_SRCS = dbgeng.c
+
+ at MAKE_DLL_RULES@
diff --git a/dlls/dbgeng/dbgeng.c b/dlls/dbgeng/dbgeng.c
new file mode 100644
index 0000000..8461d33
--- /dev/null
+++ b/dlls/dbgeng/dbgeng.c
@@ -0,0 +1,111 @@
+/*
+ * Support for Microsoft Debugging Extension API
+ *
+ * Copyright 2010 WINE Project (http://www.winehq.org/)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
USA
+ */
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winternl.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(dbgeng);
+
+/************************************************************
+*                    DebugExtensionInitialize   (DBGENG.@)
+*
+* Initialize dbgeng Engine.
+*
+* PARAMS
+*   Version   [I] Receives the version of the extension. The high 16 bits
contain the major version number, and the low 16 bits contain the minor
version number.
+*   Flags     [I] Set this to zero. (Reserved for future use.)
+*
+* RETURNS
+*   Success: S_OK
+*   Failure: Any other value indicates that the extension DLL was unable to
initialize and the engine will unload it
+*
+* BUGS
+*   Unimplemented
+*/
+HRESULT WINAPI DebugExtensionInitialize(ULONG * Version, ULONG * Flags)
+{
+    FIXME("(%p,%p): stub\n", Version, Flags);
+
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+
+    return E_NOTIMPL;
+}
+
+/************************************************************
+*                    DebugCreate   (DBGENG.@)
+*
+* Creates a new client object and returns an interface pointer to it
+*
+* PARAMS
+*   InterfaceId   [I] Specifies the interface identifier (IID) of the
desired debugger engine client interface.
+*   Interface     [I] Receives an interface pointer for the new client.
+*
+* RETURNS
+*   Success: S_OK
+*   Failure: Any other value
+*
+* BUGS
+*   Unimplemented
+*/
+HRESULT WINAPI DebugCreate(REFIID InterfaceId, PVOID *Interface)
+{
+    FIXME("(%p,%p): stub\n", InterfaceId, Interface);
+
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+
+    return E_NOTIMPL;
+}
+
+/************************************************************
+*                    DllMain   (DBGENG.@)
+*
+* Library Entry Point
+*
+* PARAMS
+*   hInstance   [I] A handle to the DLL module
+*   fdwReason   [I] The reason code that indicates why the DLL entry-point
function is being called
+*   lpvReserved [I] Extended information
+*
+* RETURNS
+*   Success: TRUE (when fdwReason is DLL_PROCESS_ATTACH)
+*   Failure: FALSE (when fdwReason is DLL_PROCESS_ATTACH)
+*
+* BUGS
+*   Unimplemented
+*/
+BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID
lpvReserved)
+{
+    BOOL bRetVal = FALSE;
+
+    TRACE("(%p,%x,%p)\n", hInstance, fdwReason, lpvReserved);
+
+    switch (fdwReason)
+    {
+      case DLL_PROCESS_ATTACH:
+    bRetVal = DisableThreadLibraryCalls(hInstance);
+    break;
+    }
+
+    return bRetVal;
+}
diff --git a/dlls/dbgeng/dbgeng.spec b/dlls/dbgeng/dbgeng.spec
new file mode 100644
index 0000000..d8ba681
--- /dev/null
+++ b/dlls/dbgeng/dbgeng.spec
@@ -0,0 +1,2 @@
+@ stdcall DebugExtensionInitialize(ptr ptr)
+@ stdcall DebugCreate(ptr ptr)
-- 
1.7.2.3




-- 
avec meilleures salutations, Volodymyr

--0015175934788bbb30049550218d
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

I forgot to attach txt file with patch, here it is. <br><br><div class=3D"g=
mail_quote">---------- Forwarded message ----------<br>From: <b class=3D"gm=
ail_sendername">Volodymyr Shcherbyna</b> <span dir=3D"ltr">&lt;<a href=3D"m=
ailto:volodymyr at shcherbyna.com" target=3D"_blank">volodymyr at shcherbyna.com<=
/a>&gt;</span><br>

Date: 2010/11/17<br>Subject: [dlls/dbgeng]: add initial stub dll implementa=
tion<br>To: <a href=3D"mailto:wine-patches at winehq.org" target=3D"_blank">wi=
ne-patches at winehq.org</a><br><br><br>Hello Everyone, <br><br>This is my fir=
st patch in WINE. I hope I did not do any mistakes ...<br>

<br>I am trying to use several windows utilities under WINE and I&#39;ve no=
ticed that dumpchk.exe (a utility which analyzes crash dumps generated by W=
indows) does not work under WINE as it requires dbgeng.dll (Debugger Engine=
 API) to be implemented. I decided to implement stub version of dbgeng.dll,=
 so that maybe me or someone else in the future will continue developing it=
. <br>


<br>Thanks,<br><br>From 1bd3eb1aecfb21a4155b9b59aec2c2790d3f334c Mon Sep 17=
 00:00:00 2001<br>From: Volodymyr M. Shcherbyna &lt;<a href=3D"mailto:volod=
ymyr at shcherbyna.com" target=3D"_blank">volodymyr at shcherbyna.com</a>&gt;<br>

Date: Wed, 17 Nov 2010 21:52:49 +0100<br>
Subject: Implementing stub version of dbgeng.dll (Debugger Engine API)<br>R=
eply-To: wine-devel &lt;<a href=3D"mailto:wine-devel at winehq.org" target=3D"=
_blank">wine-devel at winehq.org</a>&gt;<br><br>---<br>=A0dlls/dbgeng/Makefile=
.in |=A0=A0=A0 7 +++<br>


=A0dlls/dbgeng/dbgeng.c=A0=A0=A0 |=A0 111 +++++++++++++++++++++++++++++++++=
++++++++++++++<br>=A0dlls/dbgeng/dbgeng.spec |=A0=A0=A0 2 +<br>=A03 files c=
hanged, 120 insertions(+), 0 deletions(-)<br>=A0create mode 100644 dlls/dbg=
eng/Makefile.in<br>


=A0create mode 100644 dlls/dbgeng/dbgeng.c<br>=A0create mode 100644 dlls/db=
geng/dbgeng.spec<br><br>diff --git a/dlls/dbgeng/Makefile.in b/dlls/dbgeng/=
Makefile.in<br>new file mode 100644<br>index 0000000..07c58ab<br>--- /dev/n=
ull<br>


+++ b/dlls/dbgeng/Makefile.in<br>@@ -0,0 +1,7 @@<br>+MODULE=A0=A0=A0 =3D db=
geng.dll<br>+IMPORTLIB =3D dbgebg<br>+IMPORTS=A0=A0 =3D kernel<br>+<br>+C_S=
RCS =3D dbgeng.c<br>+<br>+ at MAKE_DLL_RULES@<br>diff --git a/dlls/dbgeng/dbge=
ng.c b/dlls/dbgeng/dbgeng.c<br>


new file mode 100644<br>index 0000000..8461d33<br>--- /dev/null<br>+++ b/dl=
ls/dbgeng/dbgeng.c<br>@@ -0,0 +1,111 @@<br>+/*<br>+ * Support for Microsoft=
 Debugging Extension API<br>+ *<br>+ * Copyright 2010 WINE Project (<a href=
=3D"http://www.winehq.org/" target=3D"_blank">http://www.winehq.org/</a>)<b=
r>


+ *<br>+ * This library is free software; you can redistribute it and/or<br=
>+ * modify it under the terms of the GNU Lesser General Public<br>+ * Lice=
nse as published by the Free Software Foundation; either<br>+ * version 2.1=
 of the License, or (at your option) any later version.<br>


+ *<br>+ * This library is distributed in the hope that it will be useful,<=
br>+ * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>+ =
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.=A0 See the GNU<br>


+ * Lesser General Public License for more details.<br>+ *<br>+ * You shoul=
d have received a copy of the GNU Lesser General Public<br>+ * License alon=
g with this library; if not, write to the Free Software<br>+ * Foundation, =
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA<br>


+ */<br>+<br>+#include &lt;stdarg.h&gt;<br>+<br>+#include &quot;windef.h&qu=
ot;<br>+#include &quot;winbase.h&quot;<br>+#include &quot;winternl.h&quot;<=
br>+#include &quot;wine/debug.h&quot;<br>+<br>+WINE_DEFAULT_DEBUG_CHANNEL(d=
bgeng);<br>


+<br>+/************************************************************<br>+*=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 DebugExtensionIni=
tialize=A0=A0 (DBGENG.@)<br>+*<br>+* Initialize dbgeng Engine.<br>+*<br>+* =
PARAMS<br>+*=A0=A0 Version=A0=A0 [I] Receives the version of the extension.=
 The high 16 bits contain the major version number, and the low 16 bits con=
tain the minor version number.<br>


+*=A0=A0 Flags=A0=A0=A0=A0 [I] Set this to zero. (Reserved for future use.)=
<br>+*<br>+* RETURNS<br>+*=A0=A0 Success: S_OK<br>+*=A0=A0 Failure: Any oth=
er value indicates that the extension DLL was unable to initialize and the =
engine will unload it<br>


+*<br>+* BUGS<br>+*=A0=A0 Unimplemented<br>+*/<br>+HRESULT WINAPI DebugExte=
nsionInitialize(ULONG * Version, ULONG * Flags)<br>+{<br>+=A0=A0=A0 FIXME(&=
quot;(%p,%p): stub\n&quot;, Version, Flags);<br>+=A0=A0=A0 <br>+=A0=A0=A0 S=
etLastError(ERROR_CALL_NOT_IMPLEMENTED);<br>


+=A0=A0=A0 <br>+=A0=A0=A0 return E_NOTIMPL;<br>+}<br>+<br>+/***************=
*********************************************<br>+*=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 DebugCreate=A0=A0 (DBGENG.@)<br>+*<br>+* =
Creates a new client object and returns an interface pointer to it<br>


+*<br>+* PARAMS<br>+*=A0=A0 InterfaceId=A0=A0 [I] Specifies the interface i=
dentifier (IID) of the desired debugger engine client interface.<br>+*=A0=
=A0 Interface=A0=A0=A0=A0 [I] Receives an interface pointer for the new cli=
ent.<br>+*<br>+* RETURNS<br>


+*=A0=A0 Success: S_OK<br>+*=A0=A0 Failure: Any other value<br>+*<br>+* BUG=
S<br>+*=A0=A0 Unimplemented<br>+*/<br>+HRESULT WINAPI DebugCreate(REFIID In=
terfaceId, PVOID *Interface)<br>+{<br>+=A0=A0=A0 FIXME(&quot;(%p,%p): stub\=
n&quot;, InterfaceId, Interface);<br>


+=A0=A0=A0 <br>+=A0=A0=A0 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);<br>+=A0=
=A0=A0 <br>+=A0=A0=A0 return E_NOTIMPL;<br>+}<br>+<br>+/*******************=
*****************************************<br>+*=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 DllMain=A0=A0 (DBGENG.@)<br>+*<br>


+* Library Entry Point<br>+*<br>+* PARAMS<br>+*=A0=A0 hInstance=A0=A0 [I] A=
 handle to the DLL module<br>+*=A0=A0 fdwReason=A0=A0 [I] The reason code t=
hat indicates why the DLL entry-point function is being called<br>+*=A0=A0 =
lpvReserved [I] Extended information<br>


+*<br>+* RETURNS<br>+*=A0=A0 Success: TRUE (when fdwReason is DLL_PROCESS_A=
TTACH)<br>+*=A0=A0 Failure: FALSE (when fdwReason is DLL_PROCESS_ATTACH)<br=
>+*<br>+* BUGS<br>+*=A0=A0 Unimplemented<br>+*/<br>+BOOL WINAPI DllMain(HIN=
STANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)<br>


+{<br>+=A0=A0=A0 BOOL bRetVal =3D FALSE;<br>+=A0=A0=A0 <br>+=A0=A0=A0 TRACE=
(&quot;(%p,%x,%p)\n&quot;, hInstance, fdwReason, lpvReserved);<br>+=A0=A0=
=A0 <br>+=A0=A0=A0 switch (fdwReason)<br>+=A0=A0=A0 {<br>+=A0=A0=A0=A0=A0 c=
ase DLL_PROCESS_ATTACH:<br>+=A0=A0=A0 bRetVal =3D DisableThreadLibraryCalls=
(hInstance);<br>


+=A0=A0=A0 break;<br>+=A0=A0=A0 }=A0=A0=A0 <br>+=A0=A0=A0 <br>+=A0=A0=A0 re=
turn bRetVal;<br>+}<br>diff --git a/dlls/dbgeng/dbgeng.spec b/dlls/dbgeng/d=
bgeng.spec<br>new file mode 100644<br>index 0000000..d8ba681<br>--- /dev/nu=
ll<br>+++ b/dlls/dbgeng/dbgeng.spec<br>


@@ -0,0 +1,2 @@<br>+@ stdcall DebugExtensionInitialize(ptr ptr)<br>+@ stdca=
ll DebugCreate(ptr ptr)<br><font color=3D"#888888">-- <br>1.7.2.3<br><br>
</font></div><br><br clear=3D"all"><br>-- <br>avec meilleures salutations, =
Volodymyr<br>

--0015175934788bbb30049550218d--
--0015175934788bbb3a049550218f
Content-Type: text/plain; charset=US-ASCII; 
	name="0001-Implementing-stub-version-of-dbgeng.dll-Debugger-Eng.txt"
Content-Disposition: attachment; 
	filename="0001-Implementing-stub-version-of-dbgeng.dll-Debugger-Eng.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ggnf2wal0

RnJvbSAxYmQzZWIxYWVjZmIyMWE0MTU1YjliNTlhZWMyYzI3OTBkM2YzMzRjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBWb2xvZHlteXIgTS4gU2hjaGVyYnluYSA8dm9sb2R5bXlyQHNo
Y2hlcmJ5bmEuY29tPgpEYXRlOiBXZWQsIDE3IE5vdiAyMDEwIDIxOjUyOjQ5ICswMTAwClN1Ympl
Y3Q6IEltcGxlbWVudGluZyBzdHViIHZlcnNpb24gb2YgZGJnZW5nLmRsbCAoRGVidWdnZXIgRW5n
aW5lIEFQSSkKUmVwbHktVG86IHdpbmUtZGV2ZWwgPHdpbmUtZGV2ZWxAd2luZWhxLm9yZz4KCi0t
LQogZGxscy9kYmdlbmcvTWFrZWZpbGUuaW4gfCAgICA3ICsrKwogZGxscy9kYmdlbmcvZGJnZW5n
LmMgICAgfCAgMTExICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrCiBkbGxzL2RiZ2VuZy9kYmdlbmcuc3BlYyB8ICAgIDIgKwogMyBmaWxlcyBjaGFuZ2VkLCAx
MjAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkbGxz
L2RiZ2VuZy9NYWtlZmlsZS5pbgogY3JlYXRlIG1vZGUgMTAwNjQ0IGRsbHMvZGJnZW5nL2RiZ2Vu
Zy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZGxscy9kYmdlbmcvZGJnZW5nLnNwZWMKCmRpZmYgLS1n
aXQgYS9kbGxzL2RiZ2VuZy9NYWtlZmlsZS5pbiBiL2RsbHMvZGJnZW5nL01ha2VmaWxlLmluCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzU4YWIKLS0tIC9kZXYvbnVsbAor
KysgYi9kbGxzL2RiZ2VuZy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDcgQEAKK01PRFVMRSAgICA9
IGRiZ2VuZy5kbGwKK0lNUE9SVExJQiA9IGRiZ2ViZworSU1QT1JUUyAgID0ga2VybmVsCisKK0Nf
U1JDUyA9IGRiZ2VuZy5jCisKK0BNQUtFX0RMTF9SVUxFU0AKZGlmZiAtLWdpdCBhL2RsbHMvZGJn
ZW5nL2RiZ2VuZy5jIGIvZGxscy9kYmdlbmcvZGJnZW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODQ2MWQzMwotLS0gL2Rldi9udWxsCisrKyBiL2RsbHMvZGJnZW5nL2Ri
Z2VuZy5jCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogU3VwcG9ydCBmb3IgTWljcm9zb2Z0IERl
YnVnZ2luZyBFeHRlbnNpb24gQVBJCisgKgorICogQ29weXJpZ2h0IDIwMTAgV0lORSBQcm9qZWN0
IChodHRwOi8vd3d3LndpbmVocS5vcmcvKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQorICovCisKKyNpbmNsdWRlIDxz
dGRhcmcuaD4KKworI2luY2x1ZGUgIndpbmRlZi5oIgorI2luY2x1ZGUgIndpbmJhc2UuaCIKKyNp
bmNsdWRlICJ3aW50ZXJubC5oIgorI2luY2x1ZGUgIndpbmUvZGVidWcuaCIKKworV0lORV9ERUZB
VUxUX0RFQlVHX0NIQU5ORUwoZGJnZW5nKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAg
RGVidWdFeHRlbnNpb25Jbml0aWFsaXplICAgKERCR0VORy5AKQorKgorKiBJbml0aWFsaXplIGRi
Z2VuZyBFbmdpbmUuCisqCisqIFBBUkFNUworKiAgIFZlcnNpb24gICBbSV0gUmVjZWl2ZXMgdGhl
IHZlcnNpb24gb2YgdGhlIGV4dGVuc2lvbi4gVGhlIGhpZ2ggMTYgYml0cyBjb250YWluIHRoZSBt
YWpvciB2ZXJzaW9uIG51bWJlciwgYW5kIHRoZSBsb3cgMTYgYml0cyBjb250YWluIHRoZSBtaW5v
ciB2ZXJzaW9uIG51bWJlci4KKyogICBGbGFncyAgICAgW0ldIFNldCB0aGlzIHRvIHplcm8uIChS
ZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4pCisqCisqIFJFVFVSTlMKKyogICBTdWNjZXNzOiBTX09L
CisqICAgRmFpbHVyZTogQW55IG90aGVyIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZSBleHRlbnNp
b24gRExMIHdhcyB1bmFibGUgdG8gaW5pdGlhbGl6ZSBhbmQgdGhlIGVuZ2luZSB3aWxsIHVubG9h
ZCBpdAorKgorKiBCVUdTCisqICAgVW5pbXBsZW1lbnRlZAorKi8KK0hSRVNVTFQgV0lOQVBJIERl
YnVnRXh0ZW5zaW9uSW5pdGlhbGl6ZShVTE9ORyAqIFZlcnNpb24sIFVMT05HICogRmxhZ3MpCit7
CisgICAgRklYTUUoIiglcCwlcCk6IHN0dWJcbiIsIFZlcnNpb24sIEZsYWdzKTsKKyAgICAKKyAg
ICBTZXRMYXN0RXJyb3IoRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpOworICAgIAorICAgIHJl
dHVybiBFX05PVElNUEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgIERlYnVnQ3Jl
YXRlICAgKERCR0VORy5AKQorKgorKiBDcmVhdGVzIGEgbmV3IGNsaWVudCBvYmplY3QgYW5kIHJl
dHVybnMgYW4gaW50ZXJmYWNlIHBvaW50ZXIgdG8gaXQKKyoKKyogUEFSQU1TCisqICAgSW50ZXJm
YWNlSWQgICBbSV0gU3BlY2lmaWVzIHRoZSBpbnRlcmZhY2UgaWRlbnRpZmllciAoSUlEKSBvZiB0
aGUgZGVzaXJlZCBkZWJ1Z2dlciBlbmdpbmUgY2xpZW50IGludGVyZmFjZS4KKyogICBJbnRlcmZh
Y2UgICAgIFtJXSBSZWNlaXZlcyBhbiBpbnRlcmZhY2UgcG9pbnRlciBmb3IgdGhlIG5ldyBjbGll
bnQuCisqCisqIFJFVFVSTlMKKyogICBTdWNjZXNzOiBTX09LCisqICAgRmFpbHVyZTogQW55IG90
aGVyIHZhbHVlCisqCisqIEJVR1MKKyogICBVbmltcGxlbWVudGVkCisqLworSFJFU1VMVCBXSU5B
UEkgRGVidWdDcmVhdGUoUkVGSUlEIEludGVyZmFjZUlkLCBQVk9JRCAqSW50ZXJmYWNlKQorewor
ICAgIEZJWE1FKCIoJXAsJXApOiBzdHViXG4iLCBJbnRlcmZhY2VJZCwgSW50ZXJmYWNlKTsKKyAg
ICAKKyAgICBTZXRMYXN0RXJyb3IoRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpOworICAgIAor
ICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgIERs
bE1haW4gICAoREJHRU5HLkApCisqCisqIExpYnJhcnkgRW50cnkgUG9pbnQKKyoKKyogUEFSQU1T
CisqICAgaEluc3RhbmNlICAgW0ldIEEgaGFuZGxlIHRvIHRoZSBETEwgbW9kdWxlCisqICAgZmR3
UmVhc29uICAgW0ldIFRoZSByZWFzb24gY29kZSB0aGF0IGluZGljYXRlcyB3aHkgdGhlIERMTCBl
bnRyeS1wb2ludCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQKKyogICBscHZSZXNlcnZlZCBbSV0g
RXh0ZW5kZWQgaW5mb3JtYXRpb24KKyoKKyogUkVUVVJOUworKiAgIFN1Y2Nlc3M6IFRSVUUgKHdo
ZW4gZmR3UmVhc29uIGlzIERMTF9QUk9DRVNTX0FUVEFDSCkKKyogICBGYWlsdXJlOiBGQUxTRSAo
d2hlbiBmZHdSZWFzb24gaXMgRExMX1BST0NFU1NfQVRUQUNIKQorKgorKiBCVUdTCisqICAgVW5p
bXBsZW1lbnRlZAorKi8KK0JPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwg
RFdPUkQgZmR3UmVhc29uLCBMUFZPSUQgbHB2UmVzZXJ2ZWQpCit7CisgICAgQk9PTCBiUmV0VmFs
ID0gRkFMU0U7CisgICAgCisgICAgVFJBQ0UoIiglcCwleCwlcClcbiIsIGhJbnN0YW5jZSwgZmR3
UmVhc29uLCBscHZSZXNlcnZlZCk7CisgICAgCisgICAgc3dpdGNoIChmZHdSZWFzb24pCisgICAg
eworICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6CisJYlJldFZhbCA9IERpc2FibGVUaHJl
YWRMaWJyYXJ5Q2FsbHMoaEluc3RhbmNlKTsKKwlicmVhazsKKyAgICB9ICAgIAorICAgIAorICAg
IHJldHVybiBiUmV0VmFsOworfQpkaWZmIC0tZ2l0IGEvZGxscy9kYmdlbmcvZGJnZW5nLnNwZWMg
Yi9kbGxzL2RiZ2VuZy9kYmdlbmcuc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kOGJhNjgxCi0tLSAvZGV2L251bGwKKysrIGIvZGxscy9kYmdlbmcvZGJnZW5nLnNwZWMK
QEAgLTAsMCArMSwyIEBACitAIHN0ZGNhbGwgRGVidWdFeHRlbnNpb25Jbml0aWFsaXplKHB0ciBw
dHIpCitAIHN0ZGNhbGwgRGVidWdDcmVhdGUocHRyIHB0cikKLS0gCjEuNy4yLjMKCg==
--0015175934788bbb3a049550218f--



More information about the wine-patches mailing list