From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.devel Subject: Re: [RFC, experimental] save_{excursion,restriction} Date: Tue, 24 Jul 2012 15:28:56 +0400 Message-ID: <500E86F8.7090102@yandex.ru> References: <500D84B6.50303@yandex.ru> <500E2FB7.4080006@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010008020302040006030000" X-Trace: dough.gmane.org 1343129215 28689 80.91.229.3 (24 Jul 2012 11:26:55 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 24 Jul 2012 11:26:55 +0000 (UTC) Cc: Emacs development discussions To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Jul 24 13:26:54 2012 Return-path: Envelope-to: ged-emacs-devel@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 1StdGN-0000Xs-Lm for ged-emacs-devel@m.gmane.org; Tue, 24 Jul 2012 13:26:52 +0200 Original-Received: from localhost ([::1]:57613 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1StdGM-0000M4-Ur for ged-emacs-devel@m.gmane.org; Tue, 24 Jul 2012 07:26:50 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:56987) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1StdG9-0000KD-L7 for emacs-devel@gnu.org; Tue, 24 Jul 2012 07:26:48 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1StdG7-0002xN-H3 for emacs-devel@gnu.org; Tue, 24 Jul 2012 07:26:37 -0400 Original-Received: from forward4h.mail.yandex.net ([84.201.186.22]:46819) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1StdG6-0002x5-Qr for emacs-devel@gnu.org; Tue, 24 Jul 2012 07:26:35 -0400 Original-Received: from smtp2h.mail.yandex.net (smtp2h.mail.yandex.net [84.201.187.145]) by forward4h.mail.yandex.net (Yandex) with ESMTP id B206D1B229AE; Tue, 24 Jul 2012 15:26:32 +0400 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1343129192; bh=cl3jBiSEgCCb2fKDnMP7brP9FxYxXigx1SYSYQHUp24=; h=Message-ID:Date:From:MIME-Version:To:CC:Subject:References: In-Reply-To:Content-Type; b=MPwFL5hoCV6omEvMQzZeQ/eARxp5E0BnchxSYIkUXIHw2rmnFK9Sj44NpdSn24Qgz 61Ez9BJHy6G4BlDbO8llN6CgN2usl/kEnXneP81cILLywALTL22Po0KiJWvYuGjddd r3wvc1BP4OHeynoNvghUCioCvBl8J1cXvimoV3U0= Original-Received: from smtp2h.mail.yandex.net (localhost [127.0.0.1]) by smtp2h.mail.yandex.net (Yandex) with ESMTP id 784B2170006C; Tue, 24 Jul 2012 15:26:32 +0400 (MSK) Original-Received: from unknown (unknown [37.139.84.55]) by smtp2h.mail.yandex.net (nwsmtp/Yandex) with ESMTP id QSXulKsK-QSX86ufF; Tue, 24 Jul 2012 15:26:28 +0400 X-Yandex-Rcpt-Suid: monnier@IRO.UMontreal.CA X-Yandex-Rcpt-Suid: emacs-devel@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1343129192; bh=cl3jBiSEgCCb2fKDnMP7brP9FxYxXigx1SYSYQHUp24=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject: References:In-Reply-To:Content-Type; b=PHgdKJ3Jd6nHILJPKyDv9TB7NZIGpkodVaBZ0bLvDXA7jKObGevGL1opmJpdNbZki xd6opZ10ICQZZOo6vHwUGp5Y0hP1kuoiAATrgmvtLCoYXchRmMLHCjQvpSceY/+JkC RbWU9echYrYHPzUksi2wkp/ougqZV2UIcyeT1Zqo= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120713 Thunderbird/14.0 In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 84.201.186.22 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:151857 Archived-At: This is a multi-part message in MIME format. --------------010008020302040006030000 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 07/24/2012 01:37 PM, Stefan Monnier wrote: > BTW, why use an extra `excursions' field rather than just use a new > Lisp_Object type for "struct excursion"? > I think that would be cleaner to either make them into > Lisp_Pseudovector or Lisp_Misc. 1) "excursion state" is not visible to Lisp programs and so not referenced via Lisp_Objects, it's just a service thing related to save-excursion primitive and buffer internals. Just like buffer text for the basic editing primitives. 2) Lisp_XXX things are designed to be managed by GC, and other use of them is suspicious and discouraged (embedding Lisp_Markers into struct excursion is the poor solution in the absence of better alternatives). But, the main purpose of this design is to avoid any dependency from GC to achieve the lowest possible overhead of save-excursion. Dmitry --------------010008020302040006030000 Content-Type: text/plain; charset=UTF-8; name="excursion_3.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="excursion_3.patch" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9hbGxvYy5jJwotLS0gc3JjL2FsbG9jLmMJMjAxMi0w Ny0yMyAxMToxNTo0MyArMDAwMAorKysgc3JjL2FsbG9jLmMJMjAxMi0wNy0yNCAxMDo0OTo1 NiArMDAwMApAQCAtMzY1NCwxNSArMzY1NCwxMSBAQAogICAodm9pZCkKIHsKICAgcmVnaXN0 ZXIgTGlzcF9PYmplY3QgdmFsOwotICByZWdpc3RlciBzdHJ1Y3QgTGlzcF9NYXJrZXIgKnA7 CisgIHJlZ2lzdGVyIHN0cnVjdCBMaXNwX01hcmtlciAqbTsKIAogICB2YWwgPSBhbGxvY2F0 ZV9taXNjIChMaXNwX01pc2NfTWFya2VyKTsKLSAgcCA9IFhNQVJLRVIgKHZhbCk7Ci0gIHAt PmJ1ZmZlciA9IDA7Ci0gIHAtPmJ5dGVwb3MgPSAwOwotICBwLT5jaGFycG9zID0gMDsKLSAg cC0+bmV4dCA9IE5VTEw7Ci0gIHAtPmluc2VydGlvbl90eXBlID0gMDsKKyAgbSA9IFhNQVJL RVIgKHZhbCk7CisgIElOSVRfTUFSS0VSIChtLCAoc3RydWN0IGJ1ZmZlciAqKSBOVUxMLCAw LCAwLCAwKTsKICAgcmV0dXJuIHZhbDsKIH0KIApAQCAtMzY3NSwyMCArMzY3MSwyMiBAQAog ICBMaXNwX09iamVjdCBvYmo7CiAgIHN0cnVjdCBMaXNwX01hcmtlciAqbTsKIAorICAvKiBV c2UgRm1ha2VfbWFya2VyIHRvIGNyZWF0ZSBtYXJrZXIgcG9pbnRzIHRvIG5vd2hlcmUuICAq LworICBlYXNzZXJ0IChidWYgIT0gTlVMTCk7CisKICAgLyogTm8gZGVhZCBidWZmZXJzIGhl cmUuICAqLwogICBlYXNzZXJ0ICghTklMUCAoQlZBUiAoYnVmLCBuYW1lKSkpOwogCi0gIC8q IEV2ZXJ5IGNoYXJhY3RlciBpcyBhdCBsZWFzdCBvbmUgYnl0ZS4gICovCi0gIGVhc3NlcnQg KGNoYXJwb3MgPD0gYnl0ZXBvcyk7CisgIC8qIEluIGEgc2luZ2xlLWJ5dGUgYnVmZmVyLCB0 d28gcG9zaXRpb25zIG11c3QgYmUgZXF1YWwuCisgICAgIE90aGVyd2lzZSwgZXZlcnkgY2hh cmFjdGVyIGlzIGF0IGxlYXN0IG9uZSBieXRlLiAgKi8KKyAgaWYgKEJVRl9aIChidWYpID09 IEJVRl9aX0JZVEUgKGJ1ZikpCisgICAgZWFzc2VydCAoY2hhcnBvcyA9PSBieXRlcG9zKTsK KyAgZWxzZQorICAgIGVhc3NlcnQgKGNoYXJwb3MgPD0gYnl0ZXBvcyk7CiAKICAgb2JqID0g YWxsb2NhdGVfbWlzYyAoTGlzcF9NaXNjX01hcmtlcik7CiAgIG0gPSBYTUFSS0VSIChvYmop OwotICBtLT5idWZmZXIgPSBidWY7Ci0gIG0tPmNoYXJwb3MgPSBjaGFycG9zOwotICBtLT5i eXRlcG9zID0gYnl0ZXBvczsKLSAgbS0+aW5zZXJ0aW9uX3R5cGUgPSAwOwotICBtLT5uZXh0 ID0gQlVGX01BUktFUlMgKGJ1Zik7Ci0gIEJVRl9NQVJLRVJTIChidWYpID0gbTsKKyAgSU5J VF9NQVJLRVIgKG0sIGJ1ZiwgY2hhcnBvcywgYnl0ZXBvcywgMCk7CiAgIHJldHVybiBvYmo7 CiB9CiAKQEAgLTU4NTEsNiArNTg0OSw4IEBACiBzdGF0aWMgdm9pZAogbWFya19idWZmZXIg KHN0cnVjdCBidWZmZXIgKmJ1ZmZlcikKIHsKKyAgc3RydWN0IGV4Y3Vyc2lvbiAqZXg7CisK ICAgLyogVGhpcyBpcyBoYW5kbGVkIG11Y2ggbGlrZSBvdGhlciBwc2V1ZG92ZWN0b3JzLi4u ICAqLwogICBtYXJrX3ZlY3Rvcmxpa2UgKChzdHJ1Y3QgTGlzcF9WZWN0b3IgKikgYnVmZmVy KTsKIApAQCAtNTg2NSw2ICs1ODY1LDE1IEBACiAgIG1hcmtfb3ZlcmxheSAoYnVmZmVyLT5v dmVybGF5c19iZWZvcmUpOwogICBtYXJrX292ZXJsYXkgKGJ1ZmZlci0+b3ZlcmxheXNfYWZ0 ZXIpOwogCisgIC8qIEluIGEgc3RydWN0IGV4Y3Vyc2lvbiwgbWFya2VycyBhcmUgYWxsb2Nh dGVkIGluIHBsYWNlIGFuZAorICAgICBpbnZpc2libGUgZm9yIEdDLCBzbyBvbmx5IHRoZSB3 aW5kb3cgc2hvdWxkIGJlIG1hcmtlZC4gICovCisgIGZvciAoZXggPSBidWZmZXItPmV4Y3Vy c2lvbnM7IGV4OyBleCA9IGV4LT5uZXh0KQorICAgIHsKKyAgICAgIHN0cnVjdCBMaXNwX1Zl Y3RvciAqdyA9IChzdHJ1Y3QgTGlzcF9WZWN0b3IgKikgZXgtPndpbmRvdzsKKyAgICAgIGlm ICghVkVDVE9SX01BUktFRF9QICh3KSkKKwltYXJrX3ZlY3Rvcmxpa2UgKHcpOworICAgIH0K KwogICAvKiBJZiB0aGlzIGlzIGFuIGluZGlyZWN0IGJ1ZmZlciwgbWFyayBpdHMgYmFzZSBi dWZmZXIuICAqLwogICBpZiAoYnVmZmVyLT5iYXNlX2J1ZmZlciAmJiAhVkVDVE9SX01BUktF RF9QIChidWZmZXItPmJhc2VfYnVmZmVyKSkKICAgICBtYXJrX2J1ZmZlciAoYnVmZmVyLT5i YXNlX2J1ZmZlcik7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2J1ZmZlci5jJwotLS0gc3Jj L2J1ZmZlci5jCTIwMTItMDctMjQgMDY6NDU6NDQgKzAwMDAKKysrIHNyYy9idWZmZXIuYwky MDEyLTA3LTI0IDEwOjAxOjA5ICswMDAwCkBAIC0zNjYsNiArMzY2LDcgQEAKICAgKihCVUZf R1BUX0FERFIgKGIpKSA9ICooQlVGX1pfQUREUiAoYikpID0gMDsgLyogUHV0IGFuIGFuY2hv ciAnXDAnLiAgKi8KICAgYi0+dGV4dC0+aW5oaWJpdF9zaHJpbmtpbmcgPSAwOwogCisgIGIt PmV4Y3Vyc2lvbnMgPSBOVUxMOwogICBiLT5uZXdsaW5lX2NhY2hlID0gMDsKICAgYi0+d2lk dGhfcnVuX2NhY2hlID0gMDsKICAgQlZBUiAoYiwgd2lkdGhfdGFibGUpID0gUW5pbDsKQEAg LTU3OCw2ICs1NzksNyBAQAogICBiLT5iZWd2X2J5dGUgPSBiLT5iYXNlX2J1ZmZlci0+YmVn dl9ieXRlOwogICBiLT56dl9ieXRlID0gYi0+YmFzZV9idWZmZXItPnp2X2J5dGU7CiAKKyAg Yi0+ZXhjdXJzaW9ucyA9IE5VTEw7CiAgIGItPm5ld2xpbmVfY2FjaGUgPSAwOwogICBiLT53 aWR0aF9ydW5fY2FjaGUgPSAwOwogICBCVkFSIChiLCB3aWR0aF90YWJsZSkgPSBRbmlsOwoK PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9idWZmZXIuaCcKLS0tIHNyYy9idWZmZXIuaAkyMDEy LTA3LTIyIDAzOjQ0OjM1ICswMDAwCisrKyBzcmMvYnVmZmVyLmgJMjAxMi0wNy0yNCAxMDow MTo1MCArMDAwMApAQCAtNDcyLDYgKzQ3MiwzMCBAQAogICAgIGludCBpbmhpYml0X3Nocmlu a2luZzsKICAgfTsKIAorLyogVXNlZCB0byByZWNvcmQgYnVmZmVyIHN0YXRlIGZvciBzYXZl LWV4Y3Vyc2lvbi4gICovCisKK3N0cnVjdCBleGN1cnNpb24KK3sKKyAgLyogU2F2ZWQgdmFs dWUgb2YgWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KS4gICovCisgIHN0cnVjdCB3aW5kb3cg KndpbmRvdzsKKworICAvKiBOb24temVybyBpZiB0aGUgd2luZG93IGFib3ZlIGhhcyBkaXNw bGF5ZWQgdGhpcyBidWZmZXIuICAqLworICB1bnNpZ25lZCB2aXNpYmxlIDogMTsKKworICAv KiBOb24temVybyBpZiB0aGlzIGJ1ZmZlciBoYXMgbWFyayBhY3RpdmUuICAqLworICB1bnNp Z25lZCBhY3RpdmUgOiAxOworCisgIC8qIFNhdmVkIHBvaW50LiAgKi8KKyAgc3RydWN0IExp c3BfTWFya2VyIHBvaW50OworCisgIC8qIFNhdmVkIG1hcmsuICBNYXkgcG9pbnQgdG8gbm93 aGVyZS4gICovCisgIHN0cnVjdCBMaXNwX01hcmtlciBtYXJrOworCisgIC8qIFdoZW4gdGhl IGNhbGxzIHRvIHNhdmUtZXhjdXJzaW9uIGFyZSBuZXN0ZWQsIHRoaXMgcG9pbnRzCisgICAg IHRvIGFuIG91dGVyIHNhdmUtZXhjdXJzaW9uIHN0YXRlLCBvciBOVUxMIG90aGVyd2lzZS4g ICovCisgIHN0cnVjdCBleGN1cnNpb24gKm5leHQ7Cit9OworCiAvKiBMaXNwIGZpZWxkcyBp biBzdHJ1Y3QgYnVmZmVyIGFyZSBoaWRkZW4gZnJvbSBtb3N0IGNvZGUgYW5kIGFjY2Vzc2Vk CiAgICB2aWEgdGhlIEJWQVIgbWFjcm8sIGJlbG93LiAgT25seSBzZWxlY3QgcGllY2VzIG9m IGNvZGUsIGxpa2UgdGhlIEdDLAogICAgYXJlIGFsbG93ZWQgdG8gdXNlIEJVRkZFUl9JTlRF Uk5BTF9GSUVMRC4gICovCkBAIC04NTYsNiArODgwLDkgQEAKICAgLyogUG9zaXRpb24gd2hl cmUgdGhlIG92ZXJsYXkgbGlzdHMgYXJlIGNlbnRlcmVkLiAgKi8KICAgcHRyZGlmZl90IG92 ZXJsYXlfY2VudGVyOwogCisgIC8qIExpc3Qgb2YgcmVjb3JkZWQgZXhjdXJzaW9ucy4gICov CisgIHN0cnVjdCBleGN1cnNpb24gKmV4Y3Vyc2lvbnM7CisKICAgLyogQ2hhbmdlcyBpbiB0 aGUgYnVmZmVyIGFyZSByZWNvcmRlZCBoZXJlIGZvciB1bmRvLCBhbmQgdCBtZWFucwogICAg ICBkb24ndCByZWNvcmQgYW55dGhpbmcuICBUaGlzIGluZm9ybWF0aW9uIGJlbG9uZ3MgdG8g dGhlIGJhc2UKICAgICAgYnVmZmVyIG9mIGFuIGluZGlyZWN0IGJ1ZmZlci4gIEJ1dCB3ZSBj YW4ndCBzdG9yZSBpdCBpbiB0aGUKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZWRpdGZucy5j JwotLS0gc3JjL2VkaXRmbnMuYwkyMDEyLTA3LTE3IDA3OjQzOjAxICswMDAwCisrKyBzcmMv ZWRpdGZucy5jCTIwMTItMDctMjQgMTA6NTk6NDggKzAwMDAKQEAgLTIyMyw2ICsyMjMsMTkg QEAKICAgcmV0dXJuIGJ1aWxkX21hcmtlciAoY3VycmVudF9idWZmZXIsIFBULCBQVF9CWVRF KTsKIH0KIAorLyogRmFzdCBwYXRoIHRvIHNldCBwb2ludCBhdCBNQVJLLiAgKi8KKworc3Rh dGljIGlubGluZSB2b2lkCitzZXRfcG9zaXRpb24gKHN0cnVjdCBMaXNwX01hcmtlciAqbWFy aykKK3sKKyAgaWYgKG1hcmstPmNoYXJwb3MgPCBCRUdWKQorICAgIFNFVF9QVF9CT1RIIChC RUdWLCBCRUdWX0JZVEUpOworICBlbHNlIGlmIChtYXJrLT5jaGFycG9zID4gWlYpCisgICAg U0VUX1BUX0JPVEggKFpWLCBaVl9CWVRFKTsKKyAgZWxzZQorICAgIFNFVF9QVF9CT1RIICht YXJrLT5jaGFycG9zLCBtYXJrLT5ieXRlcG9zKTsKK30KKwogREVGVU4gKCJnb3RvLWNoYXIi LCBGZ290b19jaGFyLCBTZ290b19jaGFyLCAxLCAxLCAiTkdvdG8gY2hhcjogIiwKICAgICAg ICBkb2M6IC8qIFNldCBwb2ludCB0byBQT1NJVElPTiwgYSBudW1iZXIgb3IgbWFya2VyLgog QmVnaW5uaW5nIG9mIGJ1ZmZlciBpcyBwb3NpdGlvbiAocG9pbnQtbWluKSwgZW5kIGlzIChw b2ludC1tYXgpLgpAQCAtMjM1LDE0ICsyNDgsNyBAQAogICBpZiAoTUFSS0VSUCAocG9zaXRp b24pCiAgICAgICAmJiBjdXJyZW50X2J1ZmZlciA9PSBYTUFSS0VSIChwb3NpdGlvbiktPmJ1 ZmZlcikKICAgICB7Ci0gICAgICBwb3MgPSBtYXJrZXJfcG9zaXRpb24gKHBvc2l0aW9uKTsK LSAgICAgIGlmIChwb3MgPCBCRUdWKQotCVNFVF9QVF9CT1RIIChCRUdWLCBCRUdWX0JZVEUp OwotICAgICAgZWxzZSBpZiAocG9zID4gWlYpCi0JU0VUX1BUX0JPVEggKFpWLCBaVl9CWVRF KTsKLSAgICAgIGVsc2UKLQlTRVRfUFRfQk9USCAocG9zLCBtYXJrZXJfYnl0ZV9wb3NpdGlv biAocG9zaXRpb24pKTsKLQorICAgICAgc2V0X3Bvc2l0aW9uIChYTUFSS0VSIChwb3NpdGlv bikpOwogICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgIH0KIApAQCAtODIxLDEwNCArODI3 LDEwMCBAQAogCQkJICAgICAgUW5pbCwgUXQsIFFuaWwpOwogfQogCi0MCisvKiBTYXZlIGN1 cnJlbnQgYnVmZmVyIHN0YXRlIGJlZm9yZSBlbnRlcmluZyBGc2F2ZV9leGN1cnNpb24uICAq LworCiBMaXNwX09iamVjdAogc2F2ZV9leGN1cnNpb25fc2F2ZSAodm9pZCkKIHsKLSAgaW50 IHZpc2libGUgPSAoWEJVRkZFUiAoWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KS0+YnVmZmVy KQotCQkgPT0gY3VycmVudF9idWZmZXIpOwotCi0gIHJldHVybiBGY29ucyAoRnBvaW50X21h cmtlciAoKSwKLQkJRmNvbnMgKEZjb3B5X21hcmtlciAoQlZBUiAoY3VycmVudF9idWZmZXIs IG1hcmspLCBRbmlsKSwKLQkJICAgICAgIEZjb25zICh2aXNpYmxlID8gUXQgOiBRbmlsLAot CQkJICAgICAgRmNvbnMgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBtYXJrX2FjdGl2ZSksCi0J CQkJICAgICBzZWxlY3RlZF93aW5kb3cpKSkpOworICBMaXNwX09iamVjdCBidWY7CisgIHN0 cnVjdCBleGN1cnNpb24gKmV4OworICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAoc2Vs ZWN0ZWRfd2luZG93KTsKKyAgc3RydWN0IExpc3BfTWFya2VyICptID0gWE1BUktFUiAoQlZB UiAoY3VycmVudF9idWZmZXIsIG1hcmspKTsKKworICBleCA9IHhtYWxsb2MgKHNpemVvZiAq ZXgpOworICBleC0+d2luZG93ID0gdzsKKyAgZXgtPnZpc2libGUgPSAoWEJVRkZFUiAody0+ YnVmZmVyKSA9PSBjdXJyZW50X2J1ZmZlcik7CisgIGV4LT5hY3RpdmUgPSAhTklMUCAoQlZB UiAoY3VycmVudF9idWZmZXIsIG1hcmtfYWN0aXZlKSk7CisKKyAgLyogV2UgZG8gbm90IGlu aXRpYWxpemUgdHlwZSBhbmQgZ2NtYXJrYml0IHNpbmNlIHRoaXMgbWFya2VyCisgICAgIGlz IG5ldmVyIHJlZmVyZW5jZWQgdmlhIExpc3BfT2JqZWN0IGFuZCBpbnZpc2libGUgZm9yIEdD LiAgKi8KKyAgSU5JVF9NQVJLRVIgKCZleC0+cG9pbnQsIGN1cnJlbnRfYnVmZmVyLCBQVCwg UFRfQllURSwgMCk7CisKKyAgLyogTGlrZXdpc2UuICBOb3RlIHRoYXQgY2hhcnBvcyBhbmQg Ynl0ZXBvcyBtYXkgYmUgemVyby4gICovCisgIElOSVRfTUFSS0VSICgmZXgtPm1hcmssIG0t PmJ1ZmZlciwgbS0+Y2hhcnBvcywgCisJICAgICAgIG0tPmJ5dGVwb3MsIG0tPmluc2VydGlv bl90eXBlKTsKKworICBleC0+bmV4dCA9IGN1cnJlbnRfYnVmZmVyLT5leGN1cnNpb25zOwor ICBjdXJyZW50X2J1ZmZlci0+ZXhjdXJzaW9ucyA9IGV4OworICBYU0VUQlVGRkVSIChidWYs IGN1cnJlbnRfYnVmZmVyKTsKKyAgcmV0dXJuIGJ1ZjsKIH0KIAorLyogUmVzdG9yZSBCVUZG RVIncyB2YWx1ZXMgYmVmb3JlIGxlYXZpbmcgRnNhdmVfZXhjdXJzaW9uLiAgKi8KKwogTGlz cF9PYmplY3QKLXNhdmVfZXhjdXJzaW9uX3Jlc3RvcmUgKExpc3BfT2JqZWN0IGluZm8pCitz YXZlX2V4Y3Vyc2lvbl9yZXN0b3JlIChMaXNwX09iamVjdCBidWZmZXIpCiB7Ci0gIExpc3Bf T2JqZWN0IHRlbSwgdGVtMSwgb21hcmssIG5tYXJrOwotICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8x LCBnY3BybzIsIGdjcHJvMzsKLSAgaW50IHZpc2libGVfcDsKLQotICB0ZW0gPSBGbWFya2Vy X2J1ZmZlciAoWENBUiAoaW5mbykpOwotICAvKiBJZiBidWZmZXIgYmVpbmcgcmV0dXJuZWQg dG8gaXMgbm93IGRlbGV0ZWQsIGF2b2lkIGVycm9yICovCi0gIC8qIE90aGVyd2lzZSBjb3Vs ZCBnZXQgZXJyb3IgaGVyZSB3aGlsZSB1bndpbmRpbmcgdG8gdG9wIGxldmVsCi0gICAgIGFu ZCBjcmFzaCAqLwotICAvKiBJbiB0aGF0IGNhc2UsIEZtYXJrZXJfYnVmZmVyIHJldHVybnMg bmlsIG5vdy4gICovCi0gIGlmIChOSUxQICh0ZW0pKQotICAgIHJldHVybiBRbmlsOwotCi0g IG9tYXJrID0gbm1hcmsgPSBRbmlsOwotICBHQ1BSTzMgKGluZm8sIG9tYXJrLCBubWFyayk7 Ci0KLSAgRnNldF9idWZmZXIgKHRlbSk7Ci0KLSAgLyogUG9pbnQgbWFya2VyLiAgKi8KLSAg dGVtID0gWENBUiAoaW5mbyk7Ci0gIEZnb3RvX2NoYXIgKHRlbSk7Ci0gIHVuY2hhaW5fbWFy a2VyIChYTUFSS0VSICh0ZW0pKTsKLQotICAvKiBNYXJrIG1hcmtlci4gICovCi0gIGluZm8g PSBYQ0RSIChpbmZvKTsKLSAgdGVtID0gWENBUiAoaW5mbyk7Ci0gIG9tYXJrID0gRm1hcmtl cl9wb3NpdGlvbiAoQlZBUiAoY3VycmVudF9idWZmZXIsIG1hcmspKTsKLSAgRnNldF9tYXJr ZXIgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBtYXJrKSwgdGVtLCBGY3VycmVudF9idWZmZXIg KCkpOwotICBubWFyayA9IEZtYXJrZXJfcG9zaXRpb24gKHRlbSk7Ci0gIHVuY2hhaW5fbWFy a2VyIChYTUFSS0VSICh0ZW0pKTsKLQotICAvKiB2aXNpYmxlICovCi0gIGluZm8gPSBYQ0RS IChpbmZvKTsKLSAgdmlzaWJsZV9wID0gIU5JTFAgKFhDQVIgKGluZm8pKTsKLQotI2lmIDAg LyogV2UgdXNlZCB0byBtYWtlIHRoZSBjdXJyZW50IGJ1ZmZlciB2aXNpYmxlIGluIHRoZSBz ZWxlY3RlZCB3aW5kb3cKLQkgaWYgdGhhdCB3YXMgdHJ1ZSBwcmV2aW91c2x5LiAgVGhhdCBh dm9pZHMgc29tZSBhbm9tYWxpZXMuCi0JIEJ1dCBpdCBjcmVhdGVzIG90aGVycywgYW5kIGl0 IHdhc24ndCBkb2N1bWVudGVkLCBhbmQgaXQgaXMgc2ltcGxlcgotCSBhbmQgY2xlYW5lciBu ZXZlciB0byBhbHRlciB0aGUgd2luZG93L2J1ZmZlciBjb25uZWN0aW9ucy4gICovCi0gIHRl bTEgPSBGY2FyICh0ZW0pOwotICBpZiAoIU5JTFAgKHRlbTEpCi0gICAgICAmJiBjdXJyZW50 X2J1ZmZlciAhPSBYQlVGRkVSIChYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpLT5idWZmZXIp KQotICAgIEZzd2l0Y2hfdG9fYnVmZmVyIChGY3VycmVudF9idWZmZXIgKCksIFFuaWwpOwot I2VuZGlmIC8qIDAgKi8KLQotICAvKiBNYXJrIGFjdGl2ZSAqLwotICBpbmZvID0gWENEUiAo aW5mbyk7Ci0gIHRlbSA9IFhDQVIgKGluZm8pOwotICB0ZW0xID0gQlZBUiAoY3VycmVudF9i dWZmZXIsIG1hcmtfYWN0aXZlKTsKLSAgQlZBUiAoY3VycmVudF9idWZmZXIsIG1hcmtfYWN0 aXZlKSA9IHRlbTsKLQotICAvKiBJZiBtYXJrIGlzIGFjdGl2ZSBub3csIGFuZCBlaXRoZXIg d2FzIG5vdCBhY3RpdmUKLSAgICAgb3Igd2FzIGF0IGEgZGlmZmVyZW50IHBsYWNlLCBydW4g dGhlIGFjdGl2YXRlIGhvb2suICAqLwotICBpZiAoISBOSUxQICh0ZW0pKQotICAgIHsKLSAg ICAgIGlmICghIEVRIChvbWFyaywgbm1hcmspKQotICAgICAgICB7Ci0gICAgICAgICAgdGVt ID0gaW50ZXJuICgiYWN0aXZhdGUtbWFyay1ob29rIik7Ci0gICAgICAgICAgRnJ1bl9ob29r cyAoMSwgJnRlbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gIC8qIElmIG1hcmsgaGFzIGNlYXNl ZCB0byBiZSBhY3RpdmUsIHJ1biBkZWFjdGl2YXRlIGhvb2suICAqLwotICBlbHNlIGlmICgh IE5JTFAgKHRlbTEpKQotICAgIHsKLSAgICAgIHRlbSA9IGludGVybiAoImRlYWN0aXZhdGUt bWFyay1ob29rIik7Ci0gICAgICBGcnVuX2hvb2tzICgxLCAmdGVtKTsKLSAgICB9Ci0KLSAg LyogSWYgYnVmZmVyIHdhcyB2aXNpYmxlIGluIGEgd2luZG93LCBhbmQgYSBkaWZmZXJlbnQg d2luZG93IHdhcwotICAgICBzZWxlY3RlZCwgYW5kIHRoZSBvbGQgc2VsZWN0ZWQgd2luZG93 IGlzIHN0aWxsIHNob3dpbmcgdGhpcwotICAgICBidWZmZXIsIHJlc3RvcmUgcG9pbnQgaW4g dGhhdCB3aW5kb3cuICAqLwotICB0ZW0gPSBYQ0RSIChpbmZvKTsKLSAgaWYgKHZpc2libGVf cAotICAgICAgJiYgIUVRICh0ZW0sIHNlbGVjdGVkX3dpbmRvdykKLSAgICAgICYmICh0ZW0x ID0gWFdJTkRPVyAodGVtKS0+YnVmZmVyLAotCSAgKC8qIFdpbmRvdyBpcyBsaXZlLi4uICAq LwotCSAgIEJVRkZFUlAgKHRlbTEpCi0JICAgLyogLi4uYW5kIGl0IHNob3dzIHRoZSBjdXJy ZW50IGJ1ZmZlci4gICovCi0JICAgJiYgWEJVRkZFUiAodGVtMSkgPT0gY3VycmVudF9idWZm ZXIpKSkKLSAgICBGc2V0X3dpbmRvd19wb2ludCAodGVtLCBtYWtlX251bWJlciAoUFQpKTsK LQotICBVTkdDUFJPOworICBzdHJ1Y3QgYnVmZmVyICpidWY7CisgIHN0cnVjdCBleGN1cnNp b24gKmV4OworCisgIENIRUNLX0JVRkZFUiAoYnVmZmVyKTsKKyAgYnVmID0gWEJVRkZFUiAo YnVmZmVyKTsKKyAgZXggPSBidWYtPmV4Y3Vyc2lvbnM7CisgIGVhc3NlcnQgKGV4ICE9IE5V TEwpOworCisgIC8qIFJlc3RvcmUgYnVmZmVyIHN0YXRlIG9ubHkgaWYgdGhlIGJ1ZmZlciBp cyBsaXZlLgorICAgICBPdGhlcndpc2UsIGp1c3QgY2FuY2VsIGFuIGV4Y3Vyc2lvbiBzdGF0 ZS4gICovCisgIGlmICghTklMUCAoQlZBUiAoYnVmLCBuYW1lKSkpCisgICAgeworICAgICAg aW50IGFjdGl2ZTsKKyAgICAgIHN0cnVjdCBMaXNwX01hcmtlciAqbTsKKyAgICAgIHB0cmRp ZmZfdCBvbGRtYXJrLCBuZXdtYXJrOworCisgICAgICAvKiBSZXN0b3JlIGN1cnJlbnQgYnVm ZmVyLiAgKi8KKyAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKGJ1Zik7CisKKyAgICAgIC8q IFJlc3RvcmUgYnVmZmVyIHBvc2l0aW9uLiAgKi8KKyAgICAgIHNldF9wb3NpdGlvbiAoJmV4 LT5wb2ludCk7CisgICAgICB1bmNoYWluX21hcmtlciAoJmV4LT5wb2ludCk7CisKKyAgICAg IC8qIFJlc3RvcmUgbWFyayBpZiBpdCB3YXMgbm9uLXplcm8uICAqLworICAgICAgbSA9IFhN QVJLRVIgKEJWQVIgKGJ1ZiwgbWFyaykpOworICAgICAgb2xkbWFyayA9IG0tPmNoYXJwb3M7 CisgICAgICBpZiAoQkVHViA8PSBleC0+bWFyay5jaGFycG9zKQorCWF0dGFjaF9tYXJrZXIg KG0sIGJ1ZiwgZXgtPm1hcmsuY2hhcnBvcywgZXgtPm1hcmsuYnl0ZXBvcyk7CisgICAgICBu ZXdtYXJrID0gZXgtPm1hcmsuY2hhcnBvczsKKyAgICAgIHVuY2hhaW5fbWFya2VyICgmZXgt Pm1hcmspOworCisgICAgICAvKiBJZiBtYXJrIGFuZCByZWdpb24gd2FzIGFjdGl2ZSwgcmVz dG9yZSB0aGVtLiAgKi8KKyAgICAgIGFjdGl2ZSA9ICFOSUxQIChCVkFSIChidWYsIG1hcmtf YWN0aXZlKSk7CisgICAgICBCVkFSIChidWYsIG1hcmtfYWN0aXZlKSA9IGV4LT5hY3RpdmUg PyBRdCA6IFFuaWw7CisKKyAgICAgIC8qIElmIG1hcmsgaXMgYWN0aXZlIG5vdywgYW5kIGVp dGhlciB3YXMgbm90IGFjdGl2ZQorCSBvciB3YXMgYXQgYSBkaWZmZXJlbnQgcGxhY2UsIHJ1 biB0aGUgYWN0aXZhdGUgaG9vay4gICovCisgICAgICBpZiAoZXgtPmFjdGl2ZSAmJiBvbGRt YXJrICE9IG5ld21hcmspCisJeworCSAgTGlzcF9PYmplY3QgdGVtID0gaW50ZXJuICgiYWN0 aXZhdGUtbWFyay1ob29rIik7CisJICBGcnVuX2hvb2tzICgxLCAmdGVtKTsKKwl9CisgICAg ICAvKiBJZiBtYXJrIGhhcyBjZWFzZWQgdG8gYmUgYWN0aXZlLCBydW4gZGVhY3RpdmF0ZSBo b29rLiAgKi8KKyAgICAgIGVsc2UgaWYgKGFjdGl2ZSkKKwl7CisJICBMaXNwX09iamVjdCB0 ZW0gPSBpbnRlcm4gKCJkZWFjdGl2YXRlLW1hcmstaG9vayIpOworCSAgRnJ1bl9ob29rcyAo MSwgJnRlbSk7CisJfQorCisgICAgICAvKiBJZiBidWZmZXIgd2FzIHZpc2libGUgaW4gYSB3 aW5kb3csIGFuZCBhIGRpZmZlcmVudCB3aW5kb3cKKwkgd2FzIHNlbGVjdGVkLCBhbmQgdGhl IG9sZCBzZWxlY3RlZCB3aW5kb3cgaXMgc3RpbGwgc2hvd2luZworCSB0aGlzIGJ1ZmZlciwg cmVzdG9yZSBwb2ludCBpbiB0aGF0IHdpbmRvdy4gICovCisgICAgICBpZiAoZXgtPnZpc2li bGUKKwkgICYmIGV4LT53aW5kb3cgIT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KQorCSAg JiYgRVEgKGV4LT53aW5kb3ctPmJ1ZmZlciwgYnVmZmVyKSkKKwlzZXRfbWFya2VyX3Jlc3Ry aWN0ZWQgKGV4LT53aW5kb3ctPnBvaW50bSwgbWFrZV9udW1iZXIgKFBUKSwgYnVmZmVyKTsK KyAgICB9CisKKyAgYnVmLT5leGN1cnNpb25zID0gZXgtPm5leHQ7CisgIHhmcmVlIChleCk7 CiAgIHJldHVybiBRbmlsOwogfQogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2xpc3AuaCcK LS0tIHNyYy9saXNwLmgJMjAxMi0wNy0yNCAwNjo0NTo0NCArMDAwMAorKysgc3JjL2xpc3Au aAkyMDEyLTA3LTI0IDEwOjU3OjU2ICswMDAwCkBAIC0xMjgzLDYgKzEyODMsMjQgQEAKICAg cHRyZGlmZl90IGJ5dGVwb3M7CiB9OwogCisvKiBVc2VkIHRvIHNldHVwIGJhc2UgZmllbGRz IG9mIGp1c3QgYWxsb2NhdGVkIExpc3BfTWFya2VyLgorICAgRm9yIG90aGVyIG1hcmtlcnMs IGNvbnNpZGVyIHVzaW5nIGF0dGFjaF9tYXJrZXIgaW5zdGVhZC4gICovCisKKyNkZWZpbmUg SU5JVF9NQVJLRVIobWFyaywgYnVmLCBjcG9zLCBicG9zLCBpdHlwZSkgXAorICBkbyB7CQkJ CQkJICBcCisgICAgKG1hcmspLT5idWZmZXIgPSAoYnVmKTsJCQkgIFwKKyAgICAobWFyaykt PmNoYXJwb3MgPSAoY3Bvcyk7CQkJICBcCisgICAgKG1hcmspLT5ieXRlcG9zID0gKGJwb3Mp OwkJCSAgXAorICAgIChtYXJrKS0+aW5zZXJ0aW9uX3R5cGUgPSAoaXR5cGUpOwkJICBcCisg ICAgaWYgKGJ1ZikJCQkJCSAgXAorICAgICAgewkJCQkJCSAgXAorCShtYXJrKS0+bmV4dCA9 IEJVRl9NQVJLRVJTIChidWYpOwkgIFwKKwlCVUZfTUFSS0VSUyAoYnVmKSA9IChtYXJrKTsJ CSAgXAorICAgICAgfQkJCQkJCSAgXAorICAgIGVsc2UJCQkJCSAgXAorICAgICAgKG1hcmsp LT5uZXh0ID0gTlVMTDsJCQkgIFwKKyAgfSB3aGlsZSAoMCkKKwogLyogU1RBUlQgYW5kIEVO RCBhcmUgbWFya2VycyBpbiB0aGUgb3ZlcmxheSdzIGJ1ZmZlciwgYW5kCiAgICBQTElTVCBp cyB0aGUgb3ZlcmxheSdzIHByb3BlcnR5IGxpc3QuICAqLwogc3RydWN0IExpc3BfT3Zlcmxh eQpAQCAtMjg4MCw4ICsyODk4LDEwIEBACiBleHRlcm4gTGlzcF9PYmplY3Qgc2V0X21hcmtl cl9yZXN0cmljdGVkIChMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0KTsK IGV4dGVybiBMaXNwX09iamVjdCBzZXRfbWFya2VyX2JvdGggKExpc3BfT2JqZWN0LCBMaXNw X09iamVjdCwgcHRyZGlmZl90LCBwdHJkaWZmX3QpOwogZXh0ZXJuIExpc3BfT2JqZWN0IHNl dF9tYXJrZXJfcmVzdHJpY3RlZF9ib3RoIChMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZf dCwgcHRyZGlmZl90KTsKKwkJCQkJICAgICAgIHB0cmRpZmZfdCwgcHRyZGlmZl90KTsKIGV4 dGVybiBMaXNwX09iamVjdCBidWlsZF9tYXJrZXIgKHN0cnVjdCBidWZmZXIgKiwgcHRyZGlm Zl90LCBwdHJkaWZmX3QpOworZXh0ZXJuIHZvaWQgYXR0YWNoX21hcmtlciAoc3RydWN0IExp c3BfTWFya2VyICosIHN0cnVjdCBidWZmZXIgKiwKKwkJCSAgIHB0cmRpZmZfdCwgcHRyZGlm Zl90KTsKIGV4dGVybiB2b2lkIHN5bXNfb2ZfbWFya2VyICh2b2lkKTsKIAogLyogRGVmaW5l ZCBpbiBmaWxlaW8uYyAqLwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9tYXJrZXIuYycKLS0t IHNyYy9tYXJrZXIuYwkyMDEyLTA3LTIyIDA1OjM3OjI0ICswMDAwCisrKyBzcmMvbWFya2Vy LmMJMjAxMi0wNy0yNCAxMDowMTowOSArMDAwMApAQCAtNDI3LDcgKzQyNyw3IEBACiAKIC8q IENoYW5nZSBNIHNvIGl0IHBvaW50cyB0byBCIGF0IENIQVJQT1MgYW5kIEJZVEVQT1MuICAq LwogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3ZvaWQKIGF0dGFjaF9tYXJrZXIgKHN0cnVjdCBM aXNwX01hcmtlciAqbSwgc3RydWN0IGJ1ZmZlciAqYiwKIAkgICAgICAgcHRyZGlmZl90IGNo YXJwb3MsIHB0cmRpZmZfdCBieXRlcG9zKQogewoK --------------010008020302040006030000--