Search code examples
archivetar

How to check whether a file is in tar format?


I want to implement a check of a tar file. I am not interested only to check the file extension, but I need surer way to check. For example for zip format I could check some lead bytes. But what is the way for tar files?

Regards, B


Solution

  • Check the magic bytes at offset 257. If they match "ustar" including the null terminator, the file is probably a tar.

    See: http://www.gnu.org/software/tar/manual/html_node/Standard.html

    /* tar Header Block, from POSIX 1003.1-1990.  */
    
    /* POSIX header.  */
    
    struct posix_header
    {                              /* byte offset */
      char name[100];               /*   0 */
      char mode[8];                 /* 100 */
      char uid[8];                  /* 108 */
      char gid[8];                  /* 116 */
      char size[12];                /* 124 */
      char mtime[12];               /* 136 */
      char chksum[8];               /* 148 */
      char typeflag;                /* 156 */
      char linkname[100];           /* 157 */
      char magic[6];                /* 257 */
      char version[2];              /* 263 */
      char uname[32];               /* 265 */
      char gname[32];               /* 297 */
      char devmajor[8];             /* 329 */
      char devminor[8];             /* 337 */
      char prefix[155];             /* 345 */
                                    /* 500 */
    };
    
    #define TMAGIC   "ustar"        /* ustar and a null */
    #define TMAGLEN  6