From: Andrew M. Kuchling Date: Wed, 20 Oct 2004 11:49:28 +0000 (+0000) Subject: [Patch #1043972, for bug #1017553] filemode() returns an incorrect value for the... X-Git-Tag: v2.3.5c1~91 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=42a6bfcea44973000bb61be32ac929b7bbbef6a1;p=thirdparty%2FPython%2Fcpython.git [Patch #1043972, for bug #1017553] filemode() returns an incorrect value for the mode 07111 --- diff --git a/Lib/tarfile.py b/Lib/tarfile.py index 38c50b205e9b..a98baf394476 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -174,39 +174,46 @@ def copyfileobj(src, dst, length=None): return filemode_table = ( - (S_IFLNK, "l", - S_IFREG, "-", - S_IFBLK, "b", - S_IFDIR, "d", - S_IFCHR, "c", - S_IFIFO, "p"), - (TUREAD, "r"), - (TUWRITE, "w"), - (TUEXEC, "x", TSUID, "S", TUEXEC|TSUID, "s"), - (TGREAD, "r"), - (TGWRITE, "w"), - (TGEXEC, "x", TSGID, "S", TGEXEC|TSGID, "s"), - (TOREAD, "r"), - (TOWRITE, "w"), - (TOEXEC, "x", TSVTX, "T", TOEXEC|TSVTX, "t")) + ((S_IFLNK, "l"), + (S_IFREG, "-"), + (S_IFBLK, "b"), + (S_IFDIR, "d"), + (S_IFCHR, "c"), + (S_IFIFO, "p")), + + ((TUREAD, "r"),), + ((TUWRITE, "w"),), + ((TUEXEC|TSUID, "s"), + (TSUID, "S"), + (TUEXEC, "x")), + + ((TGREAD, "r"),), + ((TGWRITE, "w"),), + ((TGEXEC|TSGID, "s"), + (TSGID, "S"), + (TGEXEC, "x")), + + ((TOREAD, "r"),), + ((TOWRITE, "w"),), + ((TOEXEC|TSVTX, "t"), + (TSVTX, "T"), + (TOEXEC, "x")) +) def filemode(mode): """Convert a file's mode to a string of the form -rwxrwxrwx. Used by TarFile.list() """ - s = "" - for t in filemode_table: - while True: - if mode & t[0] == t[0]: - s += t[1] - elif len(t) > 2: - t = t[2:] - continue - else: - s += "-" - break - return s + perm = [] + for table in filemode_table: + for bit, char in table: + if mode & bit == bit: + perm.append(char) + break + else: + perm.append("-") + return "".join(perm) if os.sep != "/": normpath = lambda path: os.path.normpath(path).replace(os.sep, "/")