Fuchsia 封存格式 (FAR)

簡介

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 位元組邊界之前填充零。