summaryrefslogtreecommitdiff
path: root/usr/src/head/archives.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/head/archives.h')
-rw-r--r--usr/src/head/archives.h287
1 files changed, 287 insertions, 0 deletions
diff --git a/usr/src/head/archives.h b/usr/src/head/archives.h
new file mode 100644
index 0000000000..cd303130db
--- /dev/null
+++ b/usr/src/head/archives.h
@@ -0,0 +1,287 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright (c) 1988,1997-1998,2001 by Sun Microsystems, Inc.
+ * All rights reserved.
+ */
+
+/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
+/* All Rights Reserved */
+
+
+#ifndef _ARCHIVES_H
+#define _ARCHIVES_H
+
+#pragma ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.7 */
+
+#include <tar.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Magic numbers */
+
+#define CMN_ASC 0x070701 /* Cpio Magic Number for ASCii header */
+#define CMN_BIN 070707 /* Cpio Magic Number for Binary header */
+#define CMN_BBS 0143561 /* Cpio Magic Number for Byte-Swap header */
+#define CMN_CRC 0x070702 /* Cpio Magic Number for CRC header */
+#define CMS_ASC "070701" /* Cpio Magic String for ASCii header */
+#define CMS_CHR "070707" /* Cpio Magic String for CHR (-c) header */
+#define CMS_CRC "070702" /* Cpio Magic String for CRC header */
+#define CMS_LEN 6 /* Cpio Magic String LENgth */
+
+/* Various header and field lengths */
+
+#define CHRSZ 76 /* -c hdr size minus filename field */
+#define ASCSZ 110 /* ASC and CRC hdr size minus filename field */
+#define TARSZ 512 /* TAR hdr size */
+
+#define HNAMLEN 256 /* maximum filename length for binary and -c headers */
+#define EXPNLEN 1024 /* maximum filename length for ASC and CRC headers */
+#define HTIMLEN 2 /* length of modification time field */
+#define HSIZLEN 2 /* length of file size field */
+
+/* cpio binary header definition */
+
+struct hdr_cpio {
+ short h_magic, /* magic number field */
+ h_dev; /* file system of file */
+ ushort_t h_ino, /* inode of file */
+ h_mode, /* modes of file */
+ h_uid, /* uid of file */
+ h_gid; /* gid of file */
+ short h_nlink, /* number of links to file */
+ h_rdev, /* maj/min numbers for special files */
+ h_mtime[HTIMLEN], /* modification time of file */
+ h_namesize, /* length of filename */
+ h_filesize[HSIZLEN]; /* size of file */
+ char h_name[HNAMLEN]; /* filename */
+};
+
+/* cpio ODC header format */
+
+struct c_hdr {
+ char c_magic[CMS_LEN],
+ c_dev[6],
+ c_ino[6],
+ c_mode[6],
+ c_uid[6],
+ c_gid[6],
+ c_nlink[6],
+ c_rdev[6],
+ c_mtime[11],
+ c_namesz[6],
+ c_filesz[11],
+ c_name[HNAMLEN];
+};
+
+/* -c and CRC header format */
+
+struct Exp_cpio_hdr {
+ char E_magic[CMS_LEN],
+ E_ino[8],
+ E_mode[8],
+ E_uid[8],
+ E_gid[8],
+ E_nlink[8],
+ E_mtime[8],
+ E_filesize[8],
+ E_maj[8],
+ E_min[8],
+ E_rmaj[8],
+ E_rmin[8],
+ E_namesize[8],
+ E_chksum[8],
+ E_name[EXPNLEN];
+};
+
+/* Tar header structure and format */
+
+#define TBLOCK 512 /* length of tar header and data blocks */
+#define TNAMLEN 100 /* maximum length for tar file names */
+#define TMODLEN 8 /* length of mode field */
+#define TUIDLEN 8 /* length of uid field */
+#define TGIDLEN 8 /* length of gid field */
+#define TSIZLEN 12 /* length of size field */
+#define TTIMLEN 12 /* length of modification time field */
+#define TCRCLEN 8 /* length of header checksum field */
+
+/* tar header definition */
+
+union tblock {
+ char dummy[TBLOCK];
+ struct tar_hdr {
+ char t_name[TNAMLEN], /* name of file */
+ t_mode[TMODLEN], /* mode of file */
+ t_uid[TUIDLEN], /* uid of file */
+ t_gid[TGIDLEN], /* gid of file */
+ t_size[TSIZLEN], /* size of file in bytes */
+ t_mtime[TTIMLEN], /* modification time of file */
+ t_cksum[TCRCLEN], /* checksum of header */
+ t_typeflag,
+ t_linkname[TNAMLEN], /* file this file linked with */
+ t_magic[TMAGLEN],
+ t_version[TVERSLEN],
+ t_uname[32],
+ t_gname[32],
+ t_devmajor[8],
+ t_devminor[8],
+ t_prefix[155];
+ } tbuf;
+};
+
+/* volcopy tape label format and structure */
+
+#define VMAGLEN 8
+#define VVOLLEN 6
+#define VFILLEN 464
+
+struct volcopy_label {
+ char v_magic[VMAGLEN],
+ v_volume[VVOLLEN],
+ v_reels,
+ v_reel;
+ int v_time,
+ v_length,
+ v_dens,
+ v_reelblks, /* u370 added field */
+ v_blksize, /* u370 added field */
+ v_nblocks; /* u370 added field */
+ char v_fill[VFILLEN];
+ int v_offset; /* used with -e and -reel options */
+ int v_type; /* does tape have nblocks field? */
+};
+
+/*
+ * Define archive formats for extended attributes.
+ *
+ * Extended attributes are stored in two pieces.
+ * 1. An attribute header which has information about
+ * what file the attribute is for and what the attribute
+ * is named.
+ * 2. The attribute record itself. Stored as a normal file type
+ * of entry.
+ * Both the header and attribute record have special modes/typeflags
+ * associated with them.
+ *
+ * The names of the header in the archive look like:
+ * /dev/null/attr.hdr
+ *
+ * The name of the attribute looks like:
+ * /dev/null/attr.
+ *
+ * This is done so that an archiver that doesn't understand these formats
+ * can just dispose of the attribute records unless the user chooses to
+ * rename them via cpio -r or pax -i
+ *
+ * The format is composed of a fixed size header followed
+ * by a variable sized xattr_buf. If the attribute is a hard link
+ * to another attribute, then another xattr_buf section is included
+ * for the link.
+ *
+ * The xattr_buf is used to define the necessary "pathing" steps
+ * to get to the extended attribute. This is necessary to support
+ * a fully recursive attribute model where an attribute may itself
+ * have an attribute.
+ *
+ * The basic layout looks like this.
+ *
+ * --------------------------------
+ * | |
+ * | xattr_hdr |
+ * | |
+ * --------------------------------
+ * --------------------------------
+ * | |
+ * | xattr_buf |
+ * | |
+ * --------------------------------
+ * --------------------------------
+ * | |
+ * | (optional link info) |
+ * | |
+ * --------------------------------
+ * --------------------------------
+ * | |
+ * | attribute itself |
+ * | stored as normal tar |
+ * | or cpio data with |
+ * | special mode or |
+ * | typeflag |
+ * | |
+ * --------------------------------
+ *
+ */
+#define XATTR_ARCH_VERS "1.0"
+
+/*
+ * extended attribute fixed header
+ *
+ * h_version format version.
+ * h_size size of header + variable sized data sections.
+ * h_component_len Length of entire pathing section.
+ * h_link_component_len Length of link component section. Again same definition
+ * as h_component_len.
+ */
+struct xattr_hdr {
+ char h_version[7];
+ char h_size[10];
+ char h_component_len[10]; /* total length of path component */
+ char h_link_component_len[10];
+};
+
+/*
+ * The name is encoded like this:
+ * filepathNULattrpathNUL[attrpathNULL]...
+ */
+struct xattr_buf {
+ char h_namesz[7]; /* length of h_names */
+ char h_typeflag; /* actual typeflag of file being archived */
+ char h_names[1]; /* filepathNULattrpathNUL... */
+};
+
+/*
+ * Special values for tar archives
+ */
+
+/*
+ * typeflag for tar archives.
+ */
+
+/*
+ * Attribute hdr and attribute files have the following typeflag
+ */
+#define _XATTR_HDRTYPE 'E'
+
+/*
+ * For cpio archives the header and attribute have
+ * _XATTR_CPIO_MODE ORED into the mode field in both
+ * character and binary versions of the archive format
+ */
+#define _XATTR_CPIO_MODE 0xB000
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ARCHIVES_H */