From e0e63c65e6dc7f386f3d3915bbcb2bacd4007a5d Mon Sep 17 00:00:00 2001 From: tg Date: Sun, 24 Jul 2016 23:05:52 +0000 Subject: [PATCH] =?UTF-8?q?fix=20issues=20with=20home=20directory=20replac?= =?UTF-8?q?ement,=20from=20Torsten=20Sillke:=20=E2=80=A2=20if=20$PWD=20=3D?= =?UTF-8?q?=20${HOME}foo,=20no=20longer=20show=20as=20~foo=20in=20PS1=20?= =?UTF-8?q?=E2=80=A2=20simplify=20~,=20~+,=20and=20~-=20exactly=20as=20$PW?= =?UTF-8?q?D=20is=20upon=20shell=20entry=20=20=20(fixes=20HOME=3D/home/./f?= =?UTF-8?q?oo=20but=20PWD=3D/home/foo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dot.mkshrc | 6 +++--- eval.c | 26 +++++++++++++++++++++----- mksh.1 | 6 +++--- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/dot.mkshrc b/dot.mkshrc index 5321de8..1b1f05f 100644 --- a/dot.mkshrc +++ b/dot.mkshrc @@ -1,5 +1,5 @@ # $Id$ -# $MirOS: src/bin/mksh/dot.mkshrc,v 1.105 2016/04/09 16:33:23 tg Exp $ +# $MirOS: src/bin/mksh/dot.mkshrc,v 1.106 2016/07/24 23:05:51 tg Exp $ #- # Copyright (c) 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, # 2011, 2012, 2013, 2014, 2015, 2016 @@ -40,8 +40,8 @@ PS4='[$EPOCHREALTIME] '; PS1=$'\001\r''${| (( e )) && REPLY+="$e|" REPLY+=${USER}@${HOSTNAME%%.*}: - \typeset d=${PWD:-?} p=~; [[ $p = ?(*/) ]] || d=${d/#$p/\~} - \typeset m=${%d} n p=...; (( m > 0 )) || m=${#d} + \typeset d=${PWD:-?}/ p=~; [[ $p = ?(*/) ]] || d=${d/#$p\//\~/} + d=${d%/}; \typeset m=${%d} n p=...; (( m > 0 )) || m=${#d} (( m > (n = (COLUMNS/3 < 7 ? 7 : COLUMNS/3)) )) && d=${d:(-n)} || p= REPLY+=$p$d diff --git a/eval.c b/eval.c index b93e808..da29de6 100644 --- a/eval.c +++ b/eval.c @@ -23,7 +23,7 @@ #include "sh.h" -__RCSID("$MirOS: src/bin/mksh/eval.c,v 1.189 2016/06/26 00:44:57 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/eval.c,v 1.190 2016/07/24 23:05:52 tg Exp $"); /* * string expansion @@ -1714,11 +1714,13 @@ maybe_expand_tilde(const char *p, XString *dsp, char **dpp, bool isassign) * * based on a version by Arnold Robbins */ - char * do_tilde(char *cp) { char *dp = null; +#ifndef MKSH_NOPWNAM + bool do_simplify = true; +#endif if (cp[0] == '\0') dp = str_val(global("HOME")); @@ -1727,11 +1729,25 @@ do_tilde(char *cp) else if (ksh_isdash(cp)) dp = str_val(global("OLDPWD")); #ifndef MKSH_NOPWNAM - else + else { dp = homedir(cp); + do_simplify = false; + } #endif - /* If HOME, PWD or OLDPWD are not set, don't expand ~ */ - return (dp == null ? NULL : dp); + + /* if parameters aren't set, don't expand ~ */ + if (dp == NULL || dp == null) + return (NULL); + + /* simplify parameters as if cwd upon entry */ +#ifndef MKSH_NOPWNAM + if (do_simplify) +#endif + { + strdupx(dp, dp, ATEMP); + simplify_path(dp); + } + return (dp); } #ifndef MKSH_NOPWNAM diff --git a/mksh.1 b/mksh.1 index 39ceef3..d5dabb5 100644 --- a/mksh.1 +++ b/mksh.1 @@ -1,4 +1,4 @@ -.\" $MirOS: src/bin/mksh/mksh.1,v 1.399 2016/06/25 23:52:06 tg Exp $ +.\" $MirOS: src/bin/mksh/mksh.1,v 1.400 2016/07/24 23:05:52 tg Exp $ .\" $OpenBSD: ksh.1,v 1.160 2015/07/04 13:27:04 feinerer Exp $ .\"- .\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, @@ -76,7 +76,7 @@ .\" with -mandoc, it might implement .Mx itself, but we want to .\" use our own definition. And .Dd must come *first*, always. .\" -.Dd $Mdocdate: June 25 2016 $ +.Dd $Mdocdate: July 24 2016 $ .\" .\" Check which macro package we use, and do other -mdoc setup. .\" @@ -2138,7 +2138,7 @@ If the login name is empty, .Ql + , or .Ql \- , -the value of the +the simplified value of the .Ev HOME , .Ev PWD , or