Skip to main content

SqpkFile

Struct SqpkFile 

Source
pub struct SqpkFile {
    pub operation: SqpkFileOperation,
    pub file_offset: i64,
    pub file_size: i64,
    pub expansion_id: u16,
    pub path: String,
    pub block_source_offsets: Vec<u64>,
    pub blocks: Vec<SqpkCompressedBlock>,
}
Expand description

SQPK F command body: a file-level operation on the game install tree.

Unlike the block-oriented commands (A, D, E) that target SqPack archive internals, F operates on whole files in the install directory. The operation to perform is selected by operation.

§Wire format

┌──────────────────────────────────────────────────────────────────────────┐
│ operation    : u8      b'A', b'R', b'D', or b'M'                        │  byte 0
│ <padding>    : [u8; 2] (always zero)                                     │  bytes 1–2
│ file_offset  : u64 BE  destination byte offset within the target file    │  bytes 3–10
│ file_size    : u64 BE  declared size of the target file after operation  │  bytes 11–18
│ path_len     : u32 BE  byte length of the path field (including NUL)     │  bytes 19–22
│ expansion_id : u16 BE  expansion folder selector for `RemoveAll`         │  bytes 23–24
│ <padding>    : [u8; 2] (always zero)                                     │  bytes 25–26
│ path         : [u8; path_len]  NUL-terminated UTF-8 path                │  bytes 27–…
│ [blocks]     : SqpkCompressedBlock…  (only for `AddFile`)                │
└──────────────────────────────────────────────────────────────────────────┘

file_offset and file_size are stored as big-endian u64 in the wire format but cast to i64 after parsing (negative values in file_offset cause ZiPatchError::NegativeFileOffset at apply time).

The NUL terminator in path is stripped during parsing; path always contains a clean UTF-8 string.

For AddFile operations the remaining bytes in the command body after the path form a sequence of SqpkCompressedBlocks (see that type’s documentation for the block wire format). For all other operations the block list is empty.

§Reference

See SqpkFile.cs in the XIVLauncher reference implementation.

§Errors

Parsing returns a crate::ZiPatchError if:

Fields§

§operation: SqpkFileOperation

The file operation to perform.

§file_offset: i64

Destination byte offset within the target file.

For AddFile: if zero, the target file is truncated to zero before writing (complete replacement); if positive, writing begins at this byte offset in the existing file. Negative values (cast from the raw u64) are rejected at apply time with ZiPatchError::NegativeFileOffset.

Unused by RemoveAll, DeleteFile, and MakeDirTree.

§file_size: i64

Declared total size of the target file after the operation, in bytes.

Informational; the apply layer does not use this to pre-allocate or truncate the file (truncation is controlled by file_offset == 0).

§expansion_id: u16

Expansion folder selector used by RemoveAll.

0ffxiv (base game), n > 0ex<n>. Corresponds to the high byte of sub_id in block-oriented commands.

§path: String

Relative path to the target file or directory under the game install root.

NUL terminator is stripped during parsing. For AddFile / DeleteFile this is joined with the install root via generic_path. For MakeDirTree it is the directory tree to create.

§block_source_offsets: Vec<u64>

Byte offset of each block’s data payload — measured from the start of the SQPK command body slice — after skipping the block’s 16-byte header.

block_source_offsets[i] corresponds to blocks[i]. Adding the chunk’s absolute position in the patch file to this offset gives the patch-file byte offset where the block’s data begins, enabling IndexedZiPatch random-access reads that do not need to decompress the full stream.

Empty for all operations other than AddFile.

§blocks: Vec<SqpkCompressedBlock>

Inline compressed-or-raw block payloads that make up the file content.

Only populated for AddFile; empty for RemoveAll, DeleteFile, and MakeDirTree. Each block is decompressed in sequence into the target file by the apply layer. See SqpkCompressedBlock for the block wire format and DEFLATE discrimination logic.

Trait Implementations§

Source§

impl Clone for SqpkFile

Source§

fn clone(&self) -> SqpkFile

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SqpkFile

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for SqpkFile

Source§

fn eq(&self, other: &SqpkFile) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for SqpkFile

Source§

impl StructuralPartialEq for SqpkFile

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more