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