From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 5310 invoked from network); 16 Sep 2023 22:21:19 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 16 Sep 2023 22:21:19 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1694902879; b=gsvlD6Mjws2tOgLxhDyzX782bDVnap25ZBxclWdmTqRPaIkI2hd0RtfNzTRReLWhTlcKtSt8EN lGviDxPs62EEEUEdFl9+XRzB/Keob28ETDQOXUKQEbFX2cXzNEqWqbtt2Td0n47yAgm3Mg8TLI S5K6+mijxk2myl/cDBotp55eL1i6pILNjJP3r5A6Iue7/nbpTMsHSnNQrgF6XBXCChcYk6XRQC yoJhu78hzYSUnDSectaDNmV3H6y6Dg4v6cBPN4U/+IeXEm6FCCVpHNxFmcnXS0r3ABmvDE6pBq bd+BOEPPjPJ9xyhIC2vWWq83X7jrPpmLShA3xCjCLHWDKw==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-wr1-f49.google.com) smtp.remote-ip=209.85.221.49; dkim=pass header.d=brasslantern-com.20230601.gappssmtp.com header.s=20230601 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1694902879; bh=6E869+8xEpG2zBlMNk3X3QYkSphYYL2VwaJs08Y8Ugs=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:MIME-Version: DKIM-Signature:DKIM-Signature; b=U2FW1S48y4SKohNwDlMQIe6MZjV6vyBNXoyrrzblVRhcLgvSAexi5Pe4HUk+1GI0i3AOyWanCG cPXjDTbvyL50gfE/Hgv7D4HfcP4ZK1MY4Lz/bcd2GwJxpGglKoAOp/JfiMzmvW+TZ3MoT9urG9 u+RFhTKMNh+x1EDgF6A3OuibZSJ4FvPeJtPuk1RqxnDnhZ2kxe+KZM1SFYUJktGgpI/MIm2YiA zanIghUKalBGVPKRbhSGtFmH90C6hFUhmASwH+B7eLzvDx5zORJrT2wi9l2bdNQoQ1V+YBkjDz GOlpYCelH+zlJOp+wnERAi1fqdZ4h72VA0yfPu4l2xaX1w==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:To:Subject:Message-ID: Date:From:MIME-Version:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=ok3H3BHSvGMLfMKiGAPHcHy5EsggCN+tgPVmcI0SOo4=; b=bW+3rERFBbQ2Q+tFOCbxHM05ex JxWs3YIfC/lgl/g1/B2p/dw0sK6jBBNJHbZfd+oeFzIPBi+cBZKDJBWvhGTYxqjtNESi9GBc/s8LB GJbGvD2yKSKlxADKIy3UkJXPqpqMObPU2kmxdXb3MuwKUKiSktE+U6gGHSlKuuv1qTeWDhDHi6XWJ UDmFuczmnF1u/ohP1T9rtutPJF8aKwdgiZ9vJTC5dFstW4OsW1PcX4IwX9lb/bW7i8zE28mLdXZ8o EurPBPkEI8UmLaJyUmWex2tcFdzvpKYJvT/V6PQg6eGhsW224+0Q3jiTeFwebmfoSl9xn149LKU87 dkBQq6lw==; Received: by zero.zsh.org with local id 1qhdfC-000Fnj-6K; Sat, 16 Sep 2023 22:21:18 +0000 Authentication-Results: zsh.org; iprev=pass (mail-wr1-f49.google.com) smtp.remote-ip=209.85.221.49; dkim=pass header.d=brasslantern-com.20230601.gappssmtp.com header.s=20230601 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none Received: from mail-wr1-f49.google.com ([209.85.221.49]:44330) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1qhdec-000FUZ-7N; Sat, 16 Sep 2023 22:20:43 +0000 Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-31c65820134so2881090f8f.1 for ; Sat, 16 Sep 2023 15:20:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20230601.gappssmtp.com; s=20230601; t=1694902841; x=1695507641; darn=zsh.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=ok3H3BHSvGMLfMKiGAPHcHy5EsggCN+tgPVmcI0SOo4=; b=Bqlsn1ArDsd27k6vLcVJIJ4oAxRsxnThbDPrZ6iiU5WXm859RpEoT7MHt10w+eeuVU t1NnDoevuLKzUZtH2t+BULpYAIff1ujD37ioyQgjJlx7o9BpTAHB09eA1tHxFi/sN6rQ 6CDMinaR2hKUzIkqruhcuONmn70DQTue0QWoP6t+Zo+GDyieGmCtB3xgAl3MrXDVkASc QGhrVRE1RuorE3nd0UM+R2lXXNqdl5C8M8JFpClO2oF2eyr7lFaZRnhIAgMNMMNXKCw2 KEhy+g1zdspcDxHESteoqbTOqCrh+TFZriKd/dI2FIIfsfqqu6EMDrFwWgzjkb+3/Anv +eCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694902841; x=1695507641; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ok3H3BHSvGMLfMKiGAPHcHy5EsggCN+tgPVmcI0SOo4=; b=MqK7JutD+S7zd9qBJP2QNDhbVEYj5+1lBxBrMJQWzG1J2z3QyOvKUyfik+aMJKBzX5 q4iR+aVur6LtaM0S+5iMhVTWNeIWvkCGLp4NTkl5TvhK7YQcrvmyuu9U80qtvmjneYfy slxFxcuH8+CbMmCkDgBb7ybSJQQWFksPu9fFTlnopxng91OXOBYubuuEinsuuAgcqnpW Ba+ZiWUTakEL/lNTKdDe7AS6YIDubLbv3U4TaJkRf1j1VgZK2t0YpIPOt4n9Fu8RS1w3 jKKG60BJw/l5gsQrl7X8pNFIO19nf+1NXmgC08ZbCNYn39wSPsHqnOAXUFkhv1k3syy+ I5BA== X-Gm-Message-State: AOJu0YxhTPXUdMF6psgf/nHl+WQ5LR4tO45164uc/TRB82uPqkqtnzZQ ZIbo0u/uAt1McwCEezi20rGlDqY4M0aWkY6gCeH3Mru7uxT0Clg2 X-Google-Smtp-Source: AGHT+IGHYW+KLRTb7U5a2cd7qECYUiUabawYqI7RrBZMN4aRoCE6BxD5Onm2jPOQjqLpol5MCxeVNkltXfc60AK7dmE= X-Received: by 2002:adf:f5cc:0:b0:317:6ef1:7939 with SMTP id k12-20020adff5cc000000b003176ef17939mr4676865wrp.23.1694902841122; Sat, 16 Sep 2023 15:20:41 -0700 (PDT) MIME-Version: 1.0 From: Bart Schaefer Date: Sat, 16 Sep 2023 15:20:30 -0700 Message-ID: Subject: [PATCH 1/2] Consolidated nofork substitution changes To: Zsh hackers list Content-Type: multipart/mixed; boundary="000000000000c687df0605815195" X-Seq: 52154 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: --000000000000c687df0605815195 Content-Type: text/plain; charset="UTF-8" Because I've fixed some additional bugs and added new tests and rebased on recent master branch, I'm reposting the entire nofork (mksh ${|...} and ksh ${ ... }) substitution diffs rather than do another incremental patch. To make the individual patches a more reasonable size, I've split the C code and doc from the tests. These diffs now rely on the change to input.c posted in workers/52153 to properly handle trailing newlines in the output captured by ${ ... }. --000000000000c687df0605815195 Content-Type: text/plain; charset="US-ASCII"; name="nofork-all-code.txt" Content-Disposition: attachment; filename="nofork-all-code.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lmmlcmy40 ZGlmZiAtLWdpdCBhL0RvYy9ac2gvZXhwbi55byBiL0RvYy9ac2gvZXhwbi55bwppbmRleCBmODc4 MzJlNzUuLjViZTQwYmYyNSAxMDA2NDQKLS0tIGEvRG9jL1pzaC9leHBuLnlvCisrKyBiL0RvYy9a c2gvZXhwbi55bwpAQCAtMTg4MSwyMyArMTg4MSw1NSBAQCBzZWN0KENvbW1hbmQgU3Vic3RpdHV0 aW9uKQogY2luZGV4KGNvbW1hbmQgc3Vic3RpdHV0aW9uKQogY2luZGV4KHN1YnN0aXR1dGlvbiwg Y29tbWFuZCkKIEEgY29tbWFuZCBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcyBwcmVjZWRlZCBieSBh IGRvbGxhciBzaWduLCBsaWtlCi1gdHQoJExQQVIoKSkuLi50dChSUEFSKCkpJywgb3IgcXVvdGVk IHdpdGggZ3JhdmUKLWFjY2VudHMsIGxpa2UgYHR0KGApLi4udHQoYCknLCBpcyByZXBsYWNlZCB3 aXRoIGl0cyBzdGFuZGFyZCBvdXRwdXQsIHdpdGgKLWFueSB0cmFpbGluZyBuZXdsaW5lcyBkZWxl dGVkLgotSWYgdGhlIHN1YnN0aXR1dGlvbiBpcyBub3QgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3Rl cywgdGhlCi1vdXRwdXQgaXMgYnJva2VuIGludG8gd29yZHMgdXNpbmcgdGhlIHR0KElGUykgcGFy YW1ldGVyLgorYHR0KCRMUEFSKCkpLi4udHQoUlBBUigpKScsIG9yIHF1b3RlZCB3aXRoIGdyYXZl IGFjY2VudHMsIGxpa2UKK2B0dChgKS4uLnR0KGApJywgaXMgZXhlY3V0ZWQgaW4gYSBzdWJzaGVs bCBhbmQgcmVwbGFjZWQgYnkgaXRzCitzdGFuZGFyZCBvdXRwdXQsIHdpdGggYW55IHRyYWlsaW5n IG5ld2xpbmVzIGRlbGV0ZWQuICBJZiB0aGUKK3N1YnN0aXR1dGlvbiBpcyBub3QgZW5jbG9zZWQg aW4gZG91YmxlIHF1b3RlcywgdGhlIG91dHB1dCBpcyBicm9rZW4KK2ludG8gd29yZHMgdXNpbmcg dGhlIHR0KElGUykgcGFyYW1ldGVyLgogdmluZGV4KElGUywgdXNlIG9mKQogCiBUaGUgc3Vic3Rp dHV0aW9uIGB0dCgkTFBBUigpY2F0KSB2YXIoZm9vKXR0KFJQQVIoKSknIG1heSBiZSByZXBsYWNl ZAogYnkgdGhlIGZhc3RlciBgdHQoJExQQVIoKTwpdmFyKGZvbyl0dChSUEFSKCkpJy4gIEluIHRo aXMgY2FzZSB2YXIoZm9vKQogdW5kZXJnb2VzIHNpbmdsZSB3b3JkIHNoZWxsIGV4cGFuc2lvbnMg KGVtKHBhcmFtZXRlciBleHBhbnNpb24pLAogZW0oY29tbWFuZCBzdWJzdGl0dXRpb24pIGFuZCBl bShhcml0aG1ldGljIGV4cGFuc2lvbikpLCBidXQgbm90Ci1maWxlbmFtZSBnZW5lcmF0aW9uLgor ZmlsZW5hbWUgZ2VuZXJhdGlvbi4gIE5vIHN1YnNoZWxsIGlzIGNyZWF0ZWQuCiAKIElmIHRoZSBv cHRpb24gdHQoR0xPQl9TVUJTVCkgaXMgc2V0LCB0aGUgcmVzdWx0IG9mIGFueSB1bnF1b3RlZCBj b21tYW5kCiBzdWJzdGl0dXRpb24sIGluY2x1ZGluZyB0aGUgc3BlY2lhbCBmb3JtIGp1c3QgbWVu dGlvbmVkLCBpcyBlbGlnaWJsZSBmb3IKIGZpbGVuYW1lIGdlbmVyYXRpb24uCiAKK0EgY29tbWFu ZCB3aXRoIGEgbGVhZGluZyBwaXBlIGNoYXJhY3RlciwgZW5jbG9zZWQgaW4gYnJhY2VzIHByZWZp eGVkIGJ5CithIGRvbGxhciBzaWduLCBhcyBpbiBgdHQoJHt8KS4uLnR0KH0pJywgaXMgZXhlY3V0 ZWQgaW4gdGhlIGN1cnJlbnQgc2hlbGwKK2NvbnRleHQsIHJhdGhlciB0aGFuIGluIGEgc3Vic2hl bGwsIGFuZCBpcyByZXBsYWNlZCBieSB0aGUgdmFsdWUgb2YgdGhlCitwYXJhbWV0ZXIgdHQoUkVQ TFkpIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQuICBUaGVyZSBlbShtdXN0IG5vdCkgYmUKK2Fu eSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIG9wZW5pbmcgYnJhY2UgYW5kIHRoZSBwaXBlIGNoYXJh Y3Rlci4gIEFueQorcHJpb3IgdmFsdWUgb2YgdHQoJFJFUExZKSBpcyBzYXZlZCBhbmQgcmVzdG9y ZWQgYXJvdW5kIHRoaXMgc3Vic3RpdHV0aW9uLAoraW4gdGhlIG1hbm5lciBvZiBhIGZ1bmN0aW9u IGxvY2FsIHBhcmFtZXRlci4gIE90aGVyIHBhcmFtZXRlcnMgZGVjbGFyZWQKK3dpdGhpbiB0aGUg c3Vic3RpdHV0aW9uIGFsc28gYmVoYXZlIGFzIGxvY2FscywgYXMgaWYgaW4gYSBmdW5jdGlvbiwK K3VubGVzcyBgdHQodHlwZXNldCAtZyknIGlzIHVzZWQuICBUcmFpbGluZyBuZXdsaW5lcyBhcmUg ZW0obm90KSBkZWxldGVkCitmcm9tIHRoZSBmaW5hbCByZXBsYWNlbWVudCBpbiB0aGlzIGNhc2Us IGFuZCBpdCBpcyBzdWJqZWN0IHRvIGZpbGVuYW1lCitnZW5lcmF0aW9uIGluIHRoZSBzYW1lIHdh eSBhcyBgdHQoJExQQVIoKSkuLi50dChSUEFSKCkpJyBidXQgaXMgZW0obm90KQorc3BsaXQgb24g dHQoSUZTKSB1bmxlc3MgdGhlIHR0KFNIX1dPUkRfU1BMSVQpIG9wdGlvbiBpcyBzZXQuCisKK1N1 YnN0aXR1dGlvbnMgb2YgdGhlIGZvcm0gYHR0KCR7fCl2YXIocGFyYW0pdHQofCkuLi50dCh9KScg YXJlIHNpbWlsYXIsCitleGNlcHQgdGhhdCB0aGUgc3Vic3RpdHV0aW9uIGlzIHJlcGxhY2VkIGJ5 IHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyCituYW1lZCBieSB2YXIocGFyYW0pLiAgTm8gaW1w bGljaXQgc2F2ZSBvciByZXN0b3JlIGFwcGxpZXMgdG8gdmFyKHBhcmFtKQorZXhjZXB0IGFzIG5v dGVkIGZvciB0dChSRVBMWSksIGFuZCB2YXIocGFyYW0pIHNob3VsZCBlbShub3QpIGJlIGRlY2xh cmVkCit3aXRoaW4gdGhlIGNvbW1hbmQuICBJZiB2YXIocGFyYW0pIG5hbWVzIGFuIGFycmF5LCBh cnJheSBleHBhbnNpb24gcnVsZXMKK2FwcGx5LgorCitBIGNvbW1hbmQgZW5jbG9zZWQgaW4gYnJh Y2VzIHByZWNlZGVkIGJ5IGEgZG9sbGFyIHNpZ24sIGFuZCBzZXQgb2ZmIGZyb20KK3RoZSBicmFj ZXMgYnkgd2hpdGVzcGFjZSwgbGlrZSBgdHQoJHsgKS4uLnR0KCB9KScsIGlzIHJlcGxhY2VkIGJ5 IGl0cworc3RhbmRhcmQgb3V0cHV0LiAgTGlrZSBgdHQoJHt8KS4uLnR0KH0pJyBhbmQgdW5saWtl CitgdHQoJExQQVIoKSkuLi50dChSUEFSKCkpJywgdGhlIGNvbW1hbmQgZXhlY3V0ZXMgaW4gdGhl IGN1cnJlbnQgc2hlbGwKK2NvbnRleHQgd2l0aCBmdW5jdGlvbiBsb2NhbCBiZWhhdmlvcnMgYW5k IGRvZXMgbm90IGNyZWF0ZSBhIHN1YnNoZWxsLgorCitOb3RlIHRoYXQgYmVjYXVzZSB0aGUgYHR0 KCR7fCkuLi50dCh9KScgYW5kIGB0dCgkeyApLi4udHQoIH0pJyBmb3JtcworbXVzdCBiZSBwYXJz ZWQgYXQgb25jZSBhcyBib3RoIHN0cmluZyB0b2tlbnMgYW5kIGNvbW1hbmRzLCBhbGwgb3RoZXIK K2JyYWNlcyAoYHR0KHspJyBvciBgdHQofSknKSB3aXRoaW4gdGhlIGNvbW1hbmQgZWl0aGVyIG11 c3QgYmUgcXVvdGVkLAorb3IgbXVzdCBhcHBlYXIgaW4gc3ludGFjdGljYWxseSB2YWxpZCBwYWly cywgc3VjaCBhcyBhcm91bmQgY29tcGxleAorY29tbWFuZHMsIGZ1bmN0aW9uIGJvZGllcywgb3Ig cGFyYW1ldGVyIHJlZmVyZW5jZXMuCisKIHRleGlub2RlKEFyaXRobWV0aWMgRXhwYW5zaW9uKShC cmFjZSBFeHBhbnNpb24pKENvbW1hbmQgU3Vic3RpdHV0aW9uKShFeHBhbnNpb24pCiBzZWN0KEFy aXRobWV0aWMgRXhwYW5zaW9uKQogY2luZGV4KGFyaXRobWV0aWMgZXhwYW5zaW9uKQpkaWZmIC0t Z2l0IGEvU3JjL2xleC5jIGIvU3JjL2xleC5jCmluZGV4IDJmNzkzNzQxMC4uMzNiMTdjYzk1IDEw MDY0NAotLS0gYS9TcmMvbGV4LmMKKysrIGIvU3JjL2xleC5jCkBAIC05MzcsNyArOTM3LDcgQEAg c3RhdGljIGVudW0gbGV4dG9rCiBnZXR0b2tzdHIoaW50IGMsIGludCBzdWIpCiB7CiAgICAgaW50 IGJjdCA9IDAsIHBjdCA9IDAsIGJyY3QgPSAwLCBzZWVuX2JyY3QgPSAwLCBmZHBhciA9IDA7Ci0g ICAgaW50IGludHBvcyA9IDEsIGluX2JyYWNlX3BhcmFtID0gMDsKKyAgICBpbnQgaW50cG9zID0g MSwgaW5fYnJhY2VfcGFyYW0gPSAwLCBjbWRzdWJzdCA9IDA7CiAgICAgaW50IGlucXVvdGUsIHVu bWF0Y2hlZCA9IDA7CiAgICAgZW51bSBsZXh0b2sgcGVlazsKICNpZmRlZiBERUJVRwpAQCAtMTEz NSw3ICsxMTM1LDcgQEAgZ2V0dG9rc3RyKGludCBjLCBpbnQgc3ViKQogCSAgICBjID0gSW5wYXI7 CiAJICAgIGJyZWFrOwogCWNhc2UgTFgyX0lOQlJBQ0U6Ci0JICAgIGlmIChpc3NldChJR05PUkVC UkFDRVMpIHx8IHN1YikKKwkgICAgaWYgKChpc3NldChJR05PUkVCUkFDRVMpICYmICFjbWRzdWJz dCkgfHwgc3ViKQogCQljID0gJ3snOwogCSAgICBlbHNlIHsKIAkJaWYgKCFsZXhidWYubGVuICYm IGluY21kcG9zKSB7CkBAIC0xMTU3LDggKzExNTcsMTEgQEAgZ2V0dG9rc3RyKGludCBjLCBpbnQg c3ViKQogCSAgICBpZiAoaW5fYnJhY2VfcGFyYW0pIHsKIAkJY21kcG9wKCk7CiAJICAgIH0KLQkg ICAgaWYgKGJjdC0tID09IGluX2JyYWNlX3BhcmFtKQotCQlpbl9icmFjZV9wYXJhbSA9IDA7CisJ ICAgIGlmIChiY3QtLSA9PSBpbl9icmFjZV9wYXJhbSkgeworCQlpZiAoY21kc3Vic3QpCisJCSAg ICBjbWRwb3AoKTsKKwkJaW5fYnJhY2VfcGFyYW0gPSBjbWRzdWJzdCA9IDA7CisJICAgIH0KIAkg ICAgYyA9IE91dGJyYWNlOwogCSAgICBicmVhazsKIAljYXNlIExYMl9DT01NQToKQEAgLTE0MDUs MTYgKzE0MDgsMjQgQEAgZ2V0dG9rc3RyKGludCBjLCBpbnQgc3ViKQogICAgICAgIH0KICAgICAg ICBhZGQoYyk7CiAgICAgICAgYyA9IGhnZXRjKCk7Ci0JaWYgKGludHBvcykKKyAgICAgICBpZiAo aW50cG9zKQogCSAgICBpbnRwb3MtLTsKLQlpZiAobGV4c3RvcCkKKyAgICAgICBpZiAobGV4c3Rv cCkKIAkgICAgYnJlYWs7CisgICAgICAgaWYgKCFjbWRzdWJzdCAmJiBpbl9icmFjZV9wYXJhbSAm JiBhY3QgPT0gTFgyX1NUUklORyAmJgorCSAgIChjID09ICd8JyB8fCBjID09IEJhciB8fCBpbmJs YW5rKGMpKSkgeworCSAgIGNtZHN1YnN0ID0gaW5fYnJhY2VfcGFyYW07CisJICAgY21kcHVzaChD U19DVVJTSCk7CisgICAgICAgfQogICAgIH0KICAgYnJrOgogICAgIGlmIChlcnJmbGFnKSB7CiAJ aWYgKGluX2JyYWNlX3BhcmFtKSB7Ci0JICAgIHdoaWxlKGJjdC0tID49IGluX2JyYWNlX3BhcmFt KQorCSAgICB3aGlsZShiY3QgPj0gaW5fYnJhY2VfcGFyYW0pIHsKKwkJaWYgKGJjdC0tID09IGNt ZHN1YnN0KQorCQkgICAgY21kcG9wKCk7CiAJCWNtZHBvcCgpOworCSAgICB9CiAJfQogCXJldHVy biBMRVhFUlI7CiAgICAgfQpAQCAtMTQyMiw4ICsxNDMzLDExIEBAIGdldHRva3N0cihpbnQgYywg aW50IHN1YikKICAgICBpZiAodW5tYXRjaGVkICYmICEobGV4ZmxhZ3MgJiBMRVhGTEFHU19BQ1RJ VkUpKQogCXplcnIoInVubWF0Y2hlZCAlYyIsIHVubWF0Y2hlZCk7CiAgICAgaWYgKGluX2JyYWNl X3BhcmFtKSB7Ci0Jd2hpbGUoYmN0LS0gPj0gaW5fYnJhY2VfcGFyYW0pCisJd2hpbGUoYmN0ID49 IGluX2JyYWNlX3BhcmFtKSB7CisJICAgIGlmIChiY3QtLSA9PSBjbWRzdWJzdCkKKwkJY21kcG9w KCk7CiAJICAgIGNtZHBvcCgpOworCX0KIAl6ZXJyKCJjbG9zaW5nIGJyYWNlIGV4cGVjdGVkIik7 CiAgICAgfSBlbHNlIGlmICh1bnNldChJR05PUkVCUkFDRVMpICYmICFzdWIgJiYgbGV4YnVmLmxl biA+IDEgJiYKIAkgICAgICAgcGVlayA9PSBTVFJJTkcgJiYgbGV4YnVmLnB0clstMV0gPT0gJ30n ICYmCkBAIC0xNDU5LDggKzE0NzMsOCBAQCBnZXR0b2tzdHIoaW50IGMsIGludCBzdWIpCiBzdGF0 aWMgaW50CiBkcXVvdGVfcGFyc2UoY2hhciBlbmRjaGFyLCBpbnQgc3ViKQogewotICAgIGludCBw Y3QgPSAwLCBicmN0ID0gMCwgYmN0ID0gMCwgaW50aWNrID0gMCwgZXJyID0gMDsKLSAgICBpbnQg YzsKKyAgICBpbnQgcGN0ID0gMCwgYnJjdCA9IDAsIGJjdCA9IDAsIGludGljayA9IDAsIGVyciA9 IDAsIGNtZHN1YnN0ID0gMDsKKyAgICBpbnQgYywgYnNraXAgPSAwOwogICAgIGludCBtYXRoID0g ZW5kY2hhciA9PSAnKScgfHwgZW5kY2hhciA9PSAnXScgfHwgaW5mb3I7CiAgICAgaW50IHpsZW1h dGggPSBtYXRoICYmIHpsZW1ldGFjcyA+IHpsZW1ldGFsbCArIGFkZGVkeCAtIGluYnVmY3Q7CiAK QEAgLTE1MjksMTEgKzE1NDMsMjUgQEAgZHF1b3RlX3BhcnNlKGNoYXIgZW5kY2hhciwgaW50IHN1 YikKIAkJYyA9IFFzdHJpbmc7CiAJICAgIH0KIAkgICAgYnJlYWs7CisJY2FzZSAneyc6CisJICAg IGlmIChjbWRzdWJzdCAmJiAhaW50aWNrKSB7CisJCS8qIEluIG5vZm9yayBzdWJzdGl0dXRpb24s IHRva2VuaXplIGFzIGlmIHVucXVvdGVkICovCisJCWMgPSBJbmJyYWNlOworCQlic2tpcCsrOwor CSAgICB9CisJICAgIGJyZWFrOwogCWNhc2UgJ30nOgogCSAgICBpZiAoaW50aWNrIHx8ICFiY3Qp CiAJCWJyZWFrOwogCSAgICBjID0gT3V0YnJhY2U7Ci0JICAgIGJjdC0tOworCSAgICBpZiAoYnNr aXApIHsKKwkJYnNraXAtLTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKGJjdC0tID09IGNt ZHN1YnN0KSB7CisJCWNtZHN1YnN0ID0gMDsKKwkJY21kcG9wKCk7CisJICAgIH0KIAkgICAgY21k cG9wKCk7CiAJICAgIGJyZWFrOwogCWNhc2UgJ2AnOgpAQCAtMTU4OCwxNCArMTYxNiwzNCBAQCBk cXVvdGVfcGFyc2UoY2hhciBlbmRjaGFyLCBpbnQgc3ViKQogCWlmIChlcnIgfHwgbGV4c3RvcCkK IAkgICAgYnJlYWs7CiAJYWRkKGMpOworCWlmICghY21kc3Vic3QgJiYgYyA9PSBJbmJyYWNlKSB7 CisJICAgIC8qIENoZWNrIGZvciAke3wuLi59IG5vZm9yayBjb21tYW5kIHN1YnN0aXR1dGlvbiAq LworCSAgICBpZiAoKGMgPSBoZ2V0YygpKSAmJiAhbGV4c3RvcCkgeworCQlpZiAoYyA9PSAnfCcg fHwgaW5ibGFuayhjKSkgeworCQkgICAgY21kc3Vic3QgPSBiY3Q7CisJCSAgICBjbWRwdXNoKENT X0NVUlNIKTsKKwkJfQorCQlodW5nZXRjKGMpOworCSAgICB9CisJfQogICAgIH0KICAgICBpZiAo aW50aWNrID09IDIpCiAJQUxMT1dISVNUCiAgICAgaWYgKGludGljaykgewogCWNtZHBvcCgpOwog ICAgIH0KLSAgICB3aGlsZSAoYmN0LS0pCisgICAgd2hpbGUgKGJjdCkgeworCWlmIChiY3QtLSA9 PSBjbWRzdWJzdCkgeworCSAgICAvKgorCSAgICAgKiBZb3Ugd291bGQgdGhpbmsgdGhpcyBpcyBh biBlcnJvciwgYnV0IGlmIHdlIGNhbGwgaXQgb25lLAorCSAgICAgKiBwYXJzZXN0cm5vZXJyKCkg cmV0dXJucyBub256ZXJvIHRvIHN1YnN0X3BhcnNlX3N0cigpIGFuZAorCSAgICAgKiBzdWJzZXF1 ZW50bHkgImJhZCBzdWJzdGl0dXRpb24iIGlzIG5vdCByZXBvcnRlZAorCSAgICAgKi8KKwkgICAg LyogZXJyID0gMSAqLworCSAgICBjbWRwb3AoKTsKKwl9CiAJY21kcG9wKCk7CisgICAgfQogICAg IGlmIChsZXhzdG9wKQogCWVyciA9IGludGljayB8fCBlbmRjaGFyIHx8IGVycjsKICAgICBlbHNl IGlmIChlcnIgPT0gMSkgewpkaWZmIC0tZ2l0IGEvU3JjL3N1YnN0LmMgYi9TcmMvc3Vic3QuYwpp bmRleCBkNjgxNTkyMjcuLjUyYWZkNjQ4NCAxMDA2NDQKLS0tIGEvU3JjL3N1YnN0LmMKKysrIGIv U3JjL3N1YnN0LmMKQEAgLTE4NjcsNiArMTg2NywxMCBAQCBwYXJhbXN1YnN0KExpbmtMaXN0IGws IExpbmtOb2RlIG4sIGNoYXIgKipzdHIsIGludCBxdCwgaW50IHBmX2ZsYWdzLAogICAgICAqIGpv aW5pbmcgdGhlIGFycmF5IGludG8gYSBzdHJpbmcgKGZvciBjb21wYXRpYmlsaXR5IHdpdGgga3No L2Jhc2gpLgogICAgICAqLwogICAgIGludCBxdW90ZWRfYXJyYXlfd2l0aF9vZmZzZXQgPSAwOwor ICAgIC8qIEluZGljYXRlcyAke3wuLi47fSAqLworICAgIGNoYXIgKnJwbHl2YXIgPSBOVUxMOwor ICAgIC8qIEluZGljYXRlcyAkeyAuLi4gO30gKi8KKyAgICBjaGFyICpycGx5dG1wID0gTlVMTDsK IAogICAgICpzKysgPSAnXDAnOwogICAgIC8qCkBAIC0xODk0LDggKzE4OTgsMTQ3IEBAIHBhcmFt c3Vic3QoTGlua0xpc3QgbCwgTGlua05vZGUgbiwgY2hhciAqKnN0ciwgaW50IHF0LCBpbnQgcGZf ZmxhZ3MsCiAgICAgICogZmxhZ3MgaW4gcGFyZW50aGVzZXMsIGJ1dCBhbHNvIG9uZSBrc2ggaGFj ay4KICAgICAgKi8KICAgICBpZiAoYyA9PSBJbmJyYWNlKSB7CisJLyogVGhlIGNvbW1hbmQgc3Ry aW5nIHRvIGJlIHJ1biBieSAke3wuLi47fSAqLworCWNoYXIgKmNtZGFyZyA9IE5VTEw7CisJc2l6 ZV90IHNsZW4gPSAwOwogCWluYnJhY2UgPSAxOwogCXMrKzsKKworICAgICAgICAvKiBTaG9ydC1w YXRoIGZvciB0aGUgbm9mb3JrIGNvbW1hbmQgc3Vic3RpdHV0aW9uICR7fGNtZDt9CisJICogU2Vl IG90aGVyIGNvbW1lbnRzIGFib3V0IGtsdWRnZXMgZm9yIHdoeSB0aGlzIGlzIGhlcmUuCisJICoK KyAgICAgICAgICogVGhlIGNvbW1hbmQgc3RyaW5nIGlzIGV4dHJhY3RlZCBhbmQgZXhlY3V0ZWQs IGFuZCB0aGUKKyAgICAgICAgICogc3Vic3RpdHV0aW9uIGFzc2lnbmVkLiBUaGVyZSdzIG5vICgu Li4pLWZsYWdzIHByb2Nlc3NpbmcsCisgICAgICAgICAqIGkuZS4gbm8gJHt8KFUpY21kO30sIGJl Y2F1c2UgaXQgbG9va3MgcXVpdGUgYXdmdWwgYW5kCisgICAgICAgICAqIHNob3VsZCBub3QgYmUg cGFydCBvZiBjb21tYW5kIHN1YnN0aXR1dGlvbiBpbiBhbnkgY2FzZS4KKyAgICAgICAgICogVXNl ICR7KFUpJHt8Y21kO319IGFzIHlvdSB3b3VsZCBmb3IgJHsoVSkkKGNtZDspfS4KKwkgKi8KKwlp ZiAoKnMgPT0gJ3wnIHx8ICpzID09IEJhciB8fCBpbmJsYW5rKCpzKSkgeworCSAgICBjaGFyICpv dXRicmFjZXAgPSBzOworCSAgICBjaGFyIHNhdiA9ICpzOworCSAgICAqcyA9IEluYnJhY2U7CisJ ICAgIGlmIChza2lwcGFyZW5zKEluYnJhY2UsIE91dGJyYWNlLCAmb3V0YnJhY2VwKSA9PSAwKSB7 CisJCXNsZW4gPSBvdXRicmFjZXAgLSBzIC0gMTsKKwkJaWYgKCgqcyA9IHNhdikgIT0gQmFyKSB7 CisJCSAgICBzYXYgPSAqb3V0YnJhY2VwOworCQkgICAgKm91dGJyYWNlcCA9ICdcMCc7CisJCSAg ICB0b2tlbml6ZShzKTsKKwkJICAgICpvdXRicmFjZXAgPSBzYXY7CisJCX0KKwkgICAgfQorCX0K KwlpZiAoc2xlbiA+IDEpIHsKKwkgICAgY2hhciAqb3V0YnJhY2VwID0gcyArIHNsZW47CisJICAg IGlmICgqb3V0YnJhY2VwID09IE91dGJyYWNlKSB7CisJCWlmICgocnBseXZhciA9IGl0eXBlX2Vu ZChzKzEsIElOQU1FU1BDLCAwKSkpIHsKKwkJICAgIGlmICgqcnBseXZhciA9PSBJbmJyYWNrICYm CisJCQkocnBseXZhciA9IHBhcnNlX3N1YnNjcmlwdCgrK3JwbHl2YXIsIDEsICddJykpKQorCQkJ KytycGx5dmFyOworCQl9CisJCWlmIChycGx5dmFyID09IHMrMSAmJiAqcnBseXZhciA9PSBCYXIp IHsKKwkJICAgIC8qIElzICR7fHwuLi59IGEgc3VidGl0dXRpb24gZXJyb3Igb3IgYSBzeW50YXgg ZXJyb3I/CisJCSAgICB6ZXJyKCJiYWQgc3Vic3RpdHV0aW9uIik7CisJCSAgICByZXR1cm4gTlVM TDsKKwkJICAgICovCisJCSAgICBycGx5dmFyID0gTlVMTDsKKwkJfQorCQlpZiAocnBseXZhciAm JiAqcnBseXZhciA9PSBCYXIpIHsKKwkJICAgIGNtZGFyZyA9IGR1cHN0cnBmeChycGx5dmFyKzEs IG91dGJyYWNlcC1ycGx5dmFyLTEpOworCQkgICAgcnBseXZhciA9IGR1cHN0cnBmeChzKzEscnBs eXZhci1zLTEpOworCQl9IGVsc2UgeworCQkgICAgY21kYXJnID0gZHVwc3RycGZ4KHMrMSwgb3V0 YnJhY2VwLXMtMSk7CisJCSAgICBycGx5dmFyID0gIlJFUExZIjsKKwkJfQorCQlpZiAoaW5ibGFu aygqcykpIHsKKwkJICAgIC8qCisJCSAgICAgKiBBZG1pdHRlZGx5IGEgaGFjay4gIFRha2UgYWR2 YW50YWdlIG9mIHRoZSBlbmZvcmNlZAorCQkgICAgICogbG9jYWxpdHkgb2YgUkVQTFkgYW5kIHRo ZSBzZW1hbnRpY3Mgb2YgJCg8ZmlsZSkgdG8KKwkJICAgICAqIGNvbnN0cnVjdCBhIGNvbW1hbmQg dG8gd3JpdGUvcmVhZCBhIHRlbXBvcmFyeSBmaWxlLgorCQkgICAgICogVGhlbiBmYWxsIHRocm91 Z2ggdG8gdGhlIHJlZ3VsYXIgaGFuZGxpbmcgb2YgJFJFUExZCisJCSAgICAgKiB0byBtYW5hZ2Ug d29yZCBzcGxpdHRpbmcsIGV4cGFuc2lvbiBmbGFncywgZXRjLgorCQkgICAgICovCisJCSAgICBj aGFyICpvdXRmbXQgPSAiPnwgJXMgeyAlcyA7fSI7CS8qIDEzICovCisJCSAgICBpZiAoKHJwbHl0 bXAgPSBnZXR0ZW1wbmFtZShOVUxMLCAxKSkpIHsKKwkJCS8qIFByZXZlbnQgc2hlbmFuaWdhbnMg d2l0aCAkVE1QUFJFRklYICovCisJCQljaGFyICp0bXBmaWxlID0gcXVvdGVzdHJpbmcocnBseXRt cCwgUVRfQkFDS1NMQVNIKTsKKwkJCWNoYXIgKmR1bW15ID0gemhhbGxvYyhzdHJsZW4oY21kYXJn KSArCisJCQkJCSAgICAgIHN0cmxlbih0bXBmaWxlKSArCisJCQkJCSAgICAgIDEzKTsKKwkJCXNw cmludGYoZHVtbXksIG91dGZtdCwgdG1wZmlsZSwgY21kYXJnKTsKKwkJCWNtZGFyZyA9IGR1bW15 OworCQkgICAgfSBlbHNlIHsKKwkJCS8qIFRNUFBSRUZJWCBub3Qgd3JpdGFibGU/ICovCisJCQlj bWRvdXR2YWwgPSBsYXN0dmFsOworCQkJY21kYXJnID0gTlVMTDsKKwkJICAgIH0KKwkJfQorCQlz ID0gb3V0YnJhY2VwOworCSAgICB9CisJfQorCisJaWYgKHJwbHl2YXIpIHsKKwkgICAgUGFyYW0g cG07CisJICAgIC8qIGNoYXIgKnJwbHl2YWwgPSBnZXRzcGFyYW0oIlJFUExZIik7ICovCisJICAg IHN0YXJ0cGFyYW1zY29wZSgpOyAvKiAibG9jYWwiIGJlaGF2ZXMgYXMgaWYgaW4gYSBmdW5jdGlv biAqLworCSAgICBwbSA9IGNyZWF0ZXBhcmFtKCJSRVBMWSIsIFBNX0xPQ0FMfFBNX1VOU0VUKTsK KwkgICAgaWYgKHBtKQkvKiBTaG91bGRuJ3QgY3JlYXRlcGFyYW0oKSBkbyB0aGlzPyAqLworCQlw bS0+bGV2ZWwgPSBsb2NhbGxldmVsOworCSAgICAvKiBpZiAocnBseXZhbCkgc2V0c3BhcmFtKCJS RVBMWSIsIHp0cmR1cChycGx5dmFsKSk7ICovCisJfQorCisJaWYgKHJwbHl2YXIgJiYgY21kYXJn ICYmICpjbWRhcmcpIHsKKwkgICAgaW50IG9icmVha3MgPSBicmVha3M7CisJICAgIEVwcm9nIGNt ZHByb2c7CisJICAgIC8qIEV4ZWN1dGUgdGhlIHNoZWxsIGNvbW1hbmQgKi8KKwkgICAgdW50b2tl bml6ZShjbWRhcmcpOworCSAgICBjbWRwcm9nID0gcGFyc2Vfc3RyaW5nKGNtZGFyZywgMCk7CisJ ICAgIGlmIChjbWRwcm9nKSB7CisJCWV4ZWNvZGUoY21kcHJvZywgMSwgMCwgImNtZHN1YnN0Iik7 CisJCWNtZG91dHZhbCA9IGxhc3R2YWw7CisJCS8qICJyZXR1cm4iIGJlaGF2ZXMgYXMgaWYgaW4g YSBmdW5jdGlvbiAqLworCQlpZiAocmV0ZmxhZykgeworCQkgICAgcmV0ZmxhZyA9IDA7CisJCSAg ICBicmVha3MgPSBvYnJlYWtzOwkvKiBJcyB0aGlzIGV2ZXIgbm90IHplcm8/ICovCisJCX0KKwkg ICAgfSBlbHNlCS8qIHBhcnNlIGVycm9yICovCisJCWVycmZsYWcgfD0gRVJSRkxBR19FUlJPUjsK KwkgICAgaWYgKHJwbHl0bXAgJiYgIWVycmZsYWcpIHsKKwkJaW50IG9ub2VycnMgPSBub2VycnM7 CisJCW5vZXJycyA9IDI7CisJCWlmICgoY21kYXJnID0genR1ZmYocnBseXRtcCkpKQorCQkgICAg c2V0c3BhcmFtKCJSRVBMWSIsIGNtZGFyZyk7CisJCW5vZXJycyA9IG9ub2VycnM7CisJICAgIH0K Kwl9CisKKwlpZiAocnBseXRtcCkKKwkgICAgdW5saW5rKHJwbHl0bXApOworCWlmIChycGx5dmFy KSB7CisJICAgIGlmIChzdHJjbXAocnBseXZhciwgIlJFUExZIikgPT0gMCkgeworCQlpZiAoKHZh bCA9IGR1cHN0cmluZyhnZXRzcGFyYW0oIlJFUExZIikpKSkKKwkJICAgIHZ1bnNldCA9IDA7CisJ CWVsc2UgeworCQkgICAgdnVuc2V0ID0gMTsKKwkJICAgIHZhbCA9IGR1cHN0cmluZygiIik7CisJ CX0KKwkgICAgfSBlbHNlIHsKKwkJcyA9IGR5bmNhdChycGx5dmFyLCBzKTsKKwkJcnBseXZhciA9 IE5VTEw7CisJICAgIH0KKwkgICAgZW5kcGFyYW1zY29wZSgpOworCSAgICBpZiAoZXhpdF9wZW5k aW5nKSB7CisJCWlmIChteXBpZCA9PSBnZXRwaWQoKSkgeworCQkgICAgLyoKKwkJICAgICAqIHBh cmFub2lhOiBkb24ndCBjaGVjayBmb3Igam9icywgYnV0IHRoZXJlCisJCSAgICAgKiBzaG91bGRu J3QgYmUgYW55IGlmIG5vdCBpbnRlcmFjdGl2ZS4KKwkJICAgICAqLworCQkgICAgc3RvcG1zZyA9 IDE7CisJCSAgICB6ZXhpdChleGl0X3ZhbCwgWkVYSVRfTk9STUFMKTsKKwkJfSBlbHNlCisJCSAg ICBfZXhpdChleGl0X3ZhbCk7CisJICAgIH0KKwl9CisKIAkvKgogCSAqIEluIGtzaCBlbXVsYXRp b24gYSBsZWFkaW5nIGAhJyBpcyBhIHNwZWNpYWwgZmxhZyB3b3JraW5nCiAJICogc29ydCBvZiBs aWtlIG91ciAoaykuICBUaGlzIGlzIHRydWUgb25seSBmb3IgYXJyYXlzIG9yCkBAIC0yNTkwLDE0 ICsyNzMzLDE0IEBAIHBhcmFtc3Vic3QoTGlua0xpc3QgbCwgTGlua05vZGUgbiwgY2hhciAqKnN0 ciwgaW50IHF0LCBpbnQgcGZfZmxhZ3MsCiAJICogd2UgbGV0IGZldGNodmFsdWUgc2V0IHRoZSBt YWluIHN0cmluZyBwb2ludGVyIHMgdG8KIAkgKiB0aGUgZW5kIG9mIHRoZSBiaXQgaXQncyBmZXRj aGVkLgogCSAqLwotCWlmICghKHYgPSBmZXRjaHZhbHVlKCZ2YnVmLCAoc3ViZXhwID8gJm92IDog JnMpLAotCQkJICAgICAod2FudHQgPyAtMSA6Ci0JCQkgICAgICAoKHVuc2V0KEtTSEFSUkFZUykg fHwgaW5icmFjZSkgPyAxIDogLTEpKSwKLQkJCSAgICAgc2NhbmZsYWdzKSkgfHwKLQkgICAgKHYt PnBtICYmICh2LT5wbS0+bm9kZS5mbGFncyAmIFBNX1VOU0VUKSkgfHwKLQkgICAgKHYtPmZsYWdz ICYgVkFMRkxBR19FTVBUWSkpCisJaWYgKCFycGx5dmFyICYmCisJICAgICghKHYgPSBmZXRjaHZh bHVlKCZ2YnVmLCAoc3ViZXhwID8gJm92IDogJnMpLAorCQkJICAgICAgKHdhbnR0ID8gLTEgOgor CQkJICAgICAgICgodW5zZXQoS1NIQVJSQVlTKSB8fCBpbmJyYWNlKSA/IDEgOiAtMSkpLAorCQkJ ICAgICAgc2NhbmZsYWdzKSkgfHwKKwkgICAgICh2LT5wbSAmJiAodi0+cG0tPm5vZGUuZmxhZ3Mg JiBQTV9VTlNFVCkpIHx8CisJICAgICAodi0+ZmxhZ3MgJiBWQUxGTEFHX0VNUFRZKSkpCiAJICAg IHZ1bnNldCA9IDE7Ci0KIAlpZiAod2FudHQpIHsKIAkgICAgLyoKIAkgICAgICogSGFuZGxlIHRo ZSAodCkgZmxhZzogdmFsdWUgbm93IGJlY29tZXMgdGhlIHR5cGUK --000000000000c687df0605815195--