Этот вопрос связан с вопросом библиотеки Crypto++ о переполнении стека: как добавить имя файла в архив при сжатии с использованием класса Gzip? ,
Gzip, как указано в RFC 1952, имеет необязательное поле для исходного имени файла:
(if FLG.FNAME set)
+=========================================+
|...original file name, zero-terminated...| (more-->)
+=========================================+
Если в поле флага установлен бит FNAME
, то присутствует исходное имя файла.
Мы добавили эту функцию в Crypto++ и протестировали ее в OS X. В OS X, похоже, что программа gzip
, Unarchiver (программа архивирования по умолчанию) и обозреватель архивов (покупка в App Store) не поддерживают исходное имя файла. То есть каждый файл распаковывается в имя файла, которое является именем архива без расширения gz
; а не оригинальное имя файла, как оно появляется в заголовке.
Например, вот изображение в браузере архивов. Исходное поле имени файла установлено в test-filename.txt
, но инструмент показывает имя файла как gzip-test
и распаковывает его в файл с именем gzip-test
:
GZip
(и Gunzip
) не являются стандартной Unix- командой IEEE, поэтому я не могу понять, где искать знания об ожидаемом поведении.
Это ожидаемое поведение? Или я вижу ошибку в трех разных программах?
Если это ожидается, то с какой практической целью служит оригинальное имя файла?