2.4.1 FileNodeListFragment

The FileNodeListFragment structure specifies a sequence of file nodes from a file node list (section 2.4). The size of the FileNodeListFragment structure is specified by the structure that references it. All fragments in the same file node list MUST have the same FileNodeListFragment.header.FileNodeListID field.

This structure has the following format.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

header (16 bytes)

...

...

rgFileNodes (variable)

...

padding (variable)

...

nextFragment

...

...

footer

...

header (16 bytes): A FileNodeListHeader structure (section 2.4.2).

rgFileNodes (variable): A stream of bytes that contains a sequence of FileNode structures (section 2.4.3). The stream is terminated when any of the following conditions is met:

§ The number of bytes between the end of the last read FileNode and the nextFragment field is less than 4 bytes.

  • A FileNode structure with a FileNodeID field value equal to 0x0FF (ChunkTerminatorFND structure, section 2.4.3) is read. If a ChunkTerminatorFND structure is present, the value of the nextFragment field MUST be a valid FileChunkReference64x32 structure (section 2.2.4.4) to the next FileNodeListFragment structure.

§ The number of FileNode structures read for the containing file node list is equal to the number of nodes specified for the list by the transaction log (section 2.3.3) in the last TransactionEntry (section 2.3.3.2) that modified the list. In this case the nextFragment field MUST be ignored.

padding (variable): An optional array of bytes between the last FileNode structure in the rgFileNodes field and the nextFragment field. Undefined and MUST be ignored.

nextFragment (12 bytes): A FileChunkReference64x32 structure (section 2.2.4.4) that specifies whether there are more fragments in this file node list, and if so, the location and size of the next fragment.

If this is the last fragment, the value of the nextFragment field MUST be "fcrNil" (see section 2.2.4). Otherwise the value of the nextFragment.stp field MUST specify the location of a valid FileNodeListFragment structure, and the value of the nextFragment.cb field MUST be equal to the size of the referenced fragment including the FileNodeListFragment.header field and the FileNodeListFragment.footer field.

The location of the nextFragment field is calculated by adding the size of this FileNodeListFragment structure minus the size of the nextFragment and footer fields to the location of this FileNodeListFragment structure.

footer (8 bytes): An unsigned integer; MUST be "0x8BC215C38233BA4B". Specifies the end of the FileNodeListFragment structure.