總覽
Fuchsia 封存格式是一種將目錄樹狀結構儲存在檔案中的格式。與 .tar 或 .zip 檔案一樣,Fuchsia 封存檔案會儲存從路徑名稱到檔案內容的對應。
Fuchsia 封存檔案有時稱為 FAR 或 FAR 封存,副檔名為 .far。
如需建立及建構 Fuchsia 套件、檢查套件內容等操作說明,請參閱「使用 Fuchsia 套件開發」。
格式
封存檔是一連串位元組,分為多個區塊:
- 第一個區塊是索引區塊,說明其他區塊在封存檔中的位置。
- 索引中列出的所有區塊都必須按照索引中列出的順序 (依類型排序) 顯示在封存檔中。
- 封存檔可能包含索引中未參照的其他區塊,但這些區塊必須在索引中列出的所有區塊之後,才會出現在封存檔中。例如,內容區塊不會列在索引中。而是可從目錄區塊連到內容區塊。
- 區塊不得重疊。
- 所有區塊都會在 64 位元邊界上對齊。
- 所有區塊都必須盡可能緊密排列,並遵守對齊限制。
- 區塊之間的任何間隙都必須填入零。
所有偏移和長度都會以小端序編碼為不帶正負號的整數。
索引區塊
索引區塊為必要項目,且必須位於封存檔開頭。
- 8 個位元組的魔術。
- 必須是 0xc8 0xbf 0x0b 0x48 0xad 0xab 0xc5 0x11。
- 串連索引項目的 64 位元長度 (以位元組為單位)。
- 串連的索引項目。
任何兩個索引項目都不得具有相同類型,且項目必須依類型以遞增的字典順序排序 (例如,透過 memcmp 比較)。索引中列出的區塊必須按照索引中列出的順序儲存在封存檔中。
索引項目
- 64 位元區塊類型。
- 從封存檔開頭到參照區塊開頭的 64 位元偏移量,以位元組為單位。
- 參照區塊的 64 位元長度 (以位元組為單位)。
目錄區塊 (類型「DIR-----」)
必須提供目錄區塊。目錄區塊中的項目必須具有不重複的名稱,且項目必須按照名稱以遞增的字典順序排序 (例如,與 memcmp 相比)。
- 串連的目錄資料表項目。
這些項目代表封存檔中的檔案。目錄本身不會明確表示,這表示封存檔無法表示空白目錄。
目錄表格項目
- 名稱。
- 從目錄名稱區塊開頭到路徑資料的 32 位元偏移量,以位元組為單位。
- 名稱長度 (16 位元,以位元組為單位)。
- 16 位元的零,保留供日後使用。
- 資料。
- 從封存檔開頭到內容區塊開頭的 64 位元偏移量,以位元組為單位。
- 資料的 64 位元長度 (以位元組為單位)。
- 64 位元的零,保留供日後使用。
目錄名稱區塊 (類型「DIRNAMES」)
目錄名稱區塊是必要區塊,目錄區塊會使用這個區塊來命名內容區塊。路徑資料必須按照遞增的字典順序排序 (例如,與 memcmp 相比)。
- 串連的路徑資料 (未指定編碼)。
- 補零至下一個 8 位元組邊界。
雖然未指定編碼,但如果用戶端想使用 Unicode 顯示路徑資料,可能會嘗試將資料解碼為 UTF-8。路徑資料不一定是 UTF-8,因此解碼可能會失敗。
路徑資料
- 路徑的八位元組。
- 不得留空。
- 不得包含 0x00 八位元組。
- 開頭的八位元組不得為 0x2F ('/')。
- 結尾八位元組不得為 0x2F ('/')。
- 將路徑以 0x2F ('/') 分割,結果為區段。每個區段都必須符合下列規定:
- 不得留空。
- 不得為 0x2E ('.')
- 不得為 0x2E 0x2E ('..')
內容區塊
內容區塊必須位於索引區塊中列出的所有區塊之後。內容區塊在封存檔中的顯示順序,必須與目錄中的順序相同。
- 資料
資料必須從封存檔開頭對齊 4096 位元組邊界,且必須以零填補資料,直到下一個 4096 位元組邊界。