From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Adam Tack Newsgroups: gmane.emacs.bugs Subject: bug#13399: 24.3.50; Word-wrap can't wrap at zero-width space U-200B Date: Sat, 9 Dec 2017 03:50:05 +0000 Message-ID: References: <50EE7BE5.2060806@gmx.at> <83609hw7pm.fsf@gnu.org> <83r2s5ugnd.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="001a114433ea68d23e055fe032f4" X-Trace: blaine.gmane.org 1512791474 25262 195.159.176.226 (9 Dec 2017 03:51:14 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 9 Dec 2017 03:51:14 +0000 (UTC) Cc: 13399@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Dec 09 04:51:10 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eNWAP-0006SS-W9 for geb-bug-gnu-emacs@m.gmane.org; Sat, 09 Dec 2017 04:51:10 +0100 Original-Received: from localhost ([::1]:39945 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eNWAU-00053E-5p for geb-bug-gnu-emacs@m.gmane.org; Fri, 08 Dec 2017 22:51:14 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:57359) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eNWAM-000539-3H for bug-gnu-emacs@gnu.org; Fri, 08 Dec 2017 22:51:07 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eNWAI-0000Mx-UF for bug-gnu-emacs@gnu.org; Fri, 08 Dec 2017 22:51:06 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:44374) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eNWAI-0000MC-OU for bug-gnu-emacs@gnu.org; Fri, 08 Dec 2017 22:51:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1eNWAI-0007gb-EJ for bug-gnu-emacs@gnu.org; Fri, 08 Dec 2017 22:51:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Adam Tack Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 09 Dec 2017 03:51:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 13399 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 13399-submit@debbugs.gnu.org id=B13399.151279141529489 (code B ref 13399); Sat, 09 Dec 2017 03:51:02 +0000 Original-Received: (at 13399) by debbugs.gnu.org; 9 Dec 2017 03:50:15 +0000 Original-Received: from localhost ([127.0.0.1]:53055 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eNW9X-0007fZ-0I for submit@debbugs.gnu.org; Fri, 08 Dec 2017 22:50:15 -0500 Original-Received: from mail-wm0-f52.google.com ([74.125.82.52]:42172) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eNW9U-0007fJ-DO for 13399@debbugs.gnu.org; Fri, 08 Dec 2017 22:50:12 -0500 Original-Received: by mail-wm0-f52.google.com with SMTP id b199so2270322wme.1 for <13399@debbugs.gnu.org>; Fri, 08 Dec 2017 19:50:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=JmcVX1CB8cbP/h7WgHG4LWlC3UkrV5LOU5m7bMktvJE=; b=an7R+wzn9UO0mL95s+Aqs5rXPVejqwT3uJm3wmrBnsdJcdUuDSyH55YoO7JIzqKAEZ fxp/G0PbUkNjanfSipVnNMNtPUAr/5Iq/zazKh9hblkGyPcZfd4bCX58hwMQymyVU344 GobSMMW6WVnRwXvZcdGU2RHX32WMzOXL0sAdx7wBwPpIxWkYR945cEsoq+U4VaLUjGsH UOQ5zypTg5x5dH7MgvWX5ClZZ6ODaogLYduZbH43b2LQOO7NI/b4kAtr6NOkRW/G5IN6 KdLEk9QCfE0oJhKZAdkS587OylotDydg3Hp8i3AwY1qGGlUfLG+As0KEVo1bX6Q/ZPdV j0wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=JmcVX1CB8cbP/h7WgHG4LWlC3UkrV5LOU5m7bMktvJE=; b=f+c9CAJhHCi6XD8IMclm1cgT4BPOEgt+e4SJ9pp5cgHKI9biIAF5+imybFgOy3nXN9 xlzq1b3Q4cby7hhR+Tf8Qry2ibFIIaE83xIgHlQWB45uNxIRLsBXnKS+nVmiZ37Gmkp+ B1hJvO29CBnvFWy1bTu+4W2HusHYfkNmdVM0DexIltq2CWa+OCWz+CjcVkC4+mrqkBC8 0yaBotZYn4bH3M7STmbci5OBGKQgwInY1NrafnLJ3l5HLRzJprKzwxJgj0Yv8aFVXB9J jBifYb3768erX1ruwv4tcVCS9X9Ay78ppMhj1FE91KuwM99Vr0hgRce2lpydZhwwFLSZ nzTQ== X-Gm-Message-State: AKGB3mKxO+rTvB8k2YxJJOQYRSaxwCEJMcfsIwwhq+rbtw75ca7HJ2c8 W6EsjKANt5Y+b8aY61sA/jXV+WZACnCH2q4Be2E= X-Google-Smtp-Source: AGs4zMZGmLKBXCe96fwYMuiN5D88qKWeGq75yI1PorHHDv68IkehcZkLn8FCvI4gEAsNg6vy2ek75fS2WPSI65+obL8= X-Received: by 10.28.13.145 with SMTP id 139mr5580721wmn.24.1512791406581; Fri, 08 Dec 2017 19:50:06 -0800 (PST) Original-Received: by 10.28.52.145 with HTTP; Fri, 8 Dec 2017 19:50:05 -0800 (PST) In-Reply-To: <83r2s5ugnd.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.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" Xref: news.gmane.org gmane.emacs.bugs:140843 Archived-At: --001a114433ea68d23e055fe032f4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the very fast replies and the suggestions! > I think this is okay, but maybe the macro could be converted into an > inline function, and then fetching the character from the various > objects separated from looking up the char-table for that character? I've made the conversion =E2=80=94 it's now slightly less messy. Regarding the separation, I think that the most that can be done is to have the look-up in a separate function. Regrettably, trying to first obtain the character, for example via a set of if-else clauses, and then looking it up, which would be cleaner, can't really work since the cases (in particular the first and fourth) are not disjunct. > Well, since it's a char-table, users will probably want to control > which characters cause word-wrap. One idea would be to have a minor > mode or some such, providing users an ability to include or exclude > different groups of related whitespace characters as a whole? This > could be in follow-up patches, though. Customisability was the idea. :) I'm not sure how best to expose it in a reasonably user-friendly way, though. For the time being, allowing control directly via the char-table might suffice. > We could also look at LineBreak.txt in the Unicode database for > inspiration and ideas. The three main customisation options that I'm considering are: i) Unicode whitespace (U+2000 - U+200B), ii) vim's breakat characters (default " ^I!@*-+;:,./?"), since presumably they had given it some thought, iii) The characters in LineBreak.txt (parsing the file shouldn't be hard, if there aren't copyright issues). > But I do think that the default should be only TAB and SPC, as Emacs > always did, and the rest should be optional, and probably in Lisp, not > C. > And also a couple of tests (the ones you used would be a good start). These would presumably have to be in tests/manual since the position of the word-wrap depends on too many variables (width of window, font type, font size)? > I will send the forms off-list, thanks. Thanks! > One other thought: since TAB and SPC are single-byte characters, > whereas the other "whitespace" characters are not, supporting the > non-ASCII whitespace will be associated with some performance hit in > the display engine, because it requires a char-table look up and > fetching multibyte characters. So perhaps we should allow the > word-wrap-chars char-table to be nil (and make that the default), and > in that case support only TAB and SPC as word-wrap characters. This > would let the default configuration work as fast is it does now, > imposing the performance penalty only on those who want to support > more whitespace characters. > WDYT? That seems sensible. The old behaviour will now be the default and look-up using the char-table only enabled with the global minor mode `word-wrap-char-table-mode' (suggestions for a catchier name very welcome). For the time being, its definition is in a new file `lisp/word-wrap.el'. Also temporarily, for ease of testing, it allows wrapping on the unicode whitespace characters. The current iteration is attached. Until they've found a proper home, the slightly updated tests are below. (require 'word-wrap) (with-current-buffer (get-buffer-create "*bar*") (dotimes (i 1000) (insert "1234")) ; U-200B (setq word-wrap t) (setq whitespace-display-mappings '((space-mark 32 [183] [46]) (space-mark 160 [164] [95]) (space-mark 8203 [164] [95]) (newline-mark 10 [36 10]) (tab-mark 9 [187 9] [92 9]))) (whitespace-mode) (word-wrap-char-table-mode) (display-buffer "*bar*")) (with-current-buffer (get-buffer-create "*foo*") (dotimes (i 1000) (insert "1234")) ; U-200B (setq word-wrap t) (word-wrap-char-table-mode) (display-buffer "*foo*")) --001a114433ea68d23e055fe032f4 Content-Type: text/plain; charset="US-ASCII"; name="word_wrap_char_table.diff" Content-Disposition: attachment; filename="word_wrap_char_table.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jaysjybf0 ZGlmZiAtLWdpdCBhL2xpc3Avd29yZC13cmFwLmVsIGIvbGlzcC93b3JkLXdyYXAuZWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1OWE4MwotLS0gL2Rldi9udWxsCisrKyBi L2xpc3Avd29yZC13cmFwLmVsCkBAIC0wLDAgKzEsMjEgQEAKKyhkZWZpbmUtbWlub3ItbW9kZSB3 b3JkLXdyYXAtY2hhci10YWJsZS1tb2RlCisgICJUb2dnbGUgd3JhcHBpbmcgdXNpbmcgYSBsb29r LXVwIHRvIHdvcmQtd3JhcC1jaGFycywgZ2xvYmFsbHkuCisKK0N1cnJlbnRseSwgdGhpcyBhbGxv d3Mgd29yZCB3cmFwcGluZyBvbiB0aGUgY2hhcmFjdGVycyBVKzIwMDAgdG8KK1UrMjAwQiBpbiBh ZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvZiBzcGFjZSBhbmQgdGFwLCB3aGVuCitgd29yZC13cmFw JyBpcyBzZXQgdG8gdC4KKworKFByb3Zpc2lvbmFsIGFuZCB1bnN0YWJsZS4pCisiCisgIDpnbG9i YWwgdAorICA6bGlnaHRlciAidXdzICIKKyAgKGlmIHdvcmQtd3JhcC1jaGFyLXRhYmxlLW1vZGUK KyAgICAgIChwcm9nbiAoc2V0cSB3b3JkLXdyYXAtY2hhcnMgKG1ha2UtY2hhci10YWJsZSBuaWwg bmlsKSkKKyAgICAgICAgICAgICAoc2V0LWNoYXItdGFibGUtcmFuZ2Ugd29yZC13cmFwLWNoYXJz IDkgdCkKKyAgICAgICAgICAgICAoc2V0LWNoYXItdGFibGUtcmFuZ2Ugd29yZC13cmFwLWNoYXJz IDMyIHQpCisgICAgICAgICAgICAgKHNldC1jaGFyLXRhYmxlLXJhbmdlIHdvcmQtd3JhcC1jaGFy cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKDgxOTIgLiA4MjAzKSB0KSkK KyAgICAoc2V0cSB3b3JkLXdyYXAtY2hhcnMgbmlsKSkpCisKKyhwcm92aWRlICd3b3JkLXdyYXAp CisKZGlmZiAtLWdpdCBhL3NyYy9jaGFyYWN0ZXIuYyBiL3NyYy9jaGFyYWN0ZXIuYwppbmRleCBj OGZmYTJiLi5hZjg5YThiIDEwMDY0NAotLS0gYS9zcmMvY2hhcmFjdGVyLmMKKysrIGIvc3JjL2No YXJhY3Rlci5jCkBAIC0xMTQ1LDQgKzExNDUsMTAgQEAgQWxsIFVuaWNvZGUgY2hhcmFjdGVycyBo YXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcyAoc3ltYm9sKToKIFNlZSBUaGUgVW5pY29k ZSBTdGFuZGFyZCBmb3IgdGhlIG1lYW5pbmcgb2YgdGhvc2UgdmFsdWVzLiAgKi8pOwogICAvKiBU aGUgY29ycmVjdCBjaGFyLXRhYmxlIGlzIHNldHVwIGluIGNoYXJhY3RlcnMuZWwuICAqLwogICBW dW5pY29kZV9jYXRlZ29yeV90YWJsZSA9IFFuaWw7CisKKyAgREVGVkFSX0xJU1AgKCJ3b3JkLXdy YXAtY2hhcnMiLCBWd29yZF93cmFwX2NoYXJzLAorCSAgICAgICBkb2M6IC8qIEEgY2hhci10YWJs ZSBmb3IgY2hhcmFjdGVycyBhdCB3aGljaCB3b3JkLXdyYXAgb2NjdXJzLgorU3VjaCBjaGFyYWN0 ZXJzIGhhdmUgdmFsdWUgdCBpbiB0aGlzIHRhYmxlLgorVGhpcyBpcyBzZXQgdXAgaW4gLi4uICov KTsKKyAgVndvcmRfd3JhcF9jaGFycyA9IFFuaWw7CiB9CmRpZmYgLS1naXQgYS9zcmMveGRpc3Au YyBiL3NyYy94ZGlzcC5jCmluZGV4IDdlNDdjMDYuLjRlOGIwNDUgMTAwNjQ0Ci0tLSBhL3NyYy94 ZGlzcC5jCisrKyBiL3NyYy94ZGlzcC5jCkBAIC0zNDgsMjAgKzM0OCw0MSBAQCBzdGF0aWMgTGlz cF9PYmplY3QgbGlzdF9vZl9lcnJvcjsKICNlbmRpZiAvKiBIQVZFX1dJTkRPV19TWVNURU0gKi8K IAogLyogVGVzdCBpZiB0aGUgZGlzcGxheSBlbGVtZW50IGxvYWRlZCBpbiBJVCwgb3IgdGhlIHVu ZGVybHlpbmcgYnVmZmVyCi0gICBvciBzdHJpbmcgY2hhcmFjdGVyLCBpcyBhIHNwYWNlIG9yIGEg VEFCIGNoYXJhY3Rlci4gIFRoaXMgaXMgdXNlZAotICAgdG8gZGV0ZXJtaW5lIHdoZXJlIHdvcmQg d3JhcHBpbmcgY2FuIG9jY3VyLiAgKi8KLQotI2RlZmluZSBJVF9ESVNQTEFZSU5HX1dISVRFU1BB Q0UoaXQpCQkJCQlcCi0gICgoaXQtPndoYXQgPT0gSVRfQ0hBUkFDVEVSICYmIChpdC0+YyA9PSAn ICcgfHwgaXQtPmMgPT0gJ1x0JykpCVwKLSAgIHx8ICgoU1RSSU5HUCAoaXQtPnN0cmluZykJCQkJ CQlcCi0JJiYgKFNSRUYgKGl0LT5zdHJpbmcsIElUX1NUUklOR19CWVRFUE9TICgqaXQpKSA9PSAn ICcJCVwKLQkgICAgfHwgU1JFRiAoaXQtPnN0cmluZywgSVRfU1RSSU5HX0JZVEVQT1MgKCppdCkp ID09ICdcdCcpKQlcCi0gICAgICAgfHwgKGl0LT5zCQkJCQkJCVwKLQkgICAmJiAoaXQtPnNbSVRf QllURVBPUyAoKml0KV0gPT0gJyAnCQkJCVwKLQkgICAgICAgfHwgaXQtPnNbSVRfQllURVBPUyAo Kml0KV0gPT0gJ1x0JykpCQkJXAotICAgICAgIHx8IChJVF9CWVRFUE9TICgqaXQpIDwgWlZfQllU RQkJCQkJXAotCSAgICYmICgqQllURV9QT1NfQUREUiAoSVRfQllURVBPUyAoKml0KSkgPT0gJyAn CQkJXAotCSAgICAgICB8fCAqQllURV9QT1NfQUREUiAoSVRfQllURVBPUyAoKml0KSkgPT0gJ1x0 JykpKSkJCVwKKyAgIG9yIHN0cmluZyBjaGFyYWN0ZXIsIGlzIGEgc3BhY2Ugb3IgdGFiIChieSBk ZWZhdWx0LCB0byBhdm9pZCB0aGUKKyAgIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIGhpdCBvZiBj aGFyLXRhYmxlIGxvb2t1cCkuICBJZgorICAgd29yZC13cmFwLWNoYXJzIGlzIGEgY2hhci10YWJs ZSwgdGhlbiBpbnN0ZWFkIGNoZWNrIGlmIHRoZSByZWxldmFudAorICAgZWxlbWVudCBvciBjaGFy YWN0ZXIgYmVsb25ncyB0byB0aGUgY2hhci10YWJsZS4gIFRoaXMgaXMgdXNlZCB0bworICAgZGV0 ZXJtaW5lIHdoZXJlIHdvcmQgd3JhcHBpbmcgY2FuIG9jY3VyLiAgKi8KKworc3RhdGljIGlubGlu ZSBib29sCitjaGFyX2lzX3doaXRlc3BhY2VfcCAoaW50IGMpIHsKKyAgcmV0dXJuICFOSUxQIChD SEFSX1RBQkxFX1JFRiAoVndvcmRfd3JhcF9jaGFycywgYykpOworfQorCitzdGF0aWMgaW5saW5l IGJvb2wKK2l0X2Rpc3BsYXlpbmdfd2hpdGVzcGFjZSAoc3RydWN0IGl0ICppdCkgeworICBpZiAo IUNIQVJfVEFCTEVfUCAoVndvcmRfd3JhcF9jaGFycykpIHsKKyAgICByZXR1cm4gKChpdC0+d2hh dCA9PSBJVF9DSEFSQUNURVIgJiYgKGl0LT5jID09ICcgJyB8fCBpdC0+YyA9PSAnXHQnKSkKKwkg ICAgfHwgKChTVFJJTkdQIChpdC0+c3RyaW5nKQorCQkgJiYgKFNSRUYgKGl0LT5zdHJpbmcsIElU X1NUUklOR19CWVRFUE9TICgqaXQpKSA9PSAnICcKKwkJICAgICB8fCBTUkVGIChpdC0+c3RyaW5n LCBJVF9TVFJJTkdfQllURVBPUyAoKml0KSkgPT0gJ1x0JykpCisJCXx8IChpdC0+cworCQkgICAg JiYgKGl0LT5zW0lUX0JZVEVQT1MgKCppdCldID09ICcgJworCQkJfHwgaXQtPnNbSVRfQllURVBP UyAoKml0KV0gPT0gJ1x0JykpCisJCXx8IChJVF9CWVRFUE9TICgqaXQpIDwgWlZfQllURQorCQkg ICAgJiYgKCpCWVRFX1BPU19BRERSIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnICcKKwkJCXx8ICpC WVRFX1BPU19BRERSIChJVF9CWVRFUE9TICgqaXQpKSA9PSAnXHQnKSkpKTsKKyAgfSBlbHNlIHsK KyAgICByZXR1cm4gKChpdC0+d2hhdCA9PSBJVF9DSEFSQUNURVIgJiYgY2hhcl9pc193aGl0ZXNw YWNlX3AgKGl0LT5jKSkKKwkgICAgfHwgKFNUUklOR1AgKGl0LT5zdHJpbmcpICYmIGNoYXJfaXNf d2hpdGVzcGFjZV9wCisJCShTVFJJTkdfQ0hBUgorCQkgKFNEQVRBIChpdC0+c3RyaW5nKSArIElU X1NUUklOR19CWVRFUE9TICgqaXQpKSkpCisJICAgIHx8IChpdC0+cyAmJiBjaGFyX2lzX3doaXRl c3BhY2VfcAorCQkoU1RSSU5HX0NIQVIoaXQtPnMgKyBJVF9CWVRFUE9TICgqaXQpKSkpCisJICAg IHx8IChJVF9CWVRFUE9TICgqaXQpIDwgWlZfQllURSAmJiBjaGFyX2lzX3doaXRlc3BhY2VfcAor CQkoRkVUQ0hfQ0hBUiAoSVRfQllURVBPUyAoKml0KSkpKSk7CisgIH0KK30KIAogLyogVHJ1ZSBt ZWFucyBwcmludCBuZXdsaW5lIHRvIHN0ZG91dCBiZWZvcmUgbmV4dCBtaW5pLWJ1ZmZlciBtZXNz YWdlLiAgKi8KIApAQCAtODc4NSw3ICs4ODA2LDcgQEAgbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmVf dG8gKHN0cnVjdCBpdCAqaXQsCiAJewogCSAgaWYgKGl0LT5saW5lX3dyYXAgPT0gV09SRF9XUkFQ ICYmIGl0LT5hcmVhID09IFRFWFRfQVJFQSkKIAkgICAgewotCSAgICAgIGlmIChJVF9ESVNQTEFZ SU5HX1dISVRFU1BBQ0UgKGl0KSkKKwkgICAgICBpZiAoaXRfZGlzcGxheWluZ193aGl0ZXNwYWNl IChpdCkpCiAJCW1heV93cmFwID0gdHJ1ZTsKIAkgICAgICBlbHNlIGlmIChtYXlfd3JhcCkKIAkJ ewpAQCAtODk1MCw3ICs4OTcxLDcgQEAgbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmVfdG8gKHN0cnVj dCBpdCAqaXQsCiAJCQkJICBTQVZFX0lUICh0ZW1faXQsICppdCwgdGVtX2RhdGEpOwogCQkJCSAg c2V0X2l0ZXJhdG9yX3RvX25leHQgKGl0LCB0cnVlKTsKIAkJCQkgIGlmIChnZXRfbmV4dF9kaXNw bGF5X2VsZW1lbnQgKGl0KQotCQkJCSAgICAgICYmIElUX0RJU1BMQVlJTkdfV0hJVEVTUEFDRSAo aXQpKQorCQkJCSAgICAgICYmIGl0X2Rpc3BsYXlpbmdfd2hpdGVzcGFjZSAoaXQpKQogCQkJCSAg ICBjYW5fd3JhcCA9IGZhbHNlOwogCQkJCSAgUkVTVE9SRV9JVCAoaXQsICZ0ZW1faXQsIHRlbV9k YXRhKTsKIAkJCQl9CkBAIC05MDQxLDcgKzkwNjIsNyBAQCBtb3ZlX2l0X2luX2Rpc3BsYXlfbGlu ZV90byAoc3RydWN0IGl0ICppdCwKIAkJCSB3cmFwcGVkIGluIHRoZSBtaWRkbGUgb2Ygd2hpdGVz cGFjZS4KIAkJCSBUaGVyZWZvcmUsIHdyYXBfaXQgX2lzXyByZWxldmFudCBpbiB0aGF0CiAJCQkg Y2FzZS4gICovCi0JCSAgICAgICYmICEobW92ZWRfZm9yd2FyZCAmJiBJVF9ESVNQTEFZSU5HX1dI SVRFU1BBQ0UgKGl0KSkpCisJCSAgICAgICYmICEobW92ZWRfZm9yd2FyZCAmJiBpdF9kaXNwbGF5 aW5nX3doaXRlc3BhY2UgKGl0KSkpCiAJCSAgICB7CiAJCSAgICAgIC8qIElmIHdlJ3ZlIGZvdW5k IFRPX1gsIGdvIGJhY2sgdGhlcmUsIGFzIHdlIG5vdwogCQkJIGtub3cgdGhlIGxhc3Qgd29yZCBm aXRzIG9uIHRoaXMgc2NyZWVuIGxpbmUuICAqLwpAQCAtMjE0MjcsNyArMjE0NDgsNyBAQCBkaXNw bGF5X2xpbmUgKHN0cnVjdCBpdCAqaXQsIGludCBjdXJzb3JfdnBvcykKIAogCSAgaWYgKGl0LT5s aW5lX3dyYXAgPT0gV09SRF9XUkFQICYmIGl0LT5hcmVhID09IFRFWFRfQVJFQSkKIAkgICAgewot CSAgICAgIGlmIChJVF9ESVNQTEFZSU5HX1dISVRFU1BBQ0UgKGl0KSkKKwkgICAgICBpZiAoaXRf ZGlzcGxheWluZ193aGl0ZXNwYWNlIChpdCkpCiAJCW1heV93cmFwID0gdHJ1ZTsKIAkgICAgICBl bHNlIGlmIChtYXlfd3JhcCkKIAkJewpAQCAtMjE1NzEsNyArMjE1OTIsNyBAQCBkaXNwbGF5X2xp bmUgKHN0cnVjdCBpdCAqaXQsIGludCBjdXJzb3JfdnBvcykKIAkJCQkgd2FzIGEgc3BhY2Ugb3Ig dGFiIEFORCAoaWkpIHRoZQogCQkJCSBjdXJyZW50IGNoYXJhY3RlciBpcyBub3QuICAqLwogCQkJ ICAgICAgJiYgKCFtYXlfd3JhcAotCQkJCSAgfHwgSVRfRElTUExBWUlOR19XSElURVNQQUNFIChp dCkpKQorCQkJCSAgfHwgaXRfZGlzcGxheWluZ193aGl0ZXNwYWNlIChpdCkpKQogCQkJICAgIGdv dG8gYmFja190b193cmFwOwogCiAJCQkgIC8qIFJlY29yZCB0aGUgbWF4aW11bSBhbmQgbWluaW11 bSBidWZmZXIKQEAgLTIxNjA1LDcgKzIxNjI2LDcgQEAgZGlzcGxheV9saW5lIChzdHJ1Y3QgaXQg Kml0LCBpbnQgY3Vyc29yX3Zwb3MpCiAJCQkJCSAgd2FzIGEgc3BhY2Ugb3IgdGFiIEFORCAoaWkp IHRoZQogCQkJCQkgIGN1cnJlbnQgY2hhcmFjdGVyIGlzIG5vdC4gICovCiAJCQkJICAgICAgICYm ICghbWF5X3dyYXAKLQkJCQkJICAgfHwgSVRfRElTUExBWUlOR19XSElURVNQQUNFIChpdCkpKQor CQkJCQkgICB8fCBpdF9kaXNwbGF5aW5nX3doaXRlc3BhY2UgKGl0KSkpCiAJCQkJZ290byBiYWNr X3RvX3dyYXA7CiAKIAkJCSAgICB9Cg== --001a114433ea68d23e055fe032f4--