/* * 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 #include #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 */