Skip to content

Latest commit

 

History

History
49 lines (42 loc) · 1.54 KB

README.md

File metadata and controls

49 lines (42 loc) · 1.54 KB

rusttar

This project is to implement the basic TAR format in Rust as specified by GNU. Also wikipedia has a really good reference on the format.

To start out, it will only implement the list function of tar. It will take an already created archive and read the data structures to list all of the files. Once that is working, I will go back and add in the create and untar functions.

A tar archive is a sequential file format with each file stored in it given a header and stored as-is. The header contains metadata about the file:

  • File name
  • File mode
  • Owner's UID
  • Group's GID
  • File size in Octal
  • Last modified in seconds since Unix epoch in Octal
  • Checksum for the header
  • File type flag
  • Linked file name (if it's a linked file)
  • The string "ustar\0"
  • UStar version of "00"
  • Owner user name
  • Owner group name
  • Device major number
  • Device minor number
  • Filename prefix

tar can store many different file types. The type of file is one of the fields in the header. It is stored as a single character:

  • Normal file: '0' or '\0'
  • Hard link: '1'
  • Symbolic link: '2'
  • Character special: '3'
  • Block special: '4'
  • Directory: '5'
  • FIFO: '6'
  • Contiguous file: '7'
  • Global extended header with metadata: 'g'
  • Extended header with metadata for the next file in the archive: 'x'
  • Vendor extension: 'A'-'Z'

The project is laid out as a binary but really the binary is just a wrapper around a tar library.