[Python-Dev] cpython (2.7): Fix posixpath.realpath() for multiple pardirs (fixes issue #6975).

Antoine Pitrou solipsis at pitrou.net
Mon Feb 18 19:02:04 CET 2013


On Mon, 18 Feb 2013 19:56:07 +0200
Serhiy Storchaka <storchaka at gmail.com> wrote:
> On 18.02.13 19:26, Antoine Pitrou wrote:
> > On Mon, 18 Feb 2013 11:24:40 +0100 (CET)
> > serhiy.storchaka <python-checkins at python.org> wrote:
> >>
> >> +    def test_realpath_curdir(self):
> >> +        self.assertEqual(realpath('.'), os.getcwd())
> >> +        self.assertEqual(realpath('./.'), os.getcwd())
> >> +        self.assertEqual(realpath('/'.join(['.'] * 100)), os.getcwd())
> >> +
> >> +    def test_realpath_pardir(self):
> >> +        self.assertEqual(realpath('..'), dirname(os.getcwd()))
> >> +        self.assertEqual(realpath('../..'), dirname(dirname(os.getcwd())))
> >> +        self.assertEqual(realpath('/'.join(['..'] * 100)), '/')
> >
> > What if there's a symlink along os.getcwd()?
> 
> 1. AFAIK, os.getcwd() returns the path with resolved symlinks.

Indeed, it seems you are right (under POSIX at least):

“The getcwd() function shall place an absolute pathname of the current
working directory in the array pointed to by buf, and return buf. The
pathname shall contain no components that are dot or dot-dot, or are
symbolic links.”

http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html

Regards

Antoine.




More information about the Python-Dev mailing list