Function: tar-parse-pax-extended-header
tar-parse-pax-extended-header is a byte-compiled function defined in
tar-mode.el.gz.
Signature
(tar-parse-pax-extended-header POS)
Documentation
Parse a pax external header of a Posix-format tar file.
Source Code
;; Defined in /usr/src/emacs/lisp/tar-mode.el.gz
(defun tar-parse-pax-extended-header (pos)
"Parse a pax external header of a Posix-format tar file."
(let ((end (+ pos 512))
(result tar-attr-vector)
(coding 'utf-8-unix)
attr value record-len value-len)
(fillarray result nil)
(goto-char pos)
(while (and (< pos end)
(re-search-forward pax-extended-attribute-record-regexp
end 'move))
(setq record-len (string-to-number (match-string 1))
attr (match-string 2)
value-len (- record-len
(length (match-string 1))
1
(length (match-string 2))
2)
value (buffer-substring (point) (+ (point) value-len)))
(setq pos (goto-char (+ (point) value-len 1)))
(cond
((equal attr "gid")
(aset result pax-gid-index value))
((equal attr "gname")
(aset result pax-gname-index value))
((equal attr "linkpath")
(aset result pax-linkpath-index value))
((equal attr "mtime")
(aset result pax-mtime-index (string-to-number value)))
((equal attr "path")
(aset result pax-path-index value))
((equal attr "size")
(aset result pax-size-index value))
((equal attr "uid")
(aset result pax-uid-index value))
((equal attr "uname")
(aset result pax-uname-index value))
((equal attr "hdrcharset")
(setq coding (if (equal value "BINARY") 'no-conversion 'utf-8-unix))))
(setq pos (+ pos (skip-chars-forward "\000"))))
;; Decode string-valued attributes.
(aset result pax-gname-index
(pax-decode-string (aref result pax-gname-index) coding))
(aset result pax-linkpath-index
(pax-decode-string (aref result pax-linkpath-index) coding))
(aset result pax-path-index
(pax-decode-string (aref result pax-path-index) coding))
(aset result pax-uname-index
(pax-decode-string (aref result pax-uname-index) coding))
result))