Hi,
one our user found regression in ksh. It was caused by this bugfix:
> 12-07-09 The 12-04-04 fix for cd .. was not correct causing cd
> /etc;cd .. to remain in /etc. This has been fixed.
in bltins/cd_pwd.c: b_cd(...)
following sequence of conditions:
if(*++dp=='.' && (*++dp=='/' || *dp==0))
n++;
else if(*dp && *dp!='/')
break;
if(*dp==0)
break;
goes through second if condition for "../.directory" input,
but *++dp in first condition skipps valid '.' that is part of the
directory name. So it's missing later:
sfputr(shp->strbuf,dp,0); <--leading dot is lost
Reproducer:
cd ~/.ssh
cd ../.ssh
prints error:
ksh: cd: /home/mhlavink/ssh: [No such file or directory]
see '.' missing in ^^^
Attached patch works for me.
Michal
diff -up ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c
--- ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix 2013-01-04 18:54:11.890462334 +0100
+++ ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c 2013-01-04 18:54:11.914462535 +0100
@@ -214,7 +214,10 @@ int b_cd(int argc, char *argv[],Shbltin_
if(*++dp=='.' && (*++dp=='/' || *dp==0))
n++;
else if(*dp && *dp!='/')
+ {
+ dp--;
break;
+ }
if(*dp==0)
break;
}
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers