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))