xar (archiver)

From Wikipedia, the free encyclopedia
Jump to: navigation, search
xar
Filename extension .xar
Uniform Type Identifier (UTI) com.apple.xar-archive
Magic number xar!
Latest release
1.6.1
(17 September 2012; 4 years ago (2012-09-17))
Type of format archive file format
Extended from XML, gzip
Website mackyle.github.io/xar/ github.com/mackyle/xar

Xar (short for eXtensible ARchive format) is an open source file archiver and the archiver’s file format. It was created within the OpenDarwin project and is used in Mac OS X 10.5 for software installation routines, as well as browser extensions in Safari 5.0. Xar replaced the use of gzipped pax files.[1]

One development branch of RPM, RPM5, uses xar.[2]

File structure[edit]

XAR File Structure.svg

The file consists of three sections, the header, the table of contents and the heap.[3]

Header[edit]

Offset# Size
(in bytes)
Purpose
0 4 File signature used to identify the file format as Xar.
This should always equal xar!
4 2 Header size
6 2 Version of Xar format to use.
Currently there is only one version.
8 8 Length of the TOC compressed data.
16 8 Length of the TOC uncompressed data.
24 4 Checksum algorithm:

Table of contents[edit]

Xar is different from cpio, tar or ar in that it stores the TOC (table of contents) in the beginning of the file, making appending to an archive more complicated, but making it unnecessary to scan through the archive to extract an individual contained file. The table of contents is stored as a zlib compressed, UTF-8 encoded, XML document.[4][5][6] Each file that is stored in the Xar is independently compressed/encoded. This gives the ability to have the file(s) encoded using gzip while having another file in the same archive encoded using a different method such as bzip2.

Example Table of contents

<?xml version="1.0" encoding="UTF-8"?>
<xar>
 <toc>
  <checksum style="sha1">
   <offset>0</offset>
   <size>20</size>
  </checksum>
  <file id="1">
   <group>staff</group>
   <gid>20</gid>
   <user>joe</user>
   <uid>501</uid>
   <mode>0755</mode>
   <type>directory</type>
   <name>com.foobar</name>
   <file id="2">
    <group></group>
    <gid>20</gid>
    <user></user>
    <uid>501</uid>
    <mode>0775</mode>
    <type>directory</type>
    <name>Contents</name>
    <file id="3">
     <data>
      <length>428</length>
      <offset>20</offset>
      <size>1005</size>
      <encoding style="application/x-gzip"/>
      <archived-checksum style="SHA1">a5f6f1461213a904f831d4ef6f214638342842ed</archived-checksum>
      <extracted-checksum style="SHA1">21d21a0c90378248ce0dfb6f345376d1b00d65fc</extracted-checksum>
     </data>
     <group></group>
     <gid>20</gid>
     <user></user>
     <uid>501</uid>
     <mode>0664</mode>
     <type>file</type>
     <name>Info.plist</name>
    </file>
    <file id="4">
     <group></group>
     <gid>20</gid>
     <user></user>
     <uid>501</uid>
     <mode>0775</mode>
     <type>directory</type>
     <name>Resources</name>
     <file id="5">
      <data>
       <length>14868</length>
       <offset>448</offset>
       <size>274432</size>
       <encoding style="application/x-gzip"/>
       <archived-checksum style="SHA1">efe5c97921de7ccc5aebc158d158e9d4280d6814</archived-checksum>
       <extracted-checksum style="SHA1">45c8be42d1d9afdb57ddd5e9311453010ec46161</extracted-checksum>
      </data>
      <group></group>
      <gid>20</gid>
      <user></user>
      <uid>501</uid>
      <mode>0664</mode>
      <type>file</type>
      <name>foobar</name>
     </file>
     <file id="6">
      <data>
       <length>17635</length>
       <offset>15316</offset>
       <size>45056</size>
       <encoding style="application/x-gzip"/>
       <archived-checksum style="SHA1">3c761ffcc81ee6e232e4f4a1c4a81654c26c4e52</archived-checksum>
       <extracted-checksum style="SHA1">0ea31f8ef0e5987a1838a64ab5c26ebf3ee4bc37</extracted-checksum>
      </data>
      <group></group>
      <gid>20</gid>
      <user></user>
      <uid>501</uid>
      <mode>0664</mode>
      <type>file</type>
      <name>docSet.skidx</name>
     </file>
     <file id="7">
      <group></group>
      <gid>20</gid>
      <user></user>
      <uid>501</uid>
      <mode>0775</mode>
      <type>directory</type>
      <name>Documents</name>
      <file id="8">
       <data>
        <length>35790</length>
        <offset>32951</offset>
        <size>209242</size>
        <encoding style="application/x-gzip"/>
        <archived-checksum style="SHA1">5242cd71585c34e722932f324706f8c00e1ae0c5</archived-checksum>
        <extracted-checksum style="SHA1">c0e013e53d829511835e2b429abb5198731e9a3e</extracted-checksum>
       </data>
       <group></group>
       <gid>20</gid>
       <user></user>
       <uid>501</uid>
       <mode>0664</mode>
       <type>file</type>
       <name>foobar.html</name>
      </file>
     </file>
    </file>
   </file>
  </file>
 </toc>
</xar>

References[edit]

Exb ternal links[edit]