From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12696 invoked by alias); 17 Sep 2005 23:32:39 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 12652 invoked by uid 22791); 17 Sep 2005 23:32:32 -0000 Received: from qproxy.gmail.com (HELO qproxy.gmail.com) (72.14.204.196) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Sat, 17 Sep 2005 23:32:32 +0000 Received: by qproxy.gmail.com with SMTP id i38so112762qbh for ; Sat, 17 Sep 2005 16:32:30 -0700 (PDT) Received: by 10.64.204.19 with SMTP id b19mr14731qbg; Sat, 17 Sep 2005 16:32:30 -0700 (PDT) Received: by 10.65.20.15 with HTTP; Sat, 17 Sep 2005 16:32:30 -0700 (PDT) Message-ID: <7f45d939050917163241caaa41@mail.gmail.com> Date: Sat, 17 Sep 2005 23:32:00 -0000 From: Shaun Jackman Reply-To: Shaun Jackman To: Richard Earnshaw , gdb-patches@sources.redhat.com Subject: Re: sim/arm/armos.c: IsTTY [PATCH] In-Reply-To: <20050917223728.GL8777@nevyn.them.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_30172_11202823.1126999950417" References: <7f45d9390508151204ca0b146@mail.gmail.com> <20050830023718.GB16189@nevyn.them.org> <7f45d93905090709516f912861@mail.gmail.com> <1126170388.18092.16.camel@pc960.cambridge.arm.com> <7f45d93905090910237c63acf0@mail.gmail.com> <20050917223728.GL8777@nevyn.them.org> X-SW-Source: 2005-09/txt/msg00138.txt.bz2 ------=_Part_30172_11202823.1126999950417 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-length: 5939 2005/9/17, Daniel Jacobowitz : > I'd recommend following Richard's suggestion: use PATH_MAX, if it's not > there, default to 1K. OK. > You might want a helper function for this, since it happens in a lot of > places. Also, braces on their own lines. Done. =20 > Otherwise it looks fine to me. Great! Cheers, Shaun 2005-09-17 Shaun Jackman * sim/arm/armos.c: Include limits.h (unlink): Remove this macro. It is unused in this file and conflicts with sim_callback->unlink. (PATH_MAX): Define as 1024 if not already defined. (ReadFileName): New function. (SWIopen): Fix a potential buffer overflow. (SWIremove): New function. (SWIrename): Ditto. (ARMul_OSHandleSWI): Handle the RDP calls SWI_IsTTY, SWI_Remove, and SWI_Rename, as well as the RDI calls AngelSWI_Reason_IsTTY, AngelSWI_Reason_Remove, and AngelSWI_Reason_Rename. Index: sim/arm/armos.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/sim/arm/armos.c,v retrieving revision 1.22 diff -u -r1.22 armos.c --- sim/arm/armos.c 12 May 2005 07:36:58 -0000 1.22 +++ sim/arm/armos.c 17 Sep 2005 23:24:51 -0000 @@ -27,6 +27,7 @@ =20 #include #include +#include #include #include "targ-vals.h" =20 @@ -34,10 +35,6 @@ #define TARGET_O_BINARY 0 #endif =20 -#ifdef __STDC__ -#define unlink(s) remove(s) -#endif - #ifdef HAVE_UNISTD_H #include /* For SEEK_SET etc. */ #endif @@ -89,6 +86,9 @@ #define FOPEN_MAX 64 #endif #define UNIQUETEMPS 256 +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif =20 /* OS private Information. */ =20 @@ -299,22 +299,34 @@ while (temp !=3D 0); } =20 +static int +ReadFileName(ARMul_State *state, char *buf, ARMword src, size_t n) +{ + struct OSblock *OSptr =3D (struct OSblock *) state->OSptr; + char *p =3D buf; + + while (n--) + if ((*p++ =3D ARMul_SafeReadByte (state, src++)) =3D=3D '\0') + return 0; + OSptr->ErrorNo =3D cb_host_to_target_errno(sim_callback, ENAMETOOLONG); + return state->Reg[0] =3D -1; +} + static void SWIopen (ARMul_State * state, ARMword name, ARMword SWIflags) { struct OSblock *OSptr =3D (struct OSblock *) state->OSptr; - char dummy[2000]; + char buf[PATH_MAX]; int flags; - int i; =20 - for (i =3D 0; (dummy[i] =3D ARMul_SafeReadByte (state, name + i)); i++) - ; + if (ReadFileName(state, buf, name, sizeof buf) =3D=3D -1) + return; =20 /* Now we need to decode the Demon open mode. */ flags =3D translate_open_mode[SWIflags]; =20 /* Filename ":tt" is special: it denotes stdin/out. */ - if (strcmp (dummy, ":tt") =3D=3D 0) + if (strcmp (buf, ":tt") =3D=3D 0) { if (flags =3D=3D TARGET_O_RDONLY) /* opening tty "r" */ state->Reg[0] =3D 0; /* stdin */ @@ -323,7 +335,7 @@ } else { - state->Reg[0] =3D sim_callback->open (sim_callback, dummy, flags); + state->Reg[0] =3D sim_callback->open (sim_callback, buf, flags); OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); } } @@ -403,6 +415,33 @@ OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); } =20 +static void +SWIremove (ARMul_State * state, ARMword path) +{ + char buf[PATH_MAX]; + + if (ReadFileName(state, buf, path, sizeof buf) !=3D -1) + { + struct OSblock *OSptr =3D (struct OSblock *) state->OSptr; + state->Reg[0] =3D sim_callback->unlink (sim_callback, buf); + OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); + } +} + +static void +SWIrename (ARMul_State * state, ARMword old, ARMword new) +{ + char oldbuf[PATH_MAX], newbuf[PATH_MAX]; + + if (ReadFileName(state, oldbuf, old, sizeof oldbuf) !=3D -1 && + ReadFileName(state, newbuf, new, sizeof newbuf) !=3D -1) + { + struct OSblock *OSptr =3D (struct OSblock *) state->OSptr; + state->Reg[0] =3D sim_callback->rename (sim_callback, oldbuf, newbuf); + OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); + } +} + /* The emulator calls this routine when a SWI instruction is encuntered. The parameter passed is the SWI number (lower 24 bits of the instruction). */ =20 @@ -544,6 +583,30 @@ state->Emulate =3D FALSE; break; =20 + case SWI_Remove: + if (swi_mask & SWI_MASK_DEMON) + SWIremove (state, state->Reg[0]); + else + unhandled =3D TRUE; + break; + + case SWI_Rename: + if (swi_mask & SWI_MASK_DEMON) + SWIrename (state, state->Reg[0], state->Reg[1]); + else + unhandled =3D TRUE; + break; + + case SWI_IsTTY: + if (swi_mask & SWI_MASK_DEMON) + { + state->Reg[0] =3D sim_callback->isatty (sim_callback, state->Reg[0]); + OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); + } + else + unhandled =3D TRUE; + break; + /* Handle Angel SWIs as well as Demon ones. */ case AngelSWI_ARM: case AngelSWI_Thumb: @@ -566,10 +629,7 @@ =20=09=20=20 /* Unimplemented reason codes. */ case AngelSWI_Reason_ReadC: - case AngelSWI_Reason_IsTTY: case AngelSWI_Reason_TmpNam: - case AngelSWI_Reason_Remove: - case AngelSWI_Reason_Rename: case AngelSWI_Reason_System: case AngelSWI_Reason_EnterSVC: default: @@ -684,6 +744,21 @@ ARMul_ReadWord (state, addr + 4), ARMul_ReadWord (state, addr + 8)); break; + + case AngelSWI_Reason_IsTTY: + state->Reg[0] =3D sim_callback->close (sim_callback, + ARMul_ReadWord (state, addr)); + OSptr->ErrorNo =3D sim_callback->get_errno (sim_callback); + break; + + case AngelSWI_Reason_Remove: + SWIremove (state, + ARMul_ReadWord (state, addr)); + + case AngelSWI_Reason_Rename: + SWIrename (state, + ARMul_ReadWord (state, addr), + ARMul_ReadWord (state, addr + 4)); } } else ------=_Part_30172_11202823.1126999950417 Content-Type: text/plain; name="sim-arm-swi.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sim-arm-swi.diff" Content-length: 7251 MjAwNS0wOS0xNyAgU2hhdW4gSmFja21hbiAgPHNqYWNrbWFuQGdtYWlsLmNv bT4KCgkqIHNpbS9hcm0vYXJtb3MuYzogSW5jbHVkZSBsaW1pdHMuaAoJKHVu bGluayk6IFJlbW92ZSB0aGlzIG1hY3JvLiBJdCBpcyB1bnVzZWQgaW4gdGhp cyBmaWxlIGFuZAoJY29uZmxpY3RzIHdpdGggc2ltX2NhbGxiYWNrLT51bmxp bmsuCgkoUEFUSF9NQVgpOiBEZWZpbmUgYXMgMTAyNCBpZiBub3QgYWxyZWFk eSBkZWZpbmVkLgoJKFJlYWRGaWxlTmFtZSk6IE5ldyBmdW5jdGlvbi4KCShT V0lvcGVuKTogRml4IGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdy4KCShT V0lyZW1vdmUpOiBOZXcgZnVuY3Rpb24uCgkoU1dJcmVuYW1lKTogRGl0dG8u CgkoQVJNdWxfT1NIYW5kbGVTV0kpOiBIYW5kbGUgdGhlIFJEUCBjYWxscyBT V0lfSXNUVFksCglTV0lfUmVtb3ZlLCBhbmQgU1dJX1JlbmFtZSwgYXMgd2Vs bCBhcyB0aGUgUkRJIGNhbGxzCglBbmdlbFNXSV9SZWFzb25fSXNUVFksIEFu Z2VsU1dJX1JlYXNvbl9SZW1vdmUsIGFuZAoJQW5nZWxTV0lfUmVhc29uX1Jl bmFtZS4KCkluZGV4OiBzaW0vYXJtL2FybW9zLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL3NpbS9hcm0vYXJtb3Mu Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMgpkaWZmIC11IC1yMS4yMiBh cm1vcy5jCi0tLSBzaW0vYXJtL2FybW9zLmMJMTIgTWF5IDIwMDUgMDc6MzY6 NTggLTAwMDAJMS4yMgorKysgc2ltL2FybS9hcm1vcy5jCTE3IFNlcCAyMDA1 IDIzOjI0OjUxIC0wMDAwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl IDx0aW1lLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1p dHMuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJ0YXJnLXZh bHMuaCIKIApAQCAtMzQsMTAgKzM1LDYgQEAKICNkZWZpbmUgVEFSR0VUX09f QklOQVJZIDAKICNlbmRpZgogCi0jaWZkZWYgX19TVERDX18KLSNkZWZpbmUg dW5saW5rKHMpIHJlbW92ZShzKQotI2VuZGlmCi0KICNpZmRlZiBIQVZFX1VO SVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CQkvKiBGb3IgU0VFS19TRVQg ZXRjLiAgKi8KICNlbmRpZgpAQCAtODksNiArODYsOSBAQAogI2RlZmluZSBG T1BFTl9NQVggNjQKICNlbmRpZgogI2RlZmluZSBVTklRVUVURU1QUyAyNTYK KyNpZm5kZWYgUEFUSF9NQVgKKyNkZWZpbmUgUEFUSF9NQVggMTAyNAorI2Vu ZGlmCiAKIC8qIE9TIHByaXZhdGUgSW5mb3JtYXRpb24uICAqLwogCkBAIC0y OTksMjIgKzI5OSwzNCBAQAogICB3aGlsZSAodGVtcCAhPSAwKTsKIH0KIAor c3RhdGljIGludAorUmVhZEZpbGVOYW1lKEFSTXVsX1N0YXRlICpzdGF0ZSwg Y2hhciAqYnVmLCBBUk13b3JkIHNyYywgc2l6ZV90IG4pCit7CisgIHN0cnVj dCBPU2Jsb2NrICpPU3B0ciA9IChzdHJ1Y3QgT1NibG9jayAqKSBzdGF0ZS0+ T1NwdHI7CisgIGNoYXIgKnAgPSBidWY7CisKKyAgd2hpbGUgKG4tLSkKKyAg ICBpZiAoKCpwKysgPSBBUk11bF9TYWZlUmVhZEJ5dGUgKHN0YXRlLCBzcmMr KykpID09ICdcMCcpCisgICAgICByZXR1cm4gMDsKKyAgT1NwdHItPkVycm9y Tm8gPSBjYl9ob3N0X3RvX3RhcmdldF9lcnJubyhzaW1fY2FsbGJhY2ssIEVO QU1FVE9PTE9ORyk7CisgIHJldHVybiBzdGF0ZS0+UmVnWzBdID0gLTE7Cit9 CisKIHN0YXRpYyB2b2lkCiBTV0lvcGVuIChBUk11bF9TdGF0ZSAqIHN0YXRl LCBBUk13b3JkIG5hbWUsIEFSTXdvcmQgU1dJZmxhZ3MpCiB7CiAgIHN0cnVj dCBPU2Jsb2NrICpPU3B0ciA9IChzdHJ1Y3QgT1NibG9jayAqKSBzdGF0ZS0+ T1NwdHI7Ci0gIGNoYXIgZHVtbXlbMjAwMF07CisgIGNoYXIgYnVmW1BBVEhf TUFYXTsKICAgaW50IGZsYWdzOwotICBpbnQgaTsKIAotICBmb3IgKGkgPSAw OyAoZHVtbXlbaV0gPSBBUk11bF9TYWZlUmVhZEJ5dGUgKHN0YXRlLCBuYW1l ICsgaSkpOyBpKyspCi0gICAgOworICBpZiAoUmVhZEZpbGVOYW1lKHN0YXRl LCBidWYsIG5hbWUsIHNpemVvZiBidWYpID09IC0xKQorICAgIHJldHVybjsK IAogICAvKiBOb3cgd2UgbmVlZCB0byBkZWNvZGUgdGhlIERlbW9uIG9wZW4g bW9kZS4gICovCiAgIGZsYWdzID0gdHJhbnNsYXRlX29wZW5fbW9kZVtTV0lm bGFnc107CiAKICAgLyogRmlsZW5hbWUgIjp0dCIgaXMgc3BlY2lhbDogaXQg ZGVub3RlcyBzdGRpbi9vdXQuICAqLwotICBpZiAoc3RyY21wIChkdW1teSwg Ijp0dCIpID09IDApCisgIGlmIChzdHJjbXAgKGJ1ZiwgIjp0dCIpID09IDAp CiAgICAgewogICAgICAgaWYgKGZsYWdzID09IFRBUkdFVF9PX1JET05MWSkg Lyogb3BlbmluZyB0dHkgInIiICovCiAJc3RhdGUtPlJlZ1swXSA9IDA7CS8q IHN0ZGluICovCkBAIC0zMjMsNyArMzM1LDcgQEAKICAgICB9CiAgIGVsc2UK ICAgICB7Ci0gICAgICBzdGF0ZS0+UmVnWzBdID0gc2ltX2NhbGxiYWNrLT5v cGVuIChzaW1fY2FsbGJhY2ssIGR1bW15LCBmbGFncyk7CisgICAgICBzdGF0 ZS0+UmVnWzBdID0gc2ltX2NhbGxiYWNrLT5vcGVuIChzaW1fY2FsbGJhY2ss IGJ1ZiwgZmxhZ3MpOwogICAgICAgT1NwdHItPkVycm9yTm8gPSBzaW1fY2Fs bGJhY2stPmdldF9lcnJubyAoc2ltX2NhbGxiYWNrKTsKICAgICB9CiB9CkBA IC00MDMsNiArNDE1LDMzIEBACiAgIE9TcHRyLT5FcnJvck5vID0gc2ltX2Nh bGxiYWNrLT5nZXRfZXJybm8gKHNpbV9jYWxsYmFjayk7CiB9CiAKK3N0YXRp YyB2b2lkCitTV0lyZW1vdmUgKEFSTXVsX1N0YXRlICogc3RhdGUsIEFSTXdv cmQgcGF0aCkKK3sKKyAgY2hhciBidWZbUEFUSF9NQVhdOworCisgIGlmIChS ZWFkRmlsZU5hbWUoc3RhdGUsIGJ1ZiwgcGF0aCwgc2l6ZW9mIGJ1ZikgIT0g LTEpCisgIHsKKyAgICBzdHJ1Y3QgT1NibG9jayAqT1NwdHIgPSAoc3RydWN0 IE9TYmxvY2sgKikgc3RhdGUtPk9TcHRyOworICAgIHN0YXRlLT5SZWdbMF0g PSBzaW1fY2FsbGJhY2stPnVubGluayAoc2ltX2NhbGxiYWNrLCBidWYpOwor ICAgIE9TcHRyLT5FcnJvck5vID0gc2ltX2NhbGxiYWNrLT5nZXRfZXJybm8g KHNpbV9jYWxsYmFjayk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK1NXSXJl bmFtZSAoQVJNdWxfU3RhdGUgKiBzdGF0ZSwgQVJNd29yZCBvbGQsIEFSTXdv cmQgbmV3KQoreworICBjaGFyIG9sZGJ1ZltQQVRIX01BWF0sIG5ld2J1ZltQ QVRIX01BWF07CisKKyAgaWYgKFJlYWRGaWxlTmFtZShzdGF0ZSwgb2xkYnVm LCBvbGQsIHNpemVvZiBvbGRidWYpICE9IC0xICYmCisgICAgICBSZWFkRmls ZU5hbWUoc3RhdGUsIG5ld2J1ZiwgbmV3LCBzaXplb2YgbmV3YnVmKSAhPSAt MSkKKyAgeworICAgIHN0cnVjdCBPU2Jsb2NrICpPU3B0ciA9IChzdHJ1Y3Qg T1NibG9jayAqKSBzdGF0ZS0+T1NwdHI7CisgICAgc3RhdGUtPlJlZ1swXSA9 IHNpbV9jYWxsYmFjay0+cmVuYW1lIChzaW1fY2FsbGJhY2ssIG9sZGJ1Ziwg bmV3YnVmKTsKKyAgICBPU3B0ci0+RXJyb3JObyA9IHNpbV9jYWxsYmFjay0+ Z2V0X2Vycm5vIChzaW1fY2FsbGJhY2spOworICB9Cit9CisKIC8qIFRoZSBl bXVsYXRvciBjYWxscyB0aGlzIHJvdXRpbmUgd2hlbiBhIFNXSSBpbnN0cnVj dGlvbiBpcyBlbmN1bnRlcmVkLgogICAgVGhlIHBhcmFtZXRlciBwYXNzZWQg aXMgdGhlIFNXSSBudW1iZXIgKGxvd2VyIDI0IGJpdHMgb2YgdGhlIGluc3Ry dWN0aW9uKS4gICovCiAKQEAgLTU0NCw2ICs1ODMsMzAgQEAKICAgICAgIHN0 YXRlLT5FbXVsYXRlID0gRkFMU0U7CiAgICAgICBicmVhazsKIAorICAgIGNh c2UgU1dJX1JlbW92ZToKKyAgICAgIGlmIChzd2lfbWFzayAmIFNXSV9NQVNL X0RFTU9OKQorCVNXSXJlbW92ZSAoc3RhdGUsIHN0YXRlLT5SZWdbMF0pOwor ICAgICAgZWxzZQorCXVuaGFuZGxlZCA9IFRSVUU7CisgICAgICBicmVhazsK KworICAgIGNhc2UgU1dJX1JlbmFtZToKKyAgICAgIGlmIChzd2lfbWFzayAm IFNXSV9NQVNLX0RFTU9OKQorCVNXSXJlbmFtZSAoc3RhdGUsIHN0YXRlLT5S ZWdbMF0sIHN0YXRlLT5SZWdbMV0pOworICAgICAgZWxzZQorCXVuaGFuZGxl ZCA9IFRSVUU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1dJX0lzVFRZ OgorICAgICAgaWYgKHN3aV9tYXNrICYgU1dJX01BU0tfREVNT04pCisJewor CSAgc3RhdGUtPlJlZ1swXSA9IHNpbV9jYWxsYmFjay0+aXNhdHR5IChzaW1f Y2FsbGJhY2ssIHN0YXRlLT5SZWdbMF0pOworCSAgT1NwdHItPkVycm9yTm8g PSBzaW1fY2FsbGJhY2stPmdldF9lcnJubyAoc2ltX2NhbGxiYWNrKTsKKwl9 CisgICAgICBlbHNlCisJdW5oYW5kbGVkID0gVFJVRTsKKyAgICAgIGJyZWFr OworCiAgICAgICAvKiBIYW5kbGUgQW5nZWwgU1dJcyBhcyB3ZWxsIGFzIERl bW9uIG9uZXMuICAqLwogICAgIGNhc2UgQW5nZWxTV0lfQVJNOgogICAgIGNh c2UgQW5nZWxTV0lfVGh1bWI6CkBAIC01NjYsMTAgKzYyOSw3IEBACiAJICAK IAkgICAgICAvKiBVbmltcGxlbWVudGVkIHJlYXNvbiBjb2Rlcy4gICovCiAJ ICAgIGNhc2UgQW5nZWxTV0lfUmVhc29uX1JlYWRDOgotCSAgICBjYXNlIEFu Z2VsU1dJX1JlYXNvbl9Jc1RUWToKIAkgICAgY2FzZSBBbmdlbFNXSV9SZWFz b25fVG1wTmFtOgotCSAgICBjYXNlIEFuZ2VsU1dJX1JlYXNvbl9SZW1vdmU6 Ci0JICAgIGNhc2UgQW5nZWxTV0lfUmVhc29uX1JlbmFtZToKIAkgICAgY2Fz ZSBBbmdlbFNXSV9SZWFzb25fU3lzdGVtOgogCSAgICBjYXNlIEFuZ2VsU1dJ X1JlYXNvbl9FbnRlclNWQzoKIAkgICAgZGVmYXVsdDoKQEAgLTY4NCw2ICs3 NDQsMjEgQEAKIAkJCUFSTXVsX1JlYWRXb3JkIChzdGF0ZSwgYWRkciArIDQp LAogCQkJQVJNdWxfUmVhZFdvcmQgKHN0YXRlLCBhZGRyICsgOCkpOwogCSAg ICAgIGJyZWFrOworCisJICAgIGNhc2UgQW5nZWxTV0lfUmVhc29uX0lzVFRZ OgorCSAgICAgIHN0YXRlLT5SZWdbMF0gPSBzaW1fY2FsbGJhY2stPmNsb3Nl IChzaW1fY2FsbGJhY2ssCisJCQkJCQkgICBBUk11bF9SZWFkV29yZCAoc3Rh dGUsIGFkZHIpKTsKKwkgICAgICBPU3B0ci0+RXJyb3JObyA9IHNpbV9jYWxs YmFjay0+Z2V0X2Vycm5vIChzaW1fY2FsbGJhY2spOworCSAgICAgIGJyZWFr OworCisJICAgIGNhc2UgQW5nZWxTV0lfUmVhc29uX1JlbW92ZToKKwkgICAg ICBTV0lyZW1vdmUgKHN0YXRlLAorCQkJIEFSTXVsX1JlYWRXb3JkIChzdGF0 ZSwgYWRkcikpOworCisJICAgIGNhc2UgQW5nZWxTV0lfUmVhc29uX1JlbmFt ZToKKwkgICAgICBTV0lyZW5hbWUgKHN0YXRlLAorCQkJIEFSTXVsX1JlYWRX b3JkIChzdGF0ZSwgYWRkciksCisJCQkgQVJNdWxfUmVhZFdvcmQgKHN0YXRl LCBhZGRyICsgNCkpOwogCSAgICB9CiAJfQogICAgICAgZWxzZQo= ------=_Part_30172_11202823.1126999950417--