Index: Lib/tarfile.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/tarfile.py,v retrieving revision 1.20 diff -u -r1.20 tarfile.py --- Lib/tarfile.py 18 Sep 2004 09:08:50 -0000 1.20 +++ Lib/tarfile.py 10 Oct 2004 11:28:28 -0000 @@ -174,39 +174,46 @@ 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, "/")