.TH XPAK 5 "March 2009" "Portage VERSION" "Portage"
.SH NAME
xpak \- The XPAK Data Format
.SH NOTES
.SS Data Types
.IP Integer
every offset or length(len) value in this documentation will be an unsigned
32bit integer in big endian byte order(32bit unsigned big int or uint32(big)
).
.IP String
All strings, mentioned in this documentation are ASCII encoded, and not
nullterminated
.IP Values
The actual values of the individual xpak entries are stored as Strings.
.P
.SS Vertical Bars
The vertical bars '|' are not part of the file format, they are merely used to
illustrate how the offset values apply to the data.

.SH SYNOPSIS

.IP tarball
     |<-xpak_offset->|
.br
<tar>|<    xpak     >|<xpak_offset>"STOP"

.IP xpak
"XPAKPACK"<index_len><data_len><index><data>"XPAKSTOP"

.IP index
|<-------------index_len------------->|
.br
|<index1><index2><index3><index4><...>|

.IP indexN
          |<-name_len->|
.br
<name_len>|<   name   >|<data_offset><data_len>

.IP data
|<--------------data_len------------->|
.br
|<-dataN_offset->|<-dataN_len->|
.br
|<     data     >|<  data_N   >|<data>|

.SH DETAILED
Every gentoo binary package has a xpak attached to it which contains build
time information like the use flags it was built with, the ebuild it was
built from, the environmental variables, CFLAGs, CXXFLAGs, ....

.SS xpak

If you look at a gentoo binary package (binpkg) with a hex-editor you'll
notice the behinf the data, which belongs to the tarball you find a binary
blob - the
.I xpak
, an offset which holds the bytes from the start of the
.I xpak
to the end of the file - 
.I xpak_offset
and finally the String
.I "STOP".

       |<xpak_offset>|
 <tbz2>|<---xpak---->|<xpak_offset>"STOP"|

Here you see the 
.I tbz2
archive, and the attached 
.I xpak
blob, the 
.I xpak-offset
and
the string
.I "STOP"
at the end.

If we read the offset value and count
.I offset
bytes backwards from the start of
.I xpak_offset
, we have found the start of the
.I xpak
Block which starts with the String
.I "XPAKPACK".
This xpak block consists of the string
.I "XPAKPACK"
, the length of the 
.I index
block - 
.I index-len
, the length of the data block -
.I data-len
, an 
.I index-len
bytes long binary blob with the 
.I index
, a 
.I data-len
bytes long binary blob with the
.I data
and the string 
.I "XPAKSTOP"
at the end:

                                |<index_len>|<data_len>|
 "XPAKPACK"<index_len><data_len>|<--index-->|<--data-->|"XPAKSTOP"

To actually get the 
.I index
and the
.I data
, we cut out
.I index_len
bytes after the end of 
.I data_len
 for the index block and then cut out the next 
.I data_len
bytes for the data block. If we have done everything right up to this point,
the following bytes would be the ASCII formatted string
.I "XPAKSTOP"
.

The actual data is truncated into one big block - so if we want to read it we
need the actual positions of each information in this big data block, this
information can be obtained using the indices which are stored in the
.I index
block.

.SS Index block
The index block consists of several truncated index blocks:

 |<-----------------------index_len---------------------->|
 |<index1><index2><index3><index4><index5><index6><index7>|

The
.I index
block holds all information we need to find the data we want in the 
.I data
block. It consists of truncated index elements with a length
.I index_len.
Each of those index elements stands for one information in the data block and
consists of the length of its name (
.I name_len>
), a 
.I name_len
 bytes long string (the Name of the data block), this index belongs to, the
offset of the 
.I data
block (
.I data_offset
) and the length of that data block (
.I data_len
):

           |<name_len>|
 <name_len>|<--name-->|<dataN_offset><dataN_len>

.SS Data block
the data block contains truncated data blocks with a total length of
.I data_len
:

 |<------------------------data_len------------------------>|
 |<data1><data2><data3><data4><data5><data6><data7><data...>|

This binary block is
.I data_len
bytes long and consists of truncated data.

To select one data element, we need the
.I data_offset
and the
.I data_len
from
the
.I index
, if we have those we can count
.I data_offset
bytes from the start of the
.I data
block, and then cut out the next
.I data_len
bytes. there we got our data block:

 |<-----dataN_offset----->|<--dataN_len->|
 |<data1data2data3data...>|<data-we-want>|
.SH AUTHORS
Lars Hartmann <lars@chaotika.org>
.SH "SEE ALSO"
.BR qtbz2 (1),
.BR quickpkg (1),
.BR qxpak (1)
