_filemode_table = (
+ # File type chars according to:
+ # http://en.wikibooks.org/wiki/C_Programming/POSIX_Reference/sys/stat.h
((S_IFLNK, "l"),
(S_IFSOCK, "s"), # Must appear before IFREG and IFDIR as IFSOCK == IFREG | IFDIR
(S_IFREG, "-"),
def filemode(mode):
"""Convert a file's mode to a string of the form '-rwxrwxrwx'."""
perm = []
- for table in _filemode_table:
+ for index, table in enumerate(_filemode_table):
for bit, char in table:
if mode & bit == bit:
perm.append(char)
break
else:
- perm.append("-")
+ if index == 0:
+ # Unknown filetype
+ perm.append("?")
+ else:
+ perm.append("-")
return "".join(perm)
st_mode, modestr = self.get_mode()
self.assertEqual(modestr, '-rwx------')
self.assertS_IS("REG", st_mode)
- self.assertEqual(self.statmod.S_IMODE(st_mode),
+ imode = self.statmod.S_IMODE(st_mode)
+ self.assertEqual(imode,
self.statmod.S_IRWXU)
+ self.assertEqual(self.statmod.filemode(imode),
+ '?rwx------')
os.chmod(TESTFN, 0o070)
st_mode, modestr = self.get_mode()
self.assertEqual(value, modvalue, key)
+@unittest.skipIf(c_stat is None, 'need _stat extension')
class TestFilemodeCStat(TestFilemode, unittest.TestCase):
statmod = c_stat