|
|
@@ -4,7 +4,7 @@
|
|
|
<title>APT Cache File Format</title>
|
|
|
|
|
|
<author>Jason Gunthorpe <email>jgg@debian.org</email></author>
|
|
|
-<version>$Id: cache.sgml,v 1.1 1998/07/02 02:58:12 jgg Exp $</version>
|
|
|
+<version>$Id: cache.sgml,v 1.2 1998/07/05 05:43:09 jgg Exp $</version>
|
|
|
|
|
|
<abstract>
|
|
|
This document describes the complete implementation and format of the APT
|
|
|
@@ -19,7 +19,7 @@ structures used by the package library and the APT GUI.
|
|
|
</abstract>
|
|
|
|
|
|
<copyright>
|
|
|
-Copyright © Jason Gunthorpe, 1997.
|
|
|
+Copyright © Jason Gunthorpe, 1997-1998.
|
|
|
<p>
|
|
|
APT and this document are free software; you can redistribute them and/or
|
|
|
modify them under the terms of the GNU General Public License as published
|
|
|
@@ -81,7 +81,7 @@ effects.
|
|
|
Every item in every structure is stored as the index to that structure.
|
|
|
What this means is that once the files is mmaped every data access has to
|
|
|
go through a fixup stage to get a real memory pointer. This is done
|
|
|
-by taking the tndex, multiplying it by the type size and then adding
|
|
|
+by taking the index, multiplying it by the type size and then adding
|
|
|
it to the start address of the memory block. This sounds complex, but
|
|
|
in C it is a single array dereference. Because all items are aligned to
|
|
|
their size and indexs are stored as multiples of the size of the structure
|
|
|
@@ -133,7 +133,8 @@ This is the first item in the file.
|
|
|
unsigned short VersionSz;
|
|
|
unsigned short DependencySz;
|
|
|
unsigned short ProvidesSz;
|
|
|
-
|
|
|
+ unsigned short VerFileSz;
|
|
|
+
|
|
|
// Structure counts
|
|
|
unsigned long PackageCount;
|
|
|
unsigned long VersionCount;
|
|
|
@@ -144,11 +145,14 @@ This is the first item in the file.
|
|
|
unsigned long FileList; // PackageFile
|
|
|
unsigned long StringList; // StringItem
|
|
|
|
|
|
- // Pool structures
|
|
|
- unsigned long PoolStart[6];
|
|
|
- unsigned long PoolSize[6];
|
|
|
- unsigned long PoolAln[6];
|
|
|
-
|
|
|
+ // Allocation pools
|
|
|
+ struct
|
|
|
+ {
|
|
|
+ unsigned long ItemSize;
|
|
|
+ unsigned long Start;
|
|
|
+ unsigned long Count;
|
|
|
+ } Pools[7];
|
|
|
+
|
|
|
// Package name lookup
|
|
|
unsigned long HashTable[512]; // Package
|
|
|
};
|
|
|
@@ -173,6 +177,7 @@ be erased and rebuilt if it is true.
|
|
|
<tag>PackageFileSz
|
|
|
<tag>VersionSz
|
|
|
<tag>DependencySz
|
|
|
+<tag>VerFileSz
|
|
|
<tag>ProvidesSz<item>
|
|
|
*Sz contains the sizeof() that particular structure. It is used as an
|
|
|
extra consistancy check on the structure of the file.
|
|
|
@@ -198,15 +203,14 @@ This contains a list of all the unique strings (string item type strings) in
|
|
|
the cache. The parser reads this list into memory so it can match strings
|
|
|
against it.
|
|
|
|
|
|
-<tag>PoolStart
|
|
|
-<tag>PoolSize
|
|
|
-<tag>PoolAln<item>
|
|
|
+<tag>Pools<item>
|
|
|
The Pool structures manage the allocation pools that the generator uses.
|
|
|
-Start indicates the first byte of the pool, Size is the number of bytes
|
|
|
-remaining in the pool and Aln (alignment) is the structure size of the pool.
|
|
|
-An Aln of 0 indicates the slot is empty. There should be the same number of
|
|
|
-slots as there are structure types. The generator stores this information
|
|
|
-so future additions can make use of any unused pool blocks.
|
|
|
+Start indicates the first byte of the pool, Count is the number of objects
|
|
|
+remaining in the pool and ItemSize is the structure size (alignment factor)
|
|
|
+of the pool. An ItemSize of 0 indicates the pool is empty. There should be
|
|
|
+the same number of pools as there are structure types. The generator
|
|
|
+stores this information so future additions can make use of any unused pool
|
|
|
+blocks.
|
|
|
|
|
|
<tag>HashTable<item>
|
|
|
HashTable is a hash table that provides indexing for all of the packages.
|
|
|
@@ -260,7 +264,7 @@ the Header->HashTable.
|
|
|
|
|
|
// Unique ID for this pkg
|
|
|
unsigned short ID;
|
|
|
- unsigned short Flags;
|
|
|
+ unsigned long Flags;
|
|
|
};
|
|
|
</example>
|
|
|
|
|
|
@@ -349,7 +353,7 @@ Header.FileList
|
|
|
// Linked list
|
|
|
unsigned long NextFile; // PackageFile
|
|
|
unsigned short ID;
|
|
|
- unsigned short Flags;
|
|
|
+ unsigned long Flags;
|
|
|
time_t mtime; // Modification time
|
|
|
};
|
|
|
</example>
|
|
|
@@ -396,16 +400,15 @@ VerStr).
|
|
|
struct Version
|
|
|
{
|
|
|
unsigned long VerStr; // Stringtable
|
|
|
- unsigned long File; // PackageFile
|
|
|
unsigned long Section; // StringTable (StringItem)
|
|
|
|
|
|
// Lists
|
|
|
+ unsigned long FileList; // VerFile
|
|
|
unsigned long NextVer; // Version
|
|
|
unsigned long DependsList; // Dependency
|
|
|
unsigned long ParentPkg; // Package
|
|
|
unsigned long ProvidesList; // Provides
|
|
|
-
|
|
|
- unsigned long Offset;
|
|
|
+
|
|
|
unsigned long Size;
|
|
|
unsigned long InstalledSize;
|
|
|
unsigned short ID;
|
|
|
@@ -417,11 +420,11 @@ VerStr).
|
|
|
<tag>VerStr<item>
|
|
|
This is the complete version string.
|
|
|
|
|
|
-<tag>File<item>
|
|
|
-References the PackageFile that this version came out of. File can be used
|
|
|
-to determine what distribution the Version applies to. If File is 0 then
|
|
|
-this is a blank version. The structure should also have a 0 in all other
|
|
|
-fields excluding VerStr and Possibly NextVer.
|
|
|
+<tag>FileList<item>
|
|
|
+References the all the PackageFile's that this version came out of. FileList
|
|
|
+can be used to determine what distribution(s) the Version applies to. If
|
|
|
+FileList is 0 then this is a blank version. The structure should also have
|
|
|
+a 0 in all other fields excluding VerStr and Possibly NextVer.
|
|
|
|
|
|
<tag>Section<item>
|
|
|
This string indicates which section it is part of. The string should be
|
|
|
@@ -440,10 +443,6 @@ to determine the package.
|
|
|
<tag>ProvidesList<item>
|
|
|
Head of the linked list of Provides::NextPkgProv, forward provides.
|
|
|
|
|
|
-<tag>Offset<item>
|
|
|
-The byte offset of the first line of this item in the specified
|
|
|
-PackageFile
|
|
|
-
|
|
|
<tag>Size
|
|
|
<tag>InstalledSize<item>
|
|
|
The archive size for this version. For debian this is the size of the .deb
|
|
|
@@ -562,6 +561,37 @@ Next link in the singly linked list of provides (based off package)
|
|
|
<tag>NextPkgProv<item>
|
|
|
Next link in the singly linked list of provides for 'Version'.
|
|
|
|
|
|
+</taglist>
|
|
|
+
|
|
|
+ <!-- }}} -->
|
|
|
+<!-- VerFile {{{ -->
|
|
|
+<!-- ===================================================================== -->
|
|
|
+<sect>VerFile
|
|
|
+<p>
|
|
|
+VerFile associates a version with a PackageFile, this allows a full
|
|
|
+description of all Versions in all files (and hence all sources) under
|
|
|
+consideration.
|
|
|
+
|
|
|
+<example>
|
|
|
+ struct pkgCache::VerFile
|
|
|
+ {
|
|
|
+ unsigned long File; // PackageFile
|
|
|
+ unsigned long NextFile; // PkgVerFile
|
|
|
+ unsigned long Offset;
|
|
|
+ unsigned short Size;
|
|
|
+ }
|
|
|
+</example>
|
|
|
+<taglist>
|
|
|
+<tag>File<item>
|
|
|
+The index of the package file that this version was found in.
|
|
|
+
|
|
|
+<tag>NextFile<item>
|
|
|
+The next step in the linked list.
|
|
|
+
|
|
|
+<tag>Offset
|
|
|
+<tag>Size<item>
|
|
|
+These describe the exact position in the package file for the section from
|
|
|
+this version.
|
|
|
</taglist>
|
|
|
|
|
|
<!-- }}} -->
|