From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#12945: Assume POSIX 1003.1-1988 or later for unistd.h. Date: Tue, 20 Nov 2012 12:51:00 -0800 Message-ID: <50ABED34.7040307@cs.ucla.edu> References: <50ABC017.7060802@cs.ucla.edu> <83fw44w38g.fsf@gnu.org> <833904vxqo.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010808090100000307020503" X-Trace: ger.gmane.org 1353444720 10878 80.91.229.3 (20 Nov 2012 20:52:00 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 20 Nov 2012 20:52:00 +0000 (UTC) Cc: 12945@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Nov 20 21:52:11 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Tauni-0005aE-MH for geb-bug-gnu-emacs@m.gmane.org; Tue, 20 Nov 2012 21:52:11 +0100 Original-Received: from localhost ([::1]:55354 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TaunY-000891-3R for geb-bug-gnu-emacs@m.gmane.org; Tue, 20 Nov 2012 15:52:00 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:52934) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TaunT-000889-B0 for bug-gnu-emacs@gnu.org; Tue, 20 Nov 2012 15:51:57 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TaunQ-0000Bc-Fo for bug-gnu-emacs@gnu.org; Tue, 20 Nov 2012 15:51:55 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:47180) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TaunQ-0000BS-Bv for bug-gnu-emacs@gnu.org; Tue, 20 Nov 2012 15:51:52 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1TauoY-00042c-EF for bug-gnu-emacs@gnu.org; Tue, 20 Nov 2012 15:53:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 20 Nov 2012 20:53:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 12945 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 12945-submit@debbugs.gnu.org id=B12945.135344474115487 (code B ref 12945); Tue, 20 Nov 2012 20:53:02 +0000 Original-Received: (at 12945) by debbugs.gnu.org; 20 Nov 2012 20:52:21 +0000 Original-Received: from localhost ([127.0.0.1]:57431 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Taunr-00041j-Up for submit@debbugs.gnu.org; Tue, 20 Nov 2012 15:52:21 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:36195) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Taunm-00041X-EM for 12945@debbugs.gnu.org; Tue, 20 Nov 2012 15:52:18 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id CAB80A60001; Tue, 20 Nov 2012 12:51:02 -0800 (PST) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id IZjskYowla7g; Tue, 20 Nov 2012 12:51:01 -0800 (PST) Original-Received: from penguin.cs.ucla.edu (Penguin.CS.UCLA.EDU [131.179.64.200]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 2319339E8100; Tue, 20 Nov 2012 12:51:01 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121029 Thunderbird/16.0.2 In-Reply-To: <833904vxqo.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:67250 Archived-At: This is a multi-part message in MIME format. --------------010808090100000307020503 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 11/20/12 12:13, Eli Zaretskii wrote: > Here's the patch for that: Thanks. Won't we need patches elswhere to match? Something like the following. I'm attaching a combined patch, relative to trunk bzr 110966. Also, how is this related to the "#define getcwd _getcwd" in lib-src/ntlib.h? === modified file 'nt/config.nt' --- nt/config.nt 2012-11-17 23:58:56 +0000 +++ nt/config.nt 2012-11-20 20:44:17 +0000 @@ -411,11 +411,10 @@ /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO -/* Define to 1 if you have the `getcwd' function. - If you think about defining HAVE_GETCWD, don't: the alternative - getwd is redefined on w32.c, and does not really return the current +/* Define to 1 if you have the `getcwd' function. This is + defined on w32.c, and does not really return the current directory, to get the desired results elsewhere in Emacs. */ -#undef HAVE_GETCWD +#define HAVE_GETCWD 1 /* Define to 1 if you have the `getdelim' function. */ #undef HAVE_GETDELIM === modified file 'src/fileio.c' --- src/fileio.c 2012-11-14 04:55:41 +0000 +++ src/fileio.c 2012-11-20 20:44:17 +0000 @@ -1133,7 +1133,7 @@ newdir = "/"; } else - getwd (adir); + getcwd (adir, MAXPATHLEN + 1); newdir = adir; } === modified file 'src/msdos.c' --- src/msdos.c 2012-11-05 03:18:32 +0000 +++ src/msdos.c 2012-11-20 20:44:17 +0000 @@ -3784,7 +3784,7 @@ Lisp_Object cmd; /* Get current directory as MSDOS cwd is not per-process. */ - getwd (oldwd); + getcwd (oldwd, sizeof oldwd); /* If argv[0] is the shell, it might come in any lettercase. Since `Fmember' is case-sensitive, we need to downcase === modified file 'src/sysdep.c' --- src/sysdep.c 2012-11-20 17:33:00 +0000 +++ src/sysdep.c 2012-11-20 20:44:17 +0000 @@ -101,7 +101,6 @@ #define _P_WAIT 0 int _cdecl _spawnlp (int, const char *, const char *, ...); int _cdecl _getpid (void); -extern char *getwd (char *); #endif #include "syssignal.h" @@ -504,7 +503,7 @@ const char *sh = 0; #ifdef DOS_NT /* MW, Aug 1993 */ - getwd (oldwd); + getcwd (oldwd, sizeof oldwd); if (sh == 0) sh = (char *) egetenv ("SUSPEND"); /* KFS, 1994-12-14 */ #endif === modified file 'src/w32.c' --- src/w32.c 2012-11-17 22:12:47 +0000 +++ src/w32.c 2012-11-20 20:44:17 +0000 @@ -901,8 +901,18 @@ /* Get the current working directory. */ char * -getwd (char *dir) +getcwd (char *dir, size_t dirsize) { + if (!dirsize) + { + errno = EINVAL; + return NULL; + } + if (dirsize <= strlen (startup_dir)) + { + errno = ERANGE; + return NULL; + } #if 0 if (GetCurrentDirectory (MAXPATHLEN, dir) > 0) return dir; @@ -1818,7 +1828,7 @@ memcpy (*envp, "COMSPEC=", 8); } - /* Remember the initial working directory for getwd. */ + /* Remember the initial working directory for getcwd. */ /* FIXME: Do we need to resolve possible symlinks in startup_dir? Does it matter anywhere in Emacs? */ if (!GetCurrentDirectory (MAXPATHLEN, startup_dir)) === modified file 'src/w32.h' --- src/w32.h 2012-10-17 19:02:44 +0000 +++ src/w32.h 2012-11-20 20:44:17 +0000 @@ -163,7 +163,7 @@ extern void register_child (int, int); extern void sys_sleep (int); -extern char *getwd (char *); +extern char *getcwd (char *, size_t); extern int sys_link (const char *, const char *); @@ -181,4 +181,3 @@ #endif /* HAVE_GNUTLS */ #endif /* EMACS_W32_H */ - --------------010808090100000307020503 Content-Type: text/plain; charset=us-ascii; name="unistd.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="unistd.txt" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEyLTExLTIw IDA4OjI5OjA0ICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMi0xMS0yMCAxNzo0NTo0NSArMDAw MApAQCAtMSw1ICsxLDggQEAKIDIwMTItMTEtMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNz LnVjbGEuZWR1PgogCisJQXNzdW1lIFBPU0lYIDEwMDMuMS0xOTg4IG9yIGxhdGVyIGZvciB1 bmlzdGQuaCAoQnVnIzEyOTQ1KS4KKwkqIGNvbmZpZ3VyZS5hYzogRG8gbm90IGNoZWNrIGZv ciBnZXRjd2Qgb3IgZ2V0d2QuCisKIAlJbXByb3ZlIHN0YXRpYyBjaGVja2luZyBvZiBpbnRl Z2VyIG92ZXJmbG93IGFuZCBzdGFjayBzbWFzaGluZy4KIAkqIGNvbmZpZ3VyZS5hYyAoV0FS Tl9DRkxBR1MpOiBBZGQgLVdzdGFjay1wcm90ZWN0b3IKIAlpZiB1c2luZyBHQ0MgNC43LjIg b3IgbGF0ZXIgb24gYSBwbGF0Zm9ybSB3aXRoCgo9PT0gbW9kaWZpZWQgZmlsZSAnYWRtaW4v Q1BQLURFRklORVMnCi0tLSBhZG1pbi9DUFAtREVGSU5FUwkyMDEyLTExLTE3IDIyOjEyOjQ3 ICswMDAwCisrKyBhZG1pbi9DUFAtREVGSU5FUwkyMDEyLTExLTIwIDE3OjMzOjAwICswMDAw CkBAIC04Niw3ICs4Niw2IEBACiBBTVBFUlNBTkRfRlVMTF9OQU1FCiBCUk9LRU5fREFUQUdS QU1fU09DS0VUUwogQlJPS0VOX0ZJT05SRUFECi1CUk9LRU5fR0VUV0QKIEJST0tFTl9HRVRf Q1VSUkVOVF9ESVJfTkFNRQogQlJPS0VOX05PTl9CTE9DS0lOR19DT05ORUNUCiBCUk9LRU5f UFRZX1JFQURfQUZURVJfRUFHQUlOCkBAIC0xNjEsNyArMTYwLDYgQEAKIEhBVkVfR0FJX1NU UkVSUk9SCiBIQVZFX0dDT05GCiBIQVZFX0dFVEFERFJJTkZPCi1IQVZFX0dFVENXRAogSEFW RV9HRVRERUxJTQogSEFWRV9HRVRHUkVOVAogSEFWRV9HRVRIT1NUTkFNRQpAQCAtMTc4LDcg KzE3Niw2IEBACiBIQVZFX0dFVFJVU0FHRQogSEFWRV9HRVRTT0NLTkFNRQogSEFWRV9HRVRU SU1FT0ZEQVkKLUhBVkVfR0VUV0QKIEhBVkVfR0VUX0NVUlJFTlRfRElSX05BTUUKIEhBVkVf R0hPU1RTQ1JJUFQKIEhBVkVfR0lGCkBAIC0zMDQsNyArMzAxLDYgQEAKIEhBVkVfU0lHTkVE X1dDSEFSX1QKIEhBVkVfU0lHTkVEX1dJTlRfVAogSEFWRV9TSUdTRVRfVAotSEFWRV9TSVpF X1QKIEhBVkVfU05QUklOVEYKIEhBVkVfU09DS0VUUwogSEFWRV9TT1VORApAQCAtMzY5LDcg KzM2NSw2IEBACiBIQVZFX1RPVUNITE9DSwogSEFWRV9UWk5BTUUKIEhBVkVfVFpTRVQKLUhB VkVfVU5JU1REX0gKIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVAogSEFWRV9VVElMX0gK IEhBVkVfVVRJTUVOU0FUCgo9PT0gbW9kaWZpZWQgZmlsZSAnYWRtaW4vQ2hhbmdlTG9nJwot LS0gYWRtaW4vQ2hhbmdlTG9nCTIwMTItMTEtMTcgMjI6MTI6NDcgKzAwMDAKKysrIGFkbWlu L0NoYW5nZUxvZwkyMDEyLTExLTIwIDE3OjQ1OjQ1ICswMDAwCkBAIC0xLDMgKzEsOSBAQAor MjAxMi0xMS0yMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlBc3N1 bWUgUE9TSVggMTAwMy4xLTE5ODggb3IgbGF0ZXIgZm9yIHVuaXN0ZC5oIChCdWcjMTI5NDUp LgorCSogQ1BQLURFRklORVMgKEJST0tFTl9HRVRXRCwgSEFWRV9HRVRDV0QsIEhBVkVfR0VU V0QsIEhBVkVfU0laRV9UKQorCShIQVZFX1VOSVNURF9IKTogUmVtb3ZlLgorCiAyMDEyLTEx LTE3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KIAogCUFzc3VtZSBQT1NJ WCAxMDAzLjEtMTk4OCBvciBsYXRlciBmb3IgZmNudGwuaCAoQnVnIzEyODgxKS4KCj09PSBt b2RpZmllZCBmaWxlICdjb25maWd1cmUuYWMnCi0tLSBjb25maWd1cmUuYWMJMjAxMi0xMS0y MCAwODoyOTowNCArMDAwMAorKysgY29uZmlndXJlLmFjCTIwMTItMTEtMjAgMTc6MzM6MDAg KzAwMDAKQEAgLTI4ODksNyArMjg4OSw3IEBACiBjbG9zZWRpciBnZXRydXNhZ2UgZ2V0X2N1 cnJlbnRfZGlyX25hbWUgXAogbHJhbmQ0OCBcCiBzZWxlY3QgZ2V0cGFnZXNpemUgc2V0bG9j YWxlIFwKLXV0aW1lcyBnZXRybGltaXQgc2V0cmxpbWl0IGdldGN3ZCBzaHV0ZG93biBnZXRh ZGRyaW5mbyBcCit1dGltZXMgZ2V0cmxpbWl0IHNldHJsaW1pdCBzaHV0ZG93biBnZXRhZGRy aW5mbyBcCiBzdHJzaWduYWwgc2V0aXRpbWVyIFwKIHNlbmR0byByZWN2ZnJvbSBnZXRzb2Nr bmFtZSBnZXRwZWVybmFtZSBnZXRpZmFkZHJzIGZyZWVpZmFkZHJzIFwKIGdhaV9zdHJlcnJv ciBta3N0ZW1wIGdldGxpbmUgZ2V0ZGVsaW0gZnN5bmMgc3luYyBcCkBAIC0yODk4LDE0ICsy ODk4LDYgQEAKIHRvdWNobG9jayBcCiBjZm1ha2VyYXcgY2ZzZXRzcGVlZCBjb3B5c2lnbiBf X2V4ZWN1dGFibGVfc3RhcnQpCiAKLWRubCBnZXR3ZCBhcHBlYXJzIHRvIGJlIGJ1Z2d5IG9u IFNWUjQuMiwgc28gd2UgZG9uJ3QgdXNlIGl0LgotaWYgdGVzdCAkb3BzeXMgPSB1bml4d2Fy ZTsgdGhlbgotICBkbmwgSW4gY2FzZSBzb21lIG90aGVyIHRlc3QgZW5kcyB1cCBjaGVja2lu ZyBmb3IgZ2V0d2QuCi0gIEFDX0RFRklORShCUk9LRU5fR0VUV0QsIDEsIFtEZWZpbmUgaWYg Z2V0d2Qgc2hvdWxkIG5vdCBiZSB1c2VkLl0pCi1lbHNlCi0gIEFDX0NIRUNLX0ZVTkNTKGdl dHdkKQotZmkKLQogIyMgRXJpYyBCYWNrdXMgPGVyaWNiQGxzaWQuaHAuY29tPiBzYXlzLCBI UC1VWCA5Lnggb24gSFAgNzAwIG1hY2hpbmVzCiAjIyBoYXMgYSBicm9rZW4gYHJpbnQnIGlu IHNvbWUgbGlicmFyeSB2ZXJzaW9ucyBpbmNsdWRpbmcgbWF0aCBsaWJyYXJ5CiAjIyB2ZXJz aW9uIG51bWJlciBBLjA5LjA1LgoKPT09IG1vZGlmaWVkIGZpbGUgJ2xpYi1zcmMvQ2hhbmdl TG9nJwotLS0gbGliLXNyYy9DaGFuZ2VMb2cJMjAxMi0xMS0yMCAwODozMToxOSArMDAwMAor KysgbGliLXNyYy9DaGFuZ2VMb2cJMjAxMi0xMS0yMCAxNzo0NTo0NSArMDAwMApAQCAtMSw1 ICsxLDE1IEBACiAyMDEyLTExLTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVk dT4KIAorCUFzc3VtZSBQT1NJWCAxMDAzLjEtMTk4OCBvciBsYXRlciBmb3IgdW5pc3RkLmgg KEJ1ZyMxMjk0NSkuCisJKiBlbWFjc2NsaWVudC5jIChnZXRjd2QpOiBSZW1vdmUgZGVjbC4K KwkoZ2V0X2N1cnJlbnRfZGlyX25hbWUpOiBBc3N1bWUgZ2V0Y3dkIGV4aXN0cy4KKwkqIGV0 YWdzLmMgKEhBVkVfR0VUQ1dEKTogUmVtb3ZlLgorCShnZXRjd2QpOiBSZW1vdmUgZGVjbC4K KwkoTk9fTE9OR19PUFRJT05TKTogUmVtb3ZlIHRoaXMuICBBbGwgdXNlcyByZW1vdmVkLgor CUVtYWNzIGFsd2F5cyBoYXMgR05VIGdldG9wdC4KKwkoZXRhZ3NfZ2V0Y3dkKTogQXNzdW1l IGdldGN3ZCBleGlzdHMuCisJKiBtb3ZlbWFpbC5jIChGX09LLCBYX09LLCBXX09LLCBSX09L KTogUmVtb3ZlLgorCiAJKiBlbWFjc2NsaWVudC5jIChoYW5kbGVfc2lnY29udCwgaGFuZGxl X3NpZ3RzdHApOiBVc2UgcmFpc2UgKHNpZykKIAlyYXRoZXIgdGhhbiBraWxsIChnZXRwaWQg KCksIHNpZyksIGFzIGl0J3Mgc2ltcGxlciBhbmQgc2FmZXIuCiAKCj09PSBtb2RpZmllZCBm aWxlICdsaWItc3JjL2VtYWNzY2xpZW50LmMnCi0tLSBsaWItc3JjL2VtYWNzY2xpZW50LmMJ MjAxMi0xMS0yMCAwODozMToxOSArMDAwMAorKysgbGliLXNyYy9lbWFjc2NsaWVudC5jCTIw MTItMTEtMjAgMTc6MzM6MDAgKzAwMDAKQEAgLTg4LDEwICs4OCw3IEBACiAKIAogDAotY2hh ciAqZ2V0ZW52IChjb25zdCBjaGFyICopLCAqZ2V0d2QgKGNoYXIgKik7Ci0jaWZkZWYgSEFW RV9HRVRDV0QKLWNoYXIgKihnZXRjd2QpIChjaGFyICosIHNpemVfdCk7Ci0jZW5kaWYKK2No YXIgKmdldGVudiAoY29uc3QgY2hhciAqKTsKIAogI2lmbmRlZiBWRVJTSU9OCiAjZGVmaW5l IFZFUlNJT04gInVuc3BlY2lmaWVkIgpAQCAtMjIzLDcgKzIyMCw3IEBACiAgIGNoYXIgKmJ1 ZjsKICAgY29uc3QgY2hhciAqcHdkOwogICBzdHJ1Y3Qgc3RhdCBkb3RzdGF0LCBwd2RzdGF0 OwotICAvKiBJZiBQV0QgaXMgYWNjdXJhdGUsIHVzZSBpdCBpbnN0ZWFkIG9mIGNhbGxpbmcg Z2V0d2QuICBQV0QgaXMKKyAgLyogSWYgUFdEIGlzIGFjY3VyYXRlLCB1c2UgaXQgaW5zdGVh ZCBvZiBjYWxsaW5nIGdldGN3ZC4gIFBXRCBpcwogICAgICBzb21ldGltZXMgYSBuaWNlciBu YW1lLCBhbmQgdXNpbmcgaXQgbWF5IGF2b2lkIGEgZmF0YWwgZXJyb3IgaWYgYQogICAgICBw YXJlbnQgZGlyZWN0b3J5IGlzIHNlYXJjaGFibGUgYnV0IG5vdCByZWFkYWJsZS4gICovCiAg ICAgaWYgKChwd2QgPSBlZ2V0ZW52ICgiUFdEIikpICE9IDAKQEAgLTI0MCw3ICsyMzcsNiBA QAogICAgICAgYnVmID0gKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChwd2QpICsgMSk7CiAg ICAgICBzdHJjcHkgKGJ1ZiwgcHdkKTsKICAgICB9Ci0jaWZkZWYgSEFWRV9HRVRDV0QKICAg ZWxzZQogICAgIHsKICAgICAgIHNpemVfdCBidWZfc2l6ZSA9IDEwMjQ7CkBAIC0yNjcsMjAg KzI2Myw2IEBACiAJICAgIH0KICAgICAgICAgfQogICAgIH0KLSNlbHNlCi0gIGVsc2UKLSAg ICB7Ci0gICAgICAvKiBXZSBuZWVkIE1BWFBBVEhMRU4gaGVyZS4gICovCi0gICAgICBidWYg PSAoY2hhciAqKSB4bWFsbG9jIChNQVhQQVRITEVOICsgMSk7Ci0gICAgICBpZiAoZ2V0d2Qg KGJ1ZikgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgIGludCB0bXBfZXJybm8gPSBl cnJubzsKLSAgICAgICAgICBmcmVlIChidWYpOwotICAgICAgICAgIGVycm5vID0gdG1wX2Vy cm5vOwotICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlm CiAgIHJldHVybiBidWY7CiB9CiAjZW5kaWYKQEAgLTE1OTIsNyArMTU3NCw2IEBACiAgIGN3 ZCA9IGdldF9jdXJyZW50X2Rpcl9uYW1lICgpOwogICBpZiAoY3dkID09IDApCiAgICAgewot ICAgICAgLyogZ2V0d2QgcHV0cyBtZXNzYWdlIGluIFNUUklORyBpZiBpdCBmYWlscy4gICov CiAgICAgICBtZXNzYWdlIChUUlVFLCAiJXM6ICVzXG4iLCBwcm9nbmFtZSwKIAkgICAgICAg IkNhbm5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOwogICAgICAgZmFpbCAo KTsKCj09PSBtb2RpZmllZCBmaWxlICdsaWItc3JjL2V0YWdzLmMnCi0tLSBsaWItc3JjL2V0 YWdzLmMJMjAxMi0wOS0xNyAwMDo1NjowOCArMDAwMAorKysgbGliLXNyYy9ldGFncy5jCTIw MTItMTEtMjAgMTc6MzM6MDAgKzAwMDAKQEAgLTEyMywxOSArMTIzLDkgQEAKICMgdW5kZWYg SEFWRV9OVEdVSQogIyB1bmRlZiAgRE9TX05UCiAjIGRlZmluZSBET1NfTlQKLSMgaWZuZGVm IEhBVkVfR0VUQ1dECi0jICAgZGVmaW5lIEhBVkVfR0VUQ1dECi0jIGVuZGlmIC8qIHVuZGVm IEhBVkVfR0VUQ1dEICovCi0jZWxzZSAvKiBub3QgV0lORE9XU05UICovCi0jZW5kaWYgLyog IVdJTkRPV1NOVCAqLworI2VuZGlmIC8qIFdJTkRPV1NOVCAqLwogCiAjaW5jbHVkZSA8dW5p c3RkLmg+Ci0jaWZuZGVmIEhBVkVfVU5JU1REX0gKLSMgaWYgZGVmaW5lZCAoSEFWRV9HRVRD V0QpICYmICFkZWZpbmVkIChXSU5ET1dTTlQpCi0gICAgZXh0ZXJuIGNoYXIgKmdldGN3ZCAo Y2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7Ci0jIGVuZGlmCi0jZW5kaWYgLyogSEFWRV9VTklT VERfSCAqLwotCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAj aW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xNTIsMTYgKzE0Miw3IEBACiAjIGRlZmluZSBhc3Nl cnQoeCkgKCh2b2lkKSAwKQogI2VuZGlmCiAKLSNpZmRlZiBOT19MT05HX09QVElPTlMJCS8q IGRlZmluZSB0aGlzIGlmIHlvdSBkb24ndCBoYXZlIEdOVSBnZXRvcHQgKi8KLSMgZGVmaW5l IE5PX0xPTkdfT1BUSU9OUyBUUlVFCi0jIGRlZmluZSBnZXRvcHRfbG9uZyhhcmdjLGFyZ3Ys b3B0c3RyLGxvcHRzLGxpbmQpIGdldG9wdCAoYXJnYywgYXJndiwgb3B0c3RyKQotICBleHRl cm4gY2hhciAqb3B0YXJnOwotICBleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyOwotI2Vsc2UK LSMgZGVmaW5lIE5PX0xPTkdfT1BUSU9OUyBGQUxTRQotIyBpbmNsdWRlIDxnZXRvcHQuaD4K LSNlbmRpZiAvKiBOT19MT05HX09QVElPTlMgKi8KLQorI2luY2x1ZGUgPGdldG9wdC5oPgog I2luY2x1ZGUgPHJlZ2V4Lmg+CiAKIC8qIERlZmluZSBDVEFHUyB0byBtYWtlIHRoZSBwcm9n cmFtICJjdGFncyIgY29tcGF0aWJsZSB3aXRoIHRoZSB1c3VhbCBvbmUuCkBAIC04NjksMTEg Kzg1MCw3IEBACiAgIHByaW50ZiAoIlVzYWdlOiAlcyBbb3B0aW9uc10gW1tyZWdleC1vcHRp b24gLi4uXSBmaWxlLW5hbWVdIC4uLlxuXAogXG5cCiBUaGVzZSBhcmUgdGhlIG9wdGlvbnMg YWNjZXB0ZWQgYnkgJXMuXG4iLCBwcm9nbmFtZSwgcHJvZ25hbWUpOwotICBpZiAoTk9fTE9O R19PUFRJT05TKQotICAgIHB1dHMgKCJXQVJOSU5HOiBsb25nIG9wdGlvbiBuYW1lcyBkbyBu b3Qgd29yayB3aXRoIHRoaXMgZXhlY3V0YWJsZSxcblwKLWFzIGl0IGlzIG5vdCBsaW5rZWQg d2l0aCBHTlUgZ2V0b3B0LiIpOwotICBlbHNlCi0gICAgcHV0cyAoIllvdSBtYXkgdXNlIHVu YW1iaWd1b3VzIGFiYnJldmlhdGlvbnMgZm9yIHRoZSBsb25nIG9wdGlvbiBuYW1lcy4iKTsK KyAgcHV0cyAoIllvdSBtYXkgdXNlIHVuYW1iaWd1b3VzIGFiYnJldmlhdGlvbnMgZm9yIHRo ZSBsb25nIG9wdGlvbiBuYW1lcy4iKTsKICAgcHV0cyAoIiAgQSAtIGFzIGZpbGUgbmFtZSBt ZWFucyByZWFkIG5hbWVzIGZyb20gc3RkaW4gKG9uZSBwZXIgbGluZSkuXG5cCiBBYnNvbHV0 ZSBuYW1lcyBhcmUgc3RvcmVkIGluIHRoZSBvdXRwdXQgZmlsZSBhcyB0aGV5IGFyZS5cblwK IFJlbGF0aXZlIG9uZXMgYXJlIHN0b3JlZCByZWxhdGl2ZSB0byB0aGUgb3V0cHV0IGZpbGUn cyBkaXJlY3RvcnkuXG4iKTsKQEAgLTEwNjUsOSArMTA0Miw5IEBACiAKICAgLyogV2hlbiB0 aGUgb3B0c3RyaW5nIGJlZ2lucyB3aXRoIGEgJy0nIGdldG9wdF9sb25nIGRvZXMgbm90IHJl YXJyYW5nZSB0aGUKICAgICAgbm9uLW9wdGlvbnMgYXJndW1lbnRzIHRvIGJlIGF0IHRoZSBl bmQsIGJ1dCBsZWF2ZXMgdGhlbSBhbG9uZS4gKi8KLSAgb3B0c3RyaW5nID0gY29uY2F0IChO T19MT05HX09QVElPTlMgPyAiIiA6ICItIiwKLQkJICAgICAgImFjOkNmOklsOm86cjpSU1Zo SCIsCi0JCSAgICAgIChDVEFHUykgPyAiQnhkdFR1dnciIDogIkRpOiIpOworICBvcHRzdHJp bmcgPSBjb25jYXQgKCItYWM6Q2Y6SWw6bzpyOlJTVmhIIiwKKwkJICAgICAgKENUQUdTKSA/ ICJCeGR0VHV2dyIgOiAiRGk6IiwKKwkJICAgICAgIiIpOwogCiAgIHdoaWxlICgob3B0ID0g Z2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsIG9wdHN0cmluZywgbG9uZ29wdHMsIE5VTEwpKSAh PSBFT0YpCiAgICAgc3dpdGNoIChvcHQpCkBAIC02MzMzLDggKzYzMTAsOCBAQAogc3RhdGlj IHZvaWQKIHN1Z2dlc3RfYXNraW5nX2Zvcl9oZWxwICh2b2lkKQogewotICBmcHJpbnRmIChz dGRlcnIsICJcdFRyeSBgJXMgJXMnIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2Ygb3B0aW9ucy5c biIsCi0JICAgcHJvZ25hbWUsIE5PX0xPTkdfT1BUSU9OUyA/ICItaCIgOiAiLS1oZWxwIik7 CisgIGZwcmludGYgKHN0ZGVyciwgIlx0VHJ5IGAlcyAtLWhlbHAnIGZvciBhIGNvbXBsZXRl IGxpc3Qgb2Ygb3B0aW9ucy5cbiIsCisJICAgcHJvZ25hbWUpOwogICBleGl0IChFWElUX0ZB SUxVUkUpOwogfQogCkBAIC02MzcyLDcgKzYzNDksNiBAQAogc3RhdGljIGNoYXIgKgogZXRh Z3NfZ2V0Y3dkICh2b2lkKQogewotI2lmZGVmIEhBVkVfR0VUQ1dECiAgIGludCBidWZzaXpl ID0gMjAwOwogICBjaGFyICpwYXRoID0geG5ldyAoYnVmc2l6ZSwgY2hhcik7CiAKQEAgLTYz ODcsMzQgKzYzNjMsNiBAQAogCiAgIGNhbm9uaWNhbGl6ZV9maWxlbmFtZSAocGF0aCk7CiAg IHJldHVybiBwYXRoOwotCi0jZWxzZSAvKiBub3QgSEFWRV9HRVRDV0QgKi8KLSNpZiBNU0RP UwotCi0gIGNoYXIgKnAsIHBhdGhbTUFYUEFUSExFTiArIDFdOyAvKiBGaXhlZCBzaXplIGlz IHNhZmUgb24gTVNET1MuICAqLwotCi0gIGdldHdkIChwYXRoKTsKLQotICBmb3IgKHAgPSBw YXRoOyAqcCAhPSAnXDAnOyBwKyspCi0gICAgaWYgKCpwID09ICdcXCcpCi0gICAgICAqcCA9 ICcvJzsKLSAgICBlbHNlCi0gICAgICAqcCA9IGxvd2Nhc2UgKCpwKTsKLQotICByZXR1cm4g c3RyZHVwIChwYXRoKTsKLSNlbHNlIC8qIG5vdCBNU0RPUyAqLwotICBsaW5lYnVmZmVyIHBh dGg7Ci0gIEZJTEUgKnBpcGU7Ci0KLSAgbGluZWJ1ZmZlcl9pbml0ICgmcGF0aCk7Ci0gIHBp cGUgPSAoRklMRSAqKSBwb3BlbiAoInB3ZCAyPi9kZXYvbnVsbCIsICJyIik7Ci0gIGlmIChw aXBlID09IE5VTEwgfHwgcmVhZGxpbmVfaW50ZXJuYWwgKCZwYXRoLCBwaXBlKSA9PSAwKQot ICAgIHBmYXRhbCAoInB3ZCIpOwotICBwY2xvc2UgKHBpcGUpOwotCi0gIHJldHVybiBwYXRo LmJ1ZmZlcjsKLSNlbmRpZiAvKiBub3QgTVNET1MgKi8KLSNlbmRpZiAvKiBub3QgSEFWRV9H RVRDV0QgKi8KIH0KIAogLyogUmV0dXJuIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyBjb250 YWluaW5nIHRoZSBmaWxlIG5hbWUgb2YgRklMRQoKPT09IG1vZGlmaWVkIGZpbGUgJ2xpYi1z cmMvbW92ZW1haWwuYycKLS0tIGxpYi1zcmMvbW92ZW1haWwuYwkyMDEyLTExLTE3IDIyOjEy OjQ3ICswMDAwCisrKyBsaWItc3JjL21vdmVtYWlsLmMJMjAxMi0xMS0yMCAxNzozMzowMCAr MDAwMApAQCAtOTYsMTMgKzk2LDYgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2VuZGlmIC8q IFdJTkRPV1NOVCAqLwogCi0jaWZuZGVmIEZfT0sKLSNkZWZpbmUgRl9PSyAwCi0jZGVmaW5l IFhfT0sgMQotI2RlZmluZSBXX09LIDIKLSNkZWZpbmUgUl9PSyA0Ci0jZW5kaWYKLQogI2lm ZGVmIFdJTkRPV1NOVAogI2luY2x1ZGUgPHN5cy9sb2NraW5nLmg+CiAjZW5kaWYKCj09PSBt b2RpZmllZCBmaWxlICdudC9DaGFuZ2VMb2cnCi0tLSBudC9DaGFuZ2VMb2cJMjAxMi0xMS0x OCAxNjo1NDozMSArMDAwMAorKysgbnQvQ2hhbmdlTG9nCTIwMTItMTEtMjAgMjA6NDQ6MTcg KzAwMDAKQEAgLTEsMyArMSw4IEBACisyMDEyLTExLTIwICBQYXVsIEVnZ2VydCAgPGVnZ2Vy dEBjcy51Y2xhLmVkdT4KKworCUFzc3VtZSBQT1NJWCAxMDAzLjEtMTk4OCBvciBsYXRlciBm b3IgdW5pc3RkLmggKEJ1ZyMxMjk0NSkuCisJKiBjb25maWcubnQgKEhBVkVfR0VUQ1dEKTog Tm93IDEuCisKIDIwMTItMTEtMTggIEVsaSBaYXJldHNraWkgIDxlbGl6QGdudS5vcmc+CiAK IAkqIGluYy91bmlzdGQuaDogRG9uJ3QgaW5jbHVkZSBmY250bC5oIGFuZCBkb24ndCBkZWZp bmUgT19SRFdSLgoKPT09IG1vZGlmaWVkIGZpbGUgJ250L2NvbmZpZy5udCcKLS0tIG50L2Nv bmZpZy5udAkyMDEyLTExLTE3IDIzOjU4OjU2ICswMDAwCisrKyBudC9jb25maWcubnQJMjAx Mi0xMS0yMCAyMDo0NDoxNyArMDAwMApAQCAtNDExLDExICs0MTEsMTAgQEAKIC8qIERlZmlu ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0YWRkcmluZm8nIGZ1bmN0aW9uLiAqLwogI3Vu ZGVmIEhBVkVfR0VUQUREUklORk8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl IGBnZXRjd2QnIGZ1bmN0aW9uLgotICAgSWYgeW91IHRoaW5rIGFib3V0IGRlZmluaW5nIEhB VkVfR0VUQ1dELCBkb24ndDogdGhlIGFsdGVybmF0aXZlCi0gICBnZXR3ZCBpcyByZWRlZmlu ZWQgb24gdzMyLmMsIGFuZCBkb2VzIG5vdCByZWFsbHkgcmV0dXJuIHRoZSBjdXJyZW50Cisv KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGN3ZCcgZnVuY3Rpb24uICBUaGlz IGlzCisgICBkZWZpbmVkIG9uIHczMi5jLCBhbmQgZG9lcyBub3QgcmVhbGx5IHJldHVybiB0 aGUgY3VycmVudAogICAgZGlyZWN0b3J5LCB0byBnZXQgdGhlIGRlc2lyZWQgcmVzdWx0cyBl bHNld2hlcmUgaW4gRW1hY3MuICAqLwotI3VuZGVmIEhBVkVfR0VUQ1dECisjZGVmaW5lIEhB VkVfR0VUQ1dEIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRkZWxp bScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRERUxJTQoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy9DaGFuZ2VMb2cnCi0tLSBzcmMvQ2hhbmdlTG9nCTIwMTItMTEtMjAgMjA6MDY6 MTcgKzAwMDAKKysrIHNyYy9DaGFuZ2VMb2cJMjAxMi0xMS0yMCAyMDo0NDoxNyArMDAwMApA QCAtMSwzICsxLDE1IEBACisyMDEyLTExLTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51 Y2xhLmVkdT4KKworCUFzc3VtZSBQT1NJWCAxMDAzLjEtMTk4OCBvciBsYXRlciBmb3IgdW5p c3RkLmggKEJ1ZyMxMjk0NSkuCisJKiBhbGxvYy5jOiBBc3N1bWUgdW5pc3RkLmggZXhpc3Rz LgorCSogZmlsZWlvLmMgKEZleHBhbmRfZmlsZV9uYW1lKSBbRE9TX05UXToKKwkqIG1zZG9z LmMgKHJ1bl9tc2Rvc19jb21tYW5kKToKKwlVc2UgZ2V0Y3dkLCBub3QgZ2V0d2QuCisJKiBz eXNkZXAuYyAoZ2V0X2N1cnJlbnRfZGlyX25hbWUpOiBBc3N1bWUgZ2V0Y3dkIGV4aXN0cy4K KwkoZ2V0d2QpIFtVU0ddOiBSZW1vdmU7IG5vIGxvbmdlciBuZWVkZWQuCisJKHN5c19zdWJz aGVsbCkgW0RPU19OVF06IFVzZSBnZXRjd2QsIG5vdCBnZXR3ZC4KKwkqIHczMi5jLCB3MzIu aCAoZ2V0Y3dkKTogUmVuYW1lIGZyb20gZ2V0d2QsIGFuZCBzd2l0Y2ggdG8gZ2V0Y3dkJ3Mg QVBJLgorCiAyMDEyLTExLTIwICBTdGVmYW4gTW9ubmllciAgPG1vbm5pZXJAaXJvLnVtb250 cmVhbC5jYT4KIAogCUNvbmZsYXRlIFFuaWwgYW5kIFF1bmJvdW5kIGZvciBgc3ltYm9sLWZ1 bmN0aW9uJy4KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvYWxsb2MuYycKLS0tIHNyYy9hbGxv Yy5jCTIwMTItMTEtMjAgMjA6MDY6MTcgKzAwMDAKKysrIHNyYy9hbGxvYy5jCTIwMTItMTEt MjAgMjA6MDk6NDkgKzAwMDAKQEAgLTYzLDEwICs2Myw2IEBACiAjZW5kaWYKIAogI2luY2x1 ZGUgPHVuaXN0ZC5oPgotI2lmbmRlZiBIQVZFX1VOSVNURF9ICi1leHRlcm4gdm9pZCAqc2Jy ayAoKTsKLSNlbmRpZgotCiAjaW5jbHVkZSA8ZmNudGwuaD4KIAogI2lmZGVmIFVTRV9HVEsK Cj09PSBtb2RpZmllZCBmaWxlICdzcmMvZmlsZWlvLmMnCi0tLSBzcmMvZmlsZWlvLmMJMjAx Mi0xMS0xNCAwNDo1NTo0MSArMDAwMAorKysgc3JjL2ZpbGVpby5jCTIwMTItMTEtMjAgMjA6 NDQ6MTcgKzAwMDAKQEAgLTExMzMsNyArMTEzMyw3IEBACiAJCW5ld2RpciA9ICIvIjsKIAkg ICAgfQogCSAgZWxzZQotCSAgICBnZXR3ZCAoYWRpcik7CisJICAgIGdldGN3ZCAoYWRpciwg TUFYUEFUSExFTiArIDEpOwogCSAgbmV3ZGlyID0gYWRpcjsKIAl9CiAKCj09PSBtb2RpZmll ZCBmaWxlICdzcmMvbXNkb3MuYycKLS0tIHNyYy9tc2Rvcy5jCTIwMTItMTEtMDUgMDM6MTg6 MzIgKzAwMDAKKysrIHNyYy9tc2Rvcy5jCTIwMTItMTEtMjAgMjA6NDQ6MTcgKzAwMDAKQEAg LTM3ODQsNyArMzc4NCw3IEBACiAgIExpc3BfT2JqZWN0IGNtZDsKIAogICAvKiBHZXQgY3Vy cmVudCBkaXJlY3RvcnkgYXMgTVNET1MgY3dkIGlzIG5vdCBwZXItcHJvY2Vzcy4gICovCi0g IGdldHdkIChvbGR3ZCk7CisgIGdldGN3ZCAob2xkd2QsIHNpemVvZiBvbGR3ZCk7CiAKICAg LyogSWYgYXJndlswXSBpcyB0aGUgc2hlbGwsIGl0IG1pZ2h0IGNvbWUgaW4gYW55IGxldHRl cmNhc2UuCiAgICAgIFNpbmNlIGBGbWVtYmVyJyBpcyBjYXNlLXNlbnNpdGl2ZSwgd2UgbmVl ZCB0byBkb3duY2FzZQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9zeXNkZXAuYycKLS0tIHNy Yy9zeXNkZXAuYwkyMDEyLTExLTE3IDIyOjEyOjQ3ICswMDAwCisrKyBzcmMvc3lzZGVwLmMJ MjAxMi0xMS0yMCAyMDo0NDoxNyArMDAwMApAQCAtMTAxLDcgKzEwMSw2IEBACiAjZGVmaW5l IF9QX1dBSVQgMAogaW50IF9jZGVjbCBfc3Bhd25scCAoaW50LCBjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgLi4uKTsKIGludCBfY2RlY2wgX2dldHBpZCAodm9pZCk7Ci1leHRlcm4g Y2hhciAqZ2V0d2QgKGNoYXIgKik7CiAjZW5kaWYKIAogI2luY2x1ZGUgInN5c3NpZ25hbC5o IgpAQCAtMTM0LDEyICsxMzMsMTIgQEAKIGdldF9jdXJyZW50X2Rpcl9uYW1lICh2b2lkKQog ewogICBjaGFyICpidWY7Ci0gIGNoYXIgKnB3ZDsKKyAgY2hhciAqcHdkID0gZ2V0ZW52ICgi UFdEIik7CiAgIHN0cnVjdCBzdGF0IGRvdHN0YXQsIHB3ZHN0YXQ7Ci0gIC8qIElmIFBXRCBp cyBhY2N1cmF0ZSwgdXNlIGl0IGluc3RlYWQgb2YgY2FsbGluZyBnZXR3ZC4gIFBXRCBpcwor ICAvKiBJZiBQV0QgaXMgYWNjdXJhdGUsIHVzZSBpdCBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2V0 Y3dkLiAgUFdEIGlzCiAgICAgIHNvbWV0aW1lcyBhIG5pY2VyIG5hbWUsIGFuZCB1c2luZyBp dCBtYXkgYXZvaWQgYSBmYXRhbCBlcnJvciBpZiBhCiAgICAgIHBhcmVudCBkaXJlY3Rvcnkg aXMgc2VhcmNoYWJsZSBidXQgbm90IHJlYWRhYmxlLiAgKi8KLSAgICBpZiAoKHB3ZCA9IGdl dGVudiAoIlBXRCIpKSAhPSAwCisgIGlmIChwd2QKICAgICAgICYmIChJU19ESVJFQ1RPUllf U0VQICgqcHdkKSB8fCAoKnB3ZCAmJiBJU19ERVZJQ0VfU0VQIChwd2RbMV0pKSkKICAgICAg ICYmIHN0YXQgKHB3ZCwgJnB3ZHN0YXQpID09IDAKICAgICAgICYmIHN0YXQgKCIuIiwgJmRv dHN0YXQpID09IDAKQEAgLTE1NSw3ICsxNTQsNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsK ICAgICAgIHN0cmNweSAoYnVmLCBwd2QpOwogICAgIH0KLSNpZmRlZiBIQVZFX0dFVENXRAog ICBlbHNlCiAgICAgewogICAgICAgc2l6ZV90IGJ1Zl9zaXplID0gMTAyNDsKQEAgLTE3OSwy MiArMTc3LDYgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAg fQotI2Vsc2UKLSAgZWxzZQotICAgIHsKLSAgICAgIC8qIFdlIG5lZWQgTUFYUEFUSExFTiBo ZXJlLiAgKi8KLSAgICAgIGJ1ZiA9IG1hbGxvYyAoTUFYUEFUSExFTiArIDEpOwotICAgICAg aWYgKCFidWYpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgaWYgKGdldHdkIChidWYp ID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgdG1wX2Vycm5vID0gZXJybm87 Ci0gICAgICAgICAgZnJlZSAoYnVmKTsKLSAgICAgICAgICBlcnJubyA9IHRtcF9lcnJubzsK LSAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgogICBy ZXR1cm4gYnVmOwogfQogI2VuZGlmCkBAIC01MjEsNyArNTAzLDcgQEAKICAgICAgIGNvbnN0 IGNoYXIgKnNoID0gMDsKIAogI2lmZGVmIERPU19OVCAgICAvKiBNVywgQXVnIDE5OTMgKi8K LSAgICAgIGdldHdkIChvbGR3ZCk7CisgICAgICBnZXRjd2QgKG9sZHdkLCBzaXplb2Ygb2xk d2QpOwogICAgICAgaWYgKHNoID09IDApCiAJc2ggPSAoY2hhciAqKSBlZ2V0ZW52ICgiU1VT UEVORCIpOwkvKiBLRlMsIDE5OTQtMTItMTQgKi8KICNlbmRpZgpAQCAtMjIzOCw2MCArMjIy MCw2IEBACiAJCSAgICAgICAmZW1hY3Nfbm9yZWFsbG9jX2FsbG9jYXRvciwgY2FyZWFkbGlu a2F0Y3dkKTsKIH0KIAwKLSNpZmRlZiBVU0cKLS8qCi0gKglBbGwgb2YgdGhlIGZvbGxvd2lu ZyBhcmUgZm9yIFVTRy4KLSAqCi0gKglPbiBVU0cgc3lzdGVtcyB0aGUgc3lzdGVtIGNhbGxz IGFyZSBJTlRFUlJVUFRJQkxFIGJ5IHNpZ25hbHMKLSAqCXRoYXQgdGhlIHVzZXIgcHJvZ3Jh bSBoYXMgZWxlY3RlZCB0byBjYXRjaC4gIFRodXMgdGhlIHN5c3RlbSBjYWxsCi0gKgltdXN0 IGJlIHJldHJpZWQgaW4gdGhlc2UgY2FzZXMuICBUbyBoYW5kbGUgdGhpcyB3aXRob3V0IG1h c3NpdmUKLSAqCWNoYW5nZXMgaW4gdGhlIHNvdXJjZSBjb2RlLCB3ZSByZW1hcCB0aGUgc3Rh bmRhcmQgc3lzdGVtIGNhbGwgbmFtZXMKLSAqCXRvIG5hbWVzIGZvciBvdXIgb3duIGZ1bmN0 aW9ucyBpbiBzeXNkZXAuYyB0aGF0IGRvIHRoZSBzeXN0ZW0gY2FsbAotICoJd2l0aCByZXRy aWVzLiAgQWN0dWFsbHksIGZvciBwb3J0YWJpbGl0eSByZWFzb25zLCBpdCBpcyBnb29kCi0g Kglwcm9ncmFtbWluZyBwcmFjdGljZSwgYXMgdGhpcyBleGFtcGxlIHNob3dzLCB0byBsaW1p dCBhbGwgYWN0dWFsCi0gKglzeXN0ZW0gY2FsbHMgdG8gYSBzaW5nbGUgb2NjdXJyZW5jZSBp biB0aGUgc291cmNlLiAgU3VyZSwgdGhpcwotICoJYWRkcyBhbiBleHRyYSBsZXZlbCBvZiBm dW5jdGlvbiBjYWxsIG92ZXJoZWFkIGJ1dCBpdCBpcyBhbG1vc3QKLSAqCWFsd2F5cyBuZWds aWdpYmxlLiAgIEZyZWQgRmlzaCwgVW5pc29mdCBTeXN0ZW1zIEluYy4KLSAqLwotCi0vKgot ICoJV2FybmluZywgdGhpcyBmdW5jdGlvbiBtYXkgbm90IGR1cGxpY2F0ZSA0LjIgYWN0aW9u IHByb3Blcmx5Ci0gKgl1bmRlciBlcnJvciBjb25kaXRpb25zLgotICovCi0KLSNpZiAhZGVm aW5lZCAoSEFWRV9HRVRXRCkgfHwgZGVmaW5lZCAoQlJPS0VOX0dFVFdEKQotCi0jaWZuZGVm IE1BWFBBVEhMRU4KLS8qIEluIDQuMSwgcGFyYW0uaCBmYWlscyB0byBkZWZpbmUgdGhpcy4g ICovCi0jZGVmaW5lIE1BWFBBVEhMRU4gMTAyNAotI2VuZGlmCi0KLWNoYXIgKgotZ2V0d2Qg KGNoYXIgKnBhdGhuYW1lKQotewotICBjaGFyICpucGF0aCwgKnNwYXRoOwotICBleHRlcm4g Y2hhciAqZ2V0Y3dkIChjaGFyICosIHNpemVfdCk7Ci0KLSAgYmxvY2tfaW5wdXQgKCk7CQkJ LyogZ2V0Y3dkIHVzZXMgbWFsbG9jICovCi0gIHNwYXRoID0gbnBhdGggPSBnZXRjd2QgKChj aGFyICopIDAsIE1BWFBBVEhMRU4pOwotICBpZiAoc3BhdGggPT0gMCkKLSAgICB7Ci0gICAg ICB1bmJsb2NrX2lucHV0ICgpOwotICAgICAgcmV0dXJuIHNwYXRoOwotICAgIH0KLSAgLyog T24gQWx0b3MgMzA2OCwgZ2V0Y3dkIGNhbiByZXR1cm4gQGhvc3RuYW1lL2Rpciwgc28gZGlz Y2FyZAotICAgICB1cCB0byBmaXJzdCBzbGFzaC4gIFNob3VsZCBiZSBoYXJtbGVzcyBvbiBv dGhlciBzeXN0ZW1zLiAgKi8KLSAgd2hpbGUgKCpucGF0aCAmJiAqbnBhdGggIT0gJy8nKQot ICAgIG5wYXRoKys7Ci0gIHN0cmNweSAocGF0aG5hbWUsIG5wYXRoKTsKLSAgZnJlZSAoc3Bh dGgpOwkJCS8qIGdldGN3ZCB1c2VzIG1hbGxvYyAqLwotICB1bmJsb2NrX2lucHV0ICgpOwot ICByZXR1cm4gcGF0aG5hbWU7Ci19Ci0KLSNlbmRpZiAvKiAhZGVmaW5lZCAoSEFWRV9HRVRX RCkgfHwgZGVmaW5lZCAoQlJPS0VOX0dFVFdEKSAqLwotI2VuZGlmIC8qIFVTRyAqLwotDAog LyogRGlyZWN0b3J5IHJvdXRpbmVzIGZvciBzeXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSB0aGVt LiAqLwogCiAjaWZkZWYgSEFWRV9ESVJFTlRfSAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93 MzIuYycKLS0tIHNyYy93MzIuYwkyMDEyLTExLTE3IDIyOjEyOjQ3ICswMDAwCisrKyBzcmMv dzMyLmMJMjAxMi0xMS0yMCAyMDo0NDoxNyArMDAwMApAQCAtOTAxLDggKzkwMSwxOCBAQAog CiAvKiBHZXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICAqLwogY2hhciAqCi1n ZXR3ZCAoY2hhciAqZGlyKQorZ2V0Y3dkIChjaGFyICpkaXIsIHNpemVfdCBkaXJzaXplKQog eworICBpZiAoIWRpcnNpemUpCisgICAgeworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAg ICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGlmIChkaXJzaXplIDw9IHN0cmxlbiAoc3RhcnR1 cF9kaXIpKQorICAgIHsKKyAgICAgIGVycm5vID0gRVJBTkdFOworICAgICAgcmV0dXJuIE5V TEw7CisgICAgfQogI2lmIDAKICAgaWYgKEdldEN1cnJlbnREaXJlY3RvcnkgKE1BWFBBVEhM RU4sIGRpcikgPiAwKQogICAgIHJldHVybiBkaXI7CkBAIC0xODE4LDcgKzE4MjgsNyBAQAog CW1lbWNweSAoKmVudnAsICJDT01TUEVDPSIsIDgpOwogICB9CiAKLSAgLyogUmVtZW1iZXIg dGhlIGluaXRpYWwgd29ya2luZyBkaXJlY3RvcnkgZm9yIGdldHdkLiAgKi8KKyAgLyogUmVt ZW1iZXIgdGhlIGluaXRpYWwgd29ya2luZyBkaXJlY3RvcnkgZm9yIGdldGN3ZC4gICovCiAg IC8qIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIHJlc29sdmUgcG9zc2libGUgc3ltbGlua3MgaW4g c3RhcnR1cF9kaXI/CiAgICAgIERvZXMgaXQgbWF0dGVyIGFueXdoZXJlIGluIEVtYWNzPyAg Ki8KICAgaWYgKCFHZXRDdXJyZW50RGlyZWN0b3J5IChNQVhQQVRITEVOLCBzdGFydHVwX2Rp cikpCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3czMi5oJwotLS0gc3JjL3czMi5oCTIwMTIt MTAtMTcgMTk6MDI6NDQgKzAwMDAKKysrIHNyYy93MzIuaAkyMDEyLTExLTIwIDIwOjQ0OjE3 ICswMDAwCkBAIC0xNjMsNyArMTYzLDcgQEAKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX2NoaWxk IChpbnQsIGludCk7CiAKIGV4dGVybiB2b2lkIHN5c19zbGVlcCAoaW50KTsKLWV4dGVybiBj aGFyICpnZXR3ZCAoY2hhciAqKTsKK2V4dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKiwgc2l6 ZV90KTsKIGV4dGVybiBpbnQgc3lzX2xpbmsgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq KTsKIAogCkBAIC0xODEsNCArMTgxLDMgQEAKICNlbmRpZiAvKiBIQVZFX0dOVVRMUyAqLwog CiAjZW5kaWYgLyogRU1BQ1NfVzMyX0ggKi8KLQoK --------------010808090100000307020503--