aboutsummaryrefslogtreecommitdiff
path: root/src/include/pgtar.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/pgtar.h')
-rw-r--r--src/include/pgtar.h39
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,