35 lines
1.1 KiB
Markdown
35 lines
1.1 KiB
Markdown
# mtar - Minitel Archiver
|
|
|
|
mtar is a file format for storing multiple files in a single file, much like tar, cpio or zip.
|
|
|
|
## File format
|
|
|
|
mtar archive files consist of a number of file entries, in any combination of the following formats:
|
|
|
|
### v1 format
|
|
|
|
- 0xFFFF (for differentiating versioned headers from legacy v0 headers)
|
|
- version byte, with the value 1
|
|
- 2 bytes file name length
|
|
- the file name
|
|
- 8 bytes file content length
|
|
- the file contents
|
|
|
|
### Legacy v0 format
|
|
|
|
- 2 bytes file name length
|
|
- the file name
|
|
- 2 bytes file content length
|
|
- the file contents
|
|
|
|
Archives are terminated either by the end of file, or a record with a name length of zero.
|
|
|
|
## libmtar
|
|
|
|
libmtar is the reference implementation of mtar. It provides two functions:
|
|
|
|
- `libmtar.genHeader(string: name, number: len): string`
|
|
Generates an mtar file header for a file called *name* that is *len* bytes long.
|
|
- `libmtar.iter(table: stream): function`
|
|
Given buffer *stream*, returns an iterator suitable for use with *for* that returns, for each iteration, the file name, a function to read from the file, and the length of the file.
|