Эта ссылка содержит больше информации, чем что-либо еще, что я смог найти в сети. Даже у zip-источника ничего нет. Копирование соответствующего раздела для потомков. Этот патч не предназначен для документирования этого формата, он просто показывает, насколько патетичным (читай несуществующим) текущая документация.
# external_attr is 4 bytes in size. The high order two
# bytes represent UNIX permission and file type bits,
# while the low order two contain MS-DOS FAT file
# attributes, most notably bit 4 marking directories.
if node.isfile:
zipinfo.compress_type = ZIP_DEFLATED
zipinfo.external_attr = 0644 << 16L # permissions -r-wr--r--
data = node.get_content().read()
properties = node.get_properties()
if 'svn:special' in properties and \
data.startswith('link '):
data = data[5:]
zipinfo.external_attr |= 0120000 << 16L # symlink file type
zipinfo.compress_type = ZIP_STORED
if 'svn:executable' in properties:
zipinfo.external_attr |= 0755 << 16L # -rwxr-xr-x
zipfile.writestr(zipinfo, data)
elif node.isdir and path:
if not zipinfo.filename.endswith('/'):
zipinfo.filename += '/'
zipinfo.compress_type = ZIP_STORED
zipinfo.external_attr = 040755 << 16L # permissions drwxr-xr-x
zipinfo.external_attr |= 0x10 # MS-DOS directory flag
zipfile.writestr(zipinfo, '')
Также эта ссылка имеет следующее.
Здесь младший байт предположительно означает самый правый (младший) байт из четырех байтов. Так что это
для MS-DOS и предположительно может быть оставлено как ноль в противном случае.
атрибуты внешнего файла: (4 байта)
The mapping of the external attributes is
host-system dependent (see 'version made by'). For
MS-DOS, the low order byte is the MS-DOS directory
attribute byte. If input came from standard input, this
field is set to zero.
Кроме того, исходный файл unix / unix.c в источниках для zip-программы InfoZIP, загруженный из Архивы Debian , содержит следующие комментарии:
/* lower-middle external-attribute byte (unused until now):
* high bit => (have GMT mod/acc times) >>> NO LONGER USED! <<<
* second-high bit => have Unix UID/GID info
* NOTE: The high bit was NEVER used in any official Info-ZIP release,
* but its future use should be avoided (if possible), since it
* was used as "GMT mod/acc times local extra field" flags in Zip beta
* versions 2.0j up to 2.0v, for about 1.5 years.
*/
Итак, взяв все это вместе, похоже, что фактически используется только второй старший байт, по крайней мере, для Unix.
РЕДАКТИРОВАТЬ: я спросил об аспекте Unix этого в Unix.SX, в вопросе " Атрибут внешнего файла формата zip ". Похоже, я неправильно понял пару вещей. В частности, оба старших байта используются для Unix.