MSYS2-packages/zsh/add-pwd-W-option.patch
2015-09-14 10:42:53 +03:00

36 lines
1.6 KiB
Diff

diff -rupN zsh-5.0.6/Src/builtin.c zsh-5.0.6-patch/Src/builtin.c
--- zsh-5.0.6/Src/builtin.c 2014-08-01 04:41:49.000000000 +1000
+++ zsh-5.0.6-patch/Src/builtin.c 2014-09-26 22:48:35.215974400 +1000
@@ -103,7 +103,7 @@ static struct builtin builtins[] =
BUILTIN("printf", 0, bin_print, 1, -1, BIN_PRINTF, NULL, NULL),
BUILTIN("pushd", BINF_SKIPINVALID | BINF_SKIPDASH | BINF_DASHDASHVALID, bin_cd, 0, 2, BIN_PUSHD, "qsPL", NULL),
BUILTIN("pushln", 0, bin_print, 0, -1, BIN_PRINT, NULL, "-nz"),
- BUILTIN("pwd", 0, bin_pwd, 0, 0, 0, "rLP", NULL),
+ BUILTIN("pwd", 0, bin_pwd, 0, 0, 0, "rLPW", NULL),
BUILTIN("r", 0, bin_fc, 0, -1, BIN_R, "IlLnr", NULL),
BUILTIN("read", 0, bin_read, 0, -1, 0, "cd:ek:%lnpqrst:%zu:AE", NULL),
BUILTIN("readonly", BINF_PLUSOPTS | BINF_MAGICEQUALS | BINF_PSPECIAL | BINF_ASSIGN, (HandlerFunc)bin_typeset, 0, -1, 0, "AE:%F:%HL:%R:%TUZ:%afghi:%lptux", "r"),
@@ -672,7 +672,21 @@ int doprintdir = 0; /* set in exec.c (f
int
bin_pwd(UNUSED(char *name), UNUSED(char **argv), Options ops, UNUSED(int func))
{
- if (OPT_ISSET(ops,'r') || OPT_ISSET(ops,'P') ||
+ if (OPT_ISSET(ops,'W')) {
+ char *wpath = zalloc(PATH_MAX);
+ if (cygwin_conv_path(CCP_POSIX_TO_WIN_A, zgetcwd(), wpath, PATH_MAX) < 0) {
+ free(wpath);
+ perror("cygwin_conv_path");
+ return 1;
+ }
+
+ char *c = wpath;
+ while ((c = strchr(c, '\\')))
+ *c = '/';
+
+ printf("%s\n", wpath);
+ free(wpath);
+ } else if (OPT_ISSET(ops,'r') || OPT_ISSET(ops,'P') ||
(isset(CHASELINKS) && !OPT_ISSET(ops,'L')))
printf("%s\n", zgetcwd());
else {