zsh-workers
 help / color / mirror / code / Atom feed
From: Martijn Dekker <martijn@inlv.org>
To: Zsh hackers list <zsh-workers@zsh.org>
Subject: [PATCH] POSIX_CD: disable stack entries
Date: Thu, 12 Dec 2019 11:38:10 +0100	[thread overview]
Message-ID: <66aa7d70-03bb-3519-38e8-1ccb00c3f04f@inlv.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 782 bytes --]

Recognising directory stack entries for the 'cd' builtin is not 
compatible with POSIX, because cd'ing into directories with names like 
+123 or -4567 no longer works without prefixing './', even after '--'. 
In POSIX, only the '-' operand has such a special meaning. The attached 
patch disables directory stack entries for 'cd' if POSIX_CD is active.

This patch also changes the behaviour of the 'chdir' equivalent. For 
POSIX compliance, only 'cd' needs to be changed, as POSIX has no 
'chdir'. I could change the patch to only change 'cd', but it would 
involve slightly more code, and would make 'cd' and 'chdir' no longer 
exactly equivalent. If this is preferred, please let me know.

Thanks,

- M.

-- 
modernish -- harness the shell
https://github.com/modernish/modernish

[-- Attachment #2: POSIX_CD.patch --]
[-- Type: text/plain, Size: 1836 bytes --]

diff --git a/Doc/Zsh/builtins.yo b/Doc/Zsh/builtins.yo
index 15d3e0cf4..415bce613 100644
--- a/Doc/Zsh/builtins.yo
+++ b/Doc/Zsh/builtins.yo
@@ -290,6 +290,8 @@ of the list shown by the tt(dirs) command, starting with zero.
 An argument of the form `tt(-)var(n)' counts from the right.
 If the tt(PUSHD_MINUS) option is set, the meanings of `tt(PLUS())'
 and `tt(-)' in this context are swapped.
+If the tt(POSIX_CD) option is set, this form of tt(cd) is not recognised
+and will be interpreted as the first form.
 
 If the tt(-q) (quiet) option is specified, the hook function tt(chpwd)
 and the functions in the array tt(chpwd_functions) are not called.
diff --git a/Doc/Zsh/options.yo b/Doc/Zsh/options.yo
index 903c31134..88bb643d1 100644
--- a/Doc/Zsh/options.yo
+++ b/Doc/Zsh/options.yo
@@ -148,7 +148,8 @@ ifzman(zmanref(zshbuiltins))\
 ifnzman(noderef(Shell Builtin Commands)).
 If the option is set, the shell does not test for directories beneath
 the local directory (`tt(.)') until after all directories in tt(cdpath)
-have been tested.
+have been tested, and the tt(cd) and tt(chdir) commands do not recognise
+arguments of the form `{tt(PLUS())|tt(-)}var(n)' as directory stack entries.
 
 Also, if the option is set, the conditions under which the shell
 prints the new directory after changing to it are modified.  It is
diff --git a/Src/builtin.c b/Src/builtin.c
index bd7736d2c..7bf4281da 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -912,7 +912,7 @@ cd_get_dest(char *nam, char **argv, int hard, int func)
 	char *end;
 
 	doprintdir++;
-	if (argv[0][1] && (argv[0][0] == '+' || argv[0][0] == '-')
+	if (!isset(POSIXCD) && argv[0][1] && (argv[0][0] == '+' || argv[0][0] == '-')
 	    && strspn(argv[0]+1, "0123456789") == strlen(argv[0]+1)) {
 	    dd = zstrtol(argv[0] + 1, &end, 10);
 	    if (*end == '\0') {

             reply	other threads:[~2019-12-12 10:38 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20191212103905eucas1p2c9c79ee9488ab73b48db0de1ac11faf7@eucas1p2.samsung.com>
2019-12-12 10:38 ` Martijn Dekker [this message]
2019-12-12 10:50   ` Peter Stephenson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=66aa7d70-03bb-3519-38e8-1ccb00c3f04f@inlv.org \
    --to=martijn@inlv.org \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).