SimpleArchiver/file_format.md
Stephen Seo e0373d693d
All checks were successful
Run Unit Tests / build-and-run-unit-tests (push) Successful in 45s
Update file_format.md
Make strings NULL-terminated.
2024-07-04 13:48:39 +09:00

2.1 KiB

File Format

Format Version 0

File extension is "*.simplearchive"

First 18 bytes of file will be:

SIMPLE_ARCHIVE_VER

Next 2 bytes is 16-bit unsigned integer "version" in big-endian. In this case, it will be zero.

Next 4 bytes are bit-flags.

  1. The first byte
    1. The first bit is set if de/compressor is set for this archive.

The remaining unused flags are reserved for future revisions and are currently ignored.

If the previous "de/compressor is set" flag is enabled, then the next section is added:

  1. 2 bytes is 16-bit unsigned integer "compressor cmd+args" in big-endian. This does not include the NULL at the end of the string.
  2. X bytes of "compressor cmd+args" (length defined by previous value). Is a NULL-terminated string.
  3. 2 bytes is 16-bit unsigned integer "decompressor cmd+args" in big-endian. This does not include the NULL at the end of the string.
  4. X bytes of "decompressor cmd+args" (length defined by previous value). Is a NULL-terminated string.

The next 4 bytes is 32-bit unsigned integer "file count" in big-endian which will indicate the number of files in this archive.

Following the file-count bytes, the following bytes are added for each file:

  1. 2 bytes is 16-bit unsigned integer "filename length" in big-endian. This does not include the NULL at the end of the string.
  2. X bytes of filename (length defined by previous value). Is a NULL-terminated string.
  3. 4 bytes bit-flags
    1. The first byte
      1. The first bit is set if the file is a symbolic link.
    2. The second byte.
      1. Currently unused.
    3. The third byte.
      1. Currently unused.
    4. The fourth byte.
      1. Currently unused.
  4. If this file is a symbolic link:
    1. 2 bytes is 16-bit unsigned integer "link target path" in big-endian. This does not include the NULL at the end of the string.
    2. X bytes of link-target-path (length defined by previous value). Is a NULL-terminated string.
  5. If this file is NOT a symbolic link:
    1. 8 bytes 64-bit unsigned integer "size of filename in this archive file".
    2. X bytes file data (length defined by previous value).