aspose.info
IT

XAR - Formato file di archivio estensibile

Aggiornato

Che cos’è un file XAR?

Un file con estensione .xar (Extensible Archive Format) è un archivio UNIX che può essere in formato compresso o non compresso. Viene utilizzato anche su Mac OS per l’installazione di pacchetti. XAR è open-source e faceva parte di Mac OS X 10.5 per l’utilizzo con il browser Safari.

Formato file XAR

Un file XAR ha tre regioni principali.

  • Intestazione
  • Sommario
  • Cumulo

Intestazione XAR

L’intestazione XAR è strutturata come segue.

CampoTipo di datiDimensioni in byte
MagicSenza segno Int 324
TagliaSenza segno Int 162
VersioneSenza segno Int 162
Lunghezza TOC compressaUnsigned Int 648
TOC Length UnCompressedUnsigned Int 648
ChecksumSenza segno Int 324
Nome digest del messaggioNull terminato

La struttura C dell’intestazione XAR può essere definita come segue.

struct xar_header {
    uint32_t magic;
    uint16_t size;
    uint16_t version;
    uint64_t toc_length_compressed;
    uint64_t toc_length_uncompressed;
    uint32_t cksum_alg;
    /* A nul-terminated, zero-padded to multiple of 4, message digest name
     * appears here if cksum_alg is 3 which must not be empty ("") or "none".
     */
};

Nota che tutti i campi dell’intestazione (magic, size, version, toc_length_compressed, toc_length_uncompressed, cksum_alg) sono sempre archiviati nei file XAR in ordine di byte di rete (aka big endian).

XAR Sommario (TOC)

Il sommario è un documento XML che è (e deve) essere codificato come UTF-8. Viene memorizzato all’inizio del file, semplificando la scansione dell’archivio per estrarre il singolo file. L’archivio XAR consente di comprimere/codificare i singoli file nell’archivio in modo indipendente utilizzando diversi schemi di compressione come GZIP, BZIP2 e altri simili.

<?xml version="1.0"?>

<xar>
  <toc>
    <checksum style="sha1">
      <size>20</size>
      <offset>0</offset>
    </checksum>
    <file id="1">
      <name>xar</name>
      <type>file</type>
      <mode>0755</mode>
      <uid>0</uid>
      <gid>0</gid>
      <user>root</user>
      <group>wheel</group>
      <size>81180</size>
      <data>
        <offset>0</offset>
        <size>74108</size>
        <length>23083</length>
        <extracted-checksum style="md5">d852c77ac3c8e83f312c12b4c3198e6d</checksum>
        <archived-checksum style="md5">ceaf793ccb1990ecbadb20112d5f9e5d</checksum>
        <encoding style="application/x-gzip"/>
      </data>
      <ea>
        <name>com.apple.ResourceFork</name>
        <offset>0</offset>
        <size>7072</size>
        <length>3942</length>
        <extracted-checksum style="md5">0f7061dca2d7411352377db0e53792db</checksum>
        <archived-checksum style="md5">c72de8ac25abe462a930254d82958534</checksum>
        <encoding style="application/x-gzip"/>
      </ea>
    </file>
  </toc>
</xar>

Mucchio

L’heap inizia subito dopo il toc compresso. È un mucchio di dati non strutturato a cui fa riferimento il TOC. I valori di offset elencati in TOC iniziano dall’inizio dell’heap. I valori di lunghezza nel toc si riferiscono al numero effettivo di byte memorizzati nell’heap (compresso o meno) mentre il valore di dimensione si riferisce alla dimensione estratta dell’elemento (dopo la decompressione se necessario).

Riferimenti