From: Jarkko Hietaniemi Date: Sun, 21 Jan 2001 22:55:44 +0000 (+0000) Subject: Tweak the mkdir trailing slash code some more. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=16ac3975a67d58c2f3ad7448ff2401f16ee7b1b1;p=p5sagit%2Fp5-mst-13.2.git Tweak the mkdir trailing slash code some more. TO DO: the same handling should probably be done for all the other filesystem functions that can have directories as their arguments. p4raw-id: //depot/perl@8509 --- diff --git a/pp_sys.c b/pp_sys.c index 8d3200e..283dbc1 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -3600,10 +3600,18 @@ PP(pp_mkdir) tmps = SvPV(TOPs, len); /* Different operating and file systems take differently to - * trailing slashes. To err on the side of portability, we - * snip away one trailing slash. */ - if (tmps[len-1] == '/') { - tmps = savepvn(tmps, len - 1); + * trailing slashes. According to POSIX 1003.1 1996 Edition + * any number of trailing slashes should be allowed. + * Thusly we snip them away so that even non-conforming + * systems are happy. */ + /* We should probably do this "filtering" for all + * the functions that expect (potentially) directory names: + * -d, chdir(), chmod(), chown(), chroot(), fcntl()?, + * (mkdir()), opendir(), rename(), rmdir(), stat(). --jhi */ + if (len > 1 && tmps[len-1] == '/') { + while (tmps[len] == '/' && len > 1) + len--; + tmps = savepvn(tmps, len); copy = TRUE; }