From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18303 invoked by alias); 25 Mar 2018 22:23:15 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 42533 Received: (qmail 17927 invoked by uid 1010); 25 Mar 2018 22:23:15 -0000 X-Qmail-Scanner-Diagnostics: from kahlil.inlv.org by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(37.59.109.123):SA:0(-1.9/5.0):. Processed in 2.210244 secs); 25 Mar 2018 22:23:15 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_RP_MATCHES_RCVD autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: martijn@inlv.org X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | To: Zsh hackers list From: Martijn Dekker Subject: [PATCH] move zsh reserved words out of the way when invoked in sh/ksh emulation Message-ID: <02c529b7-2247-2f42-ef32-0f9cac29a641@inlv.org> Date: Mon, 26 Mar 2018 00:23:07 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050FB7BFB06C8AE7C53176AF" Content-Language: en-GB --------------050FB7BFB06C8AE7C53176AF Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit In zsh-workers 27648 and 27650 (commit 8ac97f33, back in 2010), the "repeat" reserved word was disabled when zsh starts in any emulation mode, to avoid interfering with sh scripts when zsh is invoked as sh. (Note that this change disabled the (t)csh-style 'repeat' loop even if zsh is invoked as csh. It seems unlikely that was intended.) Meanwhile, I've identified five other reserved words that are unique to zsh *and* are perfectly plausible function names, so could kill an sh or ksh/bash script: end float foreach integer nocorrect So I think they (and 'repeat') should be disabled if zsh is invoked in sh or ksh emulation mode. 'float' and 'integer' are part of the typeset family, so the underlying builtins would be exposed. It would then be inconsistent not to do the same with the rest of the typeset family: declare export local readonly typeset Thankfully, the KSH_TYPESET option still works. It should revert to being automatically enabled for ksh emulation and not for sh emulation, as in zsh up to 5.0.8. Treating the whole typeset family as builtins subject to KSH_TYPESET actually increases the accuracy of sh and ksh emulation modes. One issue is that POSIX explicitly specifies 'export' and 'readonly' as special builtins and not as reserved words. So POSIX scripts should be able to override them at least with an alias.[*] This breaks if they are reserved words. For the incomplete csh emulation mode (does anyone actually use this?) it's probably not worth bothering to disable anything, so instead of testing for !EMULATION(EMULATE_ZSH) we should test for EMULATION(EMULATE_SH) || EMULATION(EMULATE_KSH). This restores 'repeat' when zsh is invoked as csh. By the way, contrary to claims in the documentation, the KSH_TYPESET option was never completely obsolete. Even with the post-5.0.8 reserved word interface activated, the behaviour of MAGIC_EQUAL_SUBST still takes KSH_TYPESET into account. Thanks, - Martijn [*] This is useful if a sh script needs to parse the output of 'export -p' (or 'readonly -p'). It is not possible to grep their output reliably as entries may contain newlines. The only reliable POSIX way is to have the shell parse it, which is done by temporarily aliasing 'export' to a handler shell function and doing an 'eval "$(export -p)"'. --------------050FB7BFB06C8AE7C53176AF Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="init_builtins.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="init_builtins.patch" ZGlmZiAtLWdpdCBhL0RvYy9ac2gvYnVpbHRpbnMueW8gYi9Eb2MvWnNoL2J1aWx0aW5zLnlv CmluZGV4IGY0NjBlNDguLjk3NjNhNmMgMTAwNjQ0Ci0tLSBhL0RvYy9ac2gvYnVpbHRpbnMu eW8KKysrIGIvRG9jL1pzaC9idWlsdGlucy55bwpAQCAtMTg2Niw4ICsxODY2LDkgQEAgdHQo aW50ZWdlciksIHR0KGxvY2FsKSwgdHQocmVhZG9ubHkpIG9yIHR0KHR5cGVzZXQpIGlzIG1h dGNoZWQgd2hlbiB0aGUKIGxpbmUgaXMgcGFyc2VkIChOLkIuIG5vdCB3aGVuIGl0IGlzIGV4 ZWN1dGVkKS4gIEluIHRoaXMgY2FzZSB0aGUgYXJndW1lbnRzCiBhcmUgcGFyc2VkIGFzIGFz c2lnbm1lbnRzLCBleGNlcHQgdGhhdCB0aGUgYHR0KCs9KScgc3ludGF4IGFuZCB0aGUKIHR0 KEdMT0JfQVNTSUdOKSBvcHRpb24gYXJlIG5vdCBzdXBwb3J0ZWQsIGFuZCBzY2FsYXIgdmFs dWVzIGFmdGVyIHR0KD0pCi1hcmUgZW0obm90KSBzcGxpdCBmdXJ0aGVyIGludG8gd29yZHMs IGV2ZW4gaWYgZXhwYW5kZWQgKHJlZ2FyZGxlc3Mgb2YgdGhlCi1zZXR0aW5nIG9mIHRoZSB0 dChLU0hfVFlQRVNFVCkgb3B0aW9uOyB0aGlzIG9wdGlvbiBpcyBvYnNvbGV0ZSkuCithcmUg ZW0obm90KSBzcGxpdCBmdXJ0aGVyIGludG8gd29yZHMsIGV2ZW4gaWYgZXhwYW5kZWQgKHVu bGVzcyB0dCh6c2gpCit3YXMgaW52b2tlZCBhcyB0dChzaCkgb3IgdHQoa3NoKSwgaW4gd2hp Y2ggY2FzZSBpdCBkZXBlbmRzIG9uIHRoZQorc2V0dGluZyBvZiB0aGUgdHQoS1NIX1RZUEVT RVQpIG9wdGlvbikuCiAKIEV4YW1wbGVzIG9mIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNv bW1hbmQgYW5kIHJlc2VydmVkIHdvcmQgcGFyc2luZzoKIApkaWZmIC0tZ2l0IGEvRG9jL1pz aC9ncmFtbWFyLnlvIGIvRG9jL1pzaC9ncmFtbWFyLnlvCmluZGV4IGQyYzdjZDIuLmJiNzIw Y2UgMTAwNjQ0Ci0tLSBhL0RvYy9ac2gvZ3JhbW1hci55bworKysgYi9Eb2MvWnNoL2dyYW1t YXIueW8KQEAgLTE1NSw2ICsxNTUsMTAgQEAgaXRlbSh0dChub2NvcnJlY3QpKSgKIFNwZWxs aW5nIGNvcnJlY3Rpb24gaXMgbm90IGRvbmUgb24gYW55IG9mIHRoZSB3b3Jkcy4gIFRoaXMg bXVzdCBhcHBlYXIKIGJlZm9yZSBhbnkgb3RoZXIgcHJlY29tbWFuZCBtb2RpZmllciwgYXMg aXQgaXMgaW50ZXJwcmV0ZWQgaW1tZWRpYXRlbHksCiBiZWZvcmUgYW55IHBhcnNpbmcgaXMg ZG9uZS4gIEl0IGhhcyBubyBlZmZlY3QgaW4gbm9uLWludGVyYWN0aXZlIHNoZWxscy4KKwor VGhlIHR0KG5vY29ycmVjdCkgcmVzZXJ2ZWQgd29yZCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0 IHdoZW4gdGhlCitzaGVsbCBpcyBpbnZva2VkIGFzIHR0KHNoKSBvciB0dChrc2gpLiAgSXQg Y2FuIGJlIGVuYWJsZWQKK3dpdGggdGhlIGNvbW1hbmQgYHR0KGVuYWJsZSAtciBub2NvcnJl Y3QpJy4KICkKIGZpbmRleChub2dsb2IpCiBpdGVtKHR0KG5vZ2xvYikpKApAQCAtMjI5LDgg KzIzMyw4IEBAIHdoaWNoIG11c3QgZXZhbHVhdGUgdG8gYSBudW1iZXIgdmFyKG4pLgogdmFy KGxpc3QpIGlzIHRoZW4gZXhlY3V0ZWQgdmFyKG4pIHRpbWVzLgogCiBUaGUgdHQocmVwZWF0 KSBzeW50YXggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHRoZQotc2hlbGwgc3RhcnRz IGluIGEgbW9kZSBlbXVsYXRpbmcgYW5vdGhlciBzaGVsbC4gIEl0IGNhbiBiZSBlbmFibGVk Ci13aXRoIHRoZSBjb21tYW5kIGB0dChlbmFibGUgLXIgcmVwZWF0KScKK3NoZWxsIGlzIGlu dm9rZWQgYXMgdHQoc2gpIG9yIHR0KGtzaCkuICBJdCBjYW4gYmUgZW5hYmxlZAord2l0aCB0 aGUgY29tbWFuZCBgdHQoZW5hYmxlIC1yIHJlcGVhdCknLgogKQogZmluZGV4KGNhc2UpCiBj aW5kZXgoY2FzZSBzZWxlY3Rpb24pCkBAIC00NDIsNiArNDQ2LDEwIEBAIEEgc2hvcnQgZm9y bSBvZiB0aGUgYXJpdGhtZXRpYyB0dChmb3IpIGNvbW1hbmQuCiBmaW5kZXgoZm9yZWFjaCkK IGl0ZW0odHQoZm9yZWFjaCkgdmFyKG5hbWUpIC4uLiB0dChMUEFSKCkpIHZhcih3b3JkKSAu Li4gdHQoUlBBUigpKSB2YXIobGlzdCkgdHQoZW5kKSkoCiBBbm90aGVyIGZvcm0gb2YgdHQo Zm9yKS4KKworVGhlIHR0KGZvcmVhY2gpIHN5bnRheCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0 IHdoZW4gdGhlCitzaGVsbCBpcyBpbnZva2VkIGFzIHR0KHNoKSBvciB0dChrc2gpLiAgSXQg Y2FuIGJlIGVuYWJsZWQKK3dpdGggdGhlIGNvbW1hbmQgYHR0KGVuYWJsZSAtciBmb3JlYWNo IGVuZCknLgogKQogaXRlbSh0dCh3aGlsZSkgdmFyKGxpc3QpIHR0KHspIHZhcihsaXN0KSB0 dCh9KSkoCiBBbiBhbHRlcm5hdGl2ZSBmb3JtIG9mIHR0KHdoaWxlKS4gIE5vdGUgdGhlIGxp bWl0YXRpb25zIG9uIHRoZSBmb3JtIG9mCmRpZmYgLS1naXQgYS9Eb2MvWnNoL29wdGlvbnMu eW8gYi9Eb2MvWnNoL29wdGlvbnMueW8KaW5kZXggMjViM2Q1Ny4uNzgyYWQzNCAxMDA2NDQK LS0tIGEvRG9jL1pzaC9vcHRpb25zLnlvCisrKyBiL0RvYy9ac2gvb3B0aW9ucy55bwpAQCAt MjA2MSwxNyArMjA2MSwyNyBAQCBwaW5kZXgoTk9LU0hUWVBFU0VUKQogY2luZGV4KGFyZ3Vt ZW50IHNwbGl0dGluZywgaW4gdHlwZXNldCBldGMuKQogY2luZGV4KGtzaCwgYXJndW1lbnQg c3BsaXR0aW5nIGluIHR5cGVzZXQpCiBpdGVtKHR0KEtTSF9UWVBFU0VUKSkoCi1UaGlzIG9w dGlvbiBpcyBub3cgb2Jzb2xldGU6IGEgYmV0dGVyIGFwcHJvcHhpbWF0aW9uIHRvIHRoZSBi ZWhhdmlvdXIgb2YKLW90aGVyIHNoZWxscyBpcyBvYnRhaW5lZCB3aXRoIHRoZSByZXNlcnZl ZCB3b3JkIGludGVyZmFjZSB0bwotdHQoZGVjbGFyZSksIHR0KGV4cG9ydCksIHR0KGZsb2F0 KSwgdHQoaW50ZWdlciksIHR0KGxvY2FsKSwgdHQocmVhZG9ubHkpCi1hbmQgdHQodHlwZXNl dCkuICBOb3RlIHRoYXQgdGhlIG9wdGlvbiBpcyBvbmx5IGFwcGxpZWQgd2hlbiB0aGUgcmVz ZXJ2ZWQKLXdvcmQgaW50ZXJmYWNlIGlzIGVtKG5vdCkgaW4gdXNlLgotCi1BbHRlcnMgdGhl IHdheSBhcmd1bWVudHMgdG8gdGhlIHR0KHR5cGVzZXQpIGZhbWlseSBvZiBjb21tYW5kcywg aW5jbHVkaW5nCitJZiB0dCh6c2gpIGlzIGludm9rZWQgYXMgdHQoc2gpIG9yIHR0KGtzaCks IHRoaXMgb3B0aW9uIGFsdGVycwordGhlIHdheSBhcmd1bWVudHMgdG8gdGhlIHR0KHR5cGVz ZXQpIGZhbWlseSBvZiBjb21tYW5kcywgaW5jbHVkaW5nCiB0dChkZWNsYXJlKSwgdHQoZXhw b3J0KSwgdHQoZmxvYXQpLCB0dChpbnRlZ2VyKSwgdHQobG9jYWwpIGFuZAogdHQocmVhZG9u bHkpLCBhcmUgcHJvY2Vzc2VkLiAgV2l0aG91dCB0aGlzIG9wdGlvbiwgenNoIHdpbGwgcGVy Zm9ybSBub3JtYWwKIHdvcmQgc3BsaXR0aW5nIGFmdGVyIGNvbW1hbmQgYW5kIHBhcmFtZXRl ciBleHBhbnNpb24gaW4gYXJndW1lbnRzIG9mIGFuCiBhc3NpZ25tZW50OyB3aXRoIGl0LCB3 b3JkIHNwbGl0dGluZyBkb2VzIG5vdCB0YWtlIHBsYWNlIGluIHRob3NlIGNhc2VzLgorCitC eSBkZWZhdWx0LCB0aGlzIG9wdGlvbiBpcyBzdXBlcnNlZGVkIGJ5IGEgbW9yZSBuYXR1cmFs IHdheSBvZgorcGFyc2luZyBhc3NpZ25tZW50LWFyZ3VtZW50czogdGhlIHJlc2VydmVkIHdv cmQgaW50ZXJmYWNlIHRvCit0dChkZWNsYXJlKSwgdHQoZXhwb3J0KSwgdHQoZmxvYXQpLCB0 dChpbnRlZ2VyKSwgdHQobG9jYWwpLCB0dChyZWFkb25seSkKK2FuZCB0dCh0eXBlc2V0KS4g IFRoZSB0dChLU0hfVFlQRVNFVCkgb3B0aW9uIGlzIG9ubHkgYXBwbGllZCB0byB0aGVzZSB3 aGVuCit0aGUgcmVzZXJ2ZWQgd29yZCBpbnRlcmZhY2UgaXMgZW0obm90KSBpbiB1c2UgLS0g dGhhdCBpcywgZWl0aGVyIHdoZW4gdGhlCitzaGVsbCB3YXMgaW52b2tlZCBhcyB0dChzaCkg b3IgdHQoa3NoKSwgb3Igd2hlbiB0aGUgcmVzZXJ2ZWQgd29yZHMgYXJlCitleHBsaWNpdGx5 IGRpc2FibGVkIHVzaW5nIHR0KGRpc2FibGUgLXIpLCBleHBvc2luZyB0aGUgdW5kZXJseWlu ZyBidWlsdGluCitjb21tYW5kcyBkaXJlY3RseS4KKworUmVnYXJkbGVzcyBvZiB0aGUgYWJv dmUsIHRoaXMgb3B0aW9uIGFsd2F5cyBtb2RpZmllcyB0aGUgYmVoYXZpb3VyIG9mIHRoZQor dHQoTUFHSUNfRVFVQUxfU1VCU1QpIG9wdGlvbi4KKworRm9yIHR0KGtzaCkgZW11bGF0aW9u IG1vZGUsIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdDsgb3RoZXJ3aXNlLAor aXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KICkKIHBpbmRleChLU0hfWkVST19TVUJTQ1JJ UFQpCiBwaW5kZXgoTk9fS1NIX1pFUk9fU1VCU0NSSVBUKQpkaWZmIC0tZ2l0IGEvU3JjL2J1 aWx0aW4uYyBiL1NyYy9idWlsdGluLmMKaW5kZXggZmI1OTczOC4uZjU1N2QwYyAxMDA2NDQK LS0tIGEvU3JjL2J1aWx0aW4uYworKysgYi9TcmMvYnVpbHRpbi5jCkBAIC0yMTAsMTAgKzIx MCwyOSBAQCBmcmVlYnVpbHRpbm5vZGUoSGFzaE5vZGUgaG4pCiB2b2lkCiBpbml0X2J1aWx0 aW5zKHZvaWQpCiB7Ci0gICAgaWYgKCFFTVVMQVRJT04oRU1VTEFURV9aU0gpKSB7Ci0JSGFz aE5vZGUgaG4gPSByZXN3ZHRhYi0+Z2V0bm9kZTIocmVzd2R0YWIsICJyZXBlYXQiKTsKLQlp ZiAoaG4pCi0JICAgIHJlc3dkdGFiLT5kaXNhYmxlbm9kZShobiwgMCk7CisgICAgaWYgKEVN VUxBVElPTihFTVVMQVRFX1NIKSB8fCBFTVVMQVRJT04oRU1VTEFURV9LU0gpKSB7CisJc3Rh dGljIGNvbnN0IGNoYXIgKmRpc2FibGVyZXN3ZFtdID0geworCS8qIHJlc2VydmVkIHdvcmRz IHRoYXQgbWF5IGtpbGwgKGspc2ggc2NyaXB0cyAqLworCQkiZW5kIiwKKwkJImZvcmVhY2gi LAorCQkibm9jb3JyZWN0IiwKKwkJInJlcGVhdCIsCisJLyogdGhlIGZvbGxvd2luZyByZXZl cnQgdG8gYnVpbHRpbnMgc3ViamVjdCB0byBLU0hfVFlQRVNFVCAqLworCQkiZGVjbGFyZSIs CisJCSJleHBvcnQiLAorCQkiZmxvYXQiLAorCQkiaW50ZWdlciIsCisJCSJsb2NhbCIsCisJ CSJyZWFkb25seSIsCisJCSJ0eXBlc2V0IiwKKwkJMCB9OworCWNvbnN0IGNoYXIgKipuOwor CUhhc2hOb2RlIGhuOworCWZvciAobiA9IGRpc2FibGVyZXN3ZDsgKm47IG4rKykgeworCSAg ICBobiA9IHJlc3dkdGFiLT5nZXRub2RlMihyZXN3ZHRhYiwgKm4pOworCSAgICBpZiAoaG4p CisJCXJlc3dkdGFiLT5kaXNhYmxlbm9kZShobiwgMCk7CisJfQogICAgIH0KIH0KIApkaWZm IC0tZ2l0IGEvU3JjL29wdGlvbnMuYyBiL1NyYy9vcHRpb25zLmMKaW5kZXggNTkwNjUyZS4u NjE0NWI3NyAxMDA2NDQKLS0tIGEvU3JjL29wdGlvbnMuYworKysgYi9TcmMvb3B0aW9ucy5j CkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIHN0cnVjdCBvcHRuYW1lIG9wdG5zW10gPSB7 CiB7e05VTEwsICJrc2hhdXRvbG9hZCIsCSAgICAgIE9QVF9FTVVMQVRFfE9QVF9CT1VSTkV9 LAkgS1NIQVVUT0xPQUR9LAoge3tOVUxMLCAia3NoZ2xvYiIsCSAgICAgIE9QVF9FTVVMQVRF fE9QVF9LU0h9LAkgS1NIR0xPQn0sCiB7e05VTEwsICJrc2hvcHRpb25wcmludCIsICAgICBP UFRfRU1VTEFURXxPUFRfS1NIfSwJIEtTSE9QVElPTlBSSU5UfSwKLXt7TlVMTCwgImtzaHR5 cGVzZXQiLAkgICAgICAwfSwJCQkgS1NIVFlQRVNFVH0sCit7e05VTEwsICJrc2h0eXBlc2V0 IiwJICAgICAgT1BUX0VNVUxBVEV8T1BUX0tTSH0sCSBLU0hUWVBFU0VUfSwKIHt7TlVMTCwg ImtzaHplcm9zdWJzY3JpcHQiLCAgIDB9LAkJCSBLU0haRVJPU1VCU0NSSVBUfSwKIHt7TlVM TCwgImxpc3RhbWJpZ3VvdXMiLCAgICAgIE9QVF9BTEx9LAkJCSBMSVNUQU1CSUdVT1VTfSwK IHt7TlVMTCwgImxpc3RiZWVwIiwJICAgICAgT1BUX0FMTH0sCQkJIExJU1RCRUVQfSwK --------------050FB7BFB06C8AE7C53176AF--