diff options
Diffstat (limited to 'src/include/pgtar.h')
-rw-r--r-- | src/include/pgtar.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/include/pgtar.h b/src/include/pgtar.h index 661f9d7c59f..8abfb9c19c3 100644 --- a/src/include/pgtar.h +++ b/src/include/pgtar.h @@ -23,6 +23,45 @@ enum tarError TAR_SYMLINK_TOO_LONG }; +/* + * Offsets of fields within a 512-byte tar header. + * + * "tar number" values should be generated using print_tar_number() and can be + * read using read_tar_number(). Fields that contain strings are generally + * both filled and read using strlcpy(). + * + * The value for the checksum field can be computed using tarChecksum(). + * + * Some fields are not used by PostgreSQL; see tarCreateHeader(). + */ +enum tarHeaderOffset +{ + TAR_OFFSET_NAME = 0, /* 100 byte string */ + TAR_OFFSET_MODE = 100, /* 8 byte tar number, excludes S_IFMT */ + TAR_OFFSET_UID = 108, /* 8 byte tar number */ + TAR_OFFSET_GID = 116, /* 8 byte tar number */ + TAR_OFFSET_SIZE = 124, /* 8 byte tar number */ + TAR_OFFSET_MTIME = 136, /* 12 byte tar number */ + TAR_OFFSET_CHECKSUM = 148, /* 8 byte tar number */ + TAR_OFFSET_TYPEFLAG = 156, /* 1 byte file type, see TAR_FILETYPE_* */ + TAR_OFFSET_LINKNAME = 157, /* 100 byte string */ + TAR_OFFSET_MAGIC = 257, /* "ustar" with terminating zero byte */ + TAR_OFFSET_VERSION = 263, /* "00" */ + TAR_OFFSET_UNAME = 265, /* 32 byte string */ + TAR_OFFSET_GNAME = 297, /* 32 byte string */ + TAR_OFFSET_DEVMAJOR = 329, /* 8 byte tar number */ + TAR_OFFSET_DEVMINOR = 337, /* 8 byte tar number */ + TAR_OFFSET_PREFIX = 345 /* 155 byte string */ + /* last 12 bytes of the 512-byte block are unassigned */ +}; + +enum tarFileType +{ + TAR_FILETYPE_PLAIN = '0', + TAR_FILETYPE_SYMLINK = '2', + TAR_FILETYPE_DIRECTORY = '5' +}; + extern enum tarError tarCreateHeader(char *h, const char *filename, const char *linktarget, pgoff_t size, mode_t mode, uid_t uid, gid_t gid, |