/*
* cpio - copy file archives in and out
*
* Gunnar Ritter, Freiburg i. Br., Germany, April 2003.
*/
/*
* Copyright (c) 2003 Gunnar Ritter
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute
* it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source distribution.
*/
/* Sccsid @(#)cpio.h 1.28 (gritter) 2/24/07 */
#include <sys/types.h>
#include <sys/stat.h>
#include <inttypes.h>
enum {
FMT_NONE = 00000000, /* no format chosen yet */
TYP_PAX = 00000010, /* uses pax-like extended headers */
TYP_BE = 00000100, /* this binary archive is big-endian */
TYP_SGI = 00000200, /* SGI cpio -K flag binary archive */
TYP_SCO = 00000200, /* SCO UnixWare 7.1 extended archive */
TYP_CRC = 00000400, /* this has a SVR4 'crc' checksum */
TYP_BINARY = 00001000, /* this is a binary cpio type */
TYP_OCPIO = 00002000, /* this is an old cpio type */
TYP_NCPIO = 00004000, /* this is a SVR4 cpio type */
TYP_CRAY = 00010000, /* this is a Cray cpio archive */
TYP_CPIO = 00077000, /* this is a cpio type */
TYP_OTAR = 00100000, /* this is an old tar type */
TYP_USTAR = 00200000, /* this is a ustar type */
TYP_BAR = 00400000, /* this is a bar type */
TYP_TAR = 00700000, /* this is a tar type */
FMT_ODC = 00002001, /* POSIX ASCII cpio format */
FMT_DEC = 00002002, /* DEC extended cpio format */
FMT_BINLE = 00003001, /* binary (default) cpio format LE */
FMT_BINBE = 00003101, /* binary (default) cpio format BE */
FMT_SGILE = 00003201, /* IRIX-style -K binary format LE */
FMT_SGIBE = 00003301, /* IRIX-style -K binary format BE */
FMT_ASC = 00004001, /* SVR4 ASCII cpio format */
FMT_SCOASC = 00004201, /* UnixWare 7.1 ASCII cpio format */
FMT_CRC = 00004401, /* SVR4 ASCII cpio format w/checksum */
FMT_SCOCRC = 00004601, /* UnixWare 7.1 ASCII cpio w/checksum */
FMT_CRAY = 00010001, /* Cray cpio, UNICOS 6 and later */
FMT_CRAY5 = 00010002, /* Cray cpio, UNICOS 5 and earlier */
FMT_OTAR = 00100001, /* obsolete tar format */
FMT_TAR = 00200001, /* our tar format type */
FMT_USTAR = 00200002, /* ustar format */
FMT_GNUTAR = 00200003, /* GNU tar format type */
FMT_PAX = 00200011, /* POSIX.1-2001 pax format type */
FMT_SUN = 00200012, /* Sun extended tar format type */
FMT_BAR = 00400001, /* bar format type */
FMT_ZIP = 01000000 /* zip format */
} fmttype;
/*
* Zip compression method.
*/
enum cmethod {
C_STORED = 0, /* no compression */
C_SHRUNK = 1,
C_REDUCED1 = 2,
C_REDUCED2 = 3,
C_REDUCED3 = 4,
C_REDUCED4 = 5,
C_IMPLODED = 6,
C_TOKENIZED = 7,
C_DEFLATED = 8,
C_ENHDEFLD = 9,
C_DCLIMPLODED = 10,
C_PKRESERVED = 11,
C_BZIP2 = 12,
};
/*
* A collection of the interesting facts about a file in copy-in mode.
*/
struct file {
struct stat f_st; /* file stat */
long long f_rmajor; /* st_rdev major */
long long f_rminor; /* st_rdev minor */
long long f_dsize; /* display size */
long long f_csize; /* compressed size */
long long f_Kbase; /* base size for -K */
long long f_Krest; /* rest size for -K */
long long f_Ksize; /* faked -K size field */
char *f_name; /* file name */
size_t f_nsiz; /* file name size */
char *f_lnam; /* link name */
size_t f_lsiz; /* link name size */
uint32_t f_chksum; /* checksum */
int f_pad; /* padding size */
int f_fd; /* file descriptor (for pass mode) */
enum cmethod f_cmethod; /* zip compression method */
enum {
FG_CRYPT = 0001, /* encrypted zip file */
FG_BIT1 = 0002,
FG_BIT2 = 0004,
FG_DESC = 0010 /* zip file with data descriptor */
} f_gflag; /* zip general flag */
enum {
OF_ZIP64 = 0001 /* is a zip64 archive entry */
} f_oflag; /* other flags */
};
/*
* Patterns for gmatch().
*/
struct glist {
struct glist *g_nxt;
const char *g_pat;
unsigned g_gotcha : 1;
unsigned g_not : 1;
unsigned g_art : 1;
};
extern int aflag;
extern int Aflag;
extern int bflag;
extern int Bflag;
extern int cflag;
extern int Cflag;
extern int dflag;
extern int Dflag;
extern int eflag;
extern int cray_eflag;
extern const char *Eflag;
extern int fflag;
extern int Hflag;
extern const char *Iflag;
extern int kflag;
extern int Kflag;
extern int lflag;
extern int Lflag;
extern int mflag;
extern const char *Mflag;
extern const char *Oflag;
extern int rflag;
extern const char *Rflag;
extern int sflag;
extern int Sflag;
extern int tflag;
extern int uflag;
extern int hp_Uflag;
extern int vflag;
extern int Vflag;
extern int sixflag;
extern int action;
extern long long errcnt;
extern int blksiz;
extern int sysv3;
extern int printsev;
extern char *progname;
extern struct glist *patterns;
enum { /* type of pax command this is */
PAX_TYPE_CPIO = 0, /* not a pax command */
PAX_TYPE_PAX1992 = 1, /* POSIX.2 pax command */
PAX_TYPE_PAX2001 = 2 /* POSIX.1-2001 pax command */
} pax;
extern int pax_dflag;
extern int pax_kflag;
extern int pax_nflag;
extern int pax_sflag;
extern int pax_uflag;
extern int pax_Xflag;
enum {
PAX_P_NONE = 0000,
PAX_P_ATIME = 0001,
PAX_P_MTIME = 0004,
PAX_P_OWNER = 0010,
PAX_P_MODE = 0020,
PAX_P_EVERY = 0400
} pax_preserve;
extern size_t (*ofiles)(char **, size_t *);
extern void (*prtime)(time_t);
extern ssize_t bread(char *, size_t);
extern void bunread(const char *, size_t);
extern void swap(char *, size_t, int, int);
extern void msg(int, int, const char *, ...);
extern void emsg(int, const char *, ...);
extern void unexeoa(void);
extern int setfmt(char *);
extern char *oneintfmt(const char *);
extern int setreassign(const char *);
extern void addg(const char *, int);
extern void *srealloc(void *, size_t);
extern void *smalloc(size_t);
extern void *scalloc(size_t, size_t);
extern void *svalloc(size_t, int);
extern char *sstrdup(const char *);
extern int pax_options(char *, int);
extern int zipunshrink(struct file *, const char *, int, int, uint32_t *);
extern int zipexplode(struct file *, const char *, int, int, uint32_t *);
extern int zipexpand(struct file *, const char *, int, int, uint32_t *);
extern int zipinflate(struct file *, const char *, int, int, uint32_t *);
extern int zipunbz2(struct file *, const char *, int, int, uint32_t *);
extern int zipblast(struct file *, const char *, int, int, uint32_t *);
extern uint32_t zipcrc(uint32_t, const uint8_t *, size_t);
extern void flags(int, char **);
extern void usage(void);
extern int pax_track(const char *, time_t);
extern void pax_prlink(struct file *);
extern int pax_sname(char **, size_t *);
extern void pax_onexit(void);
syntax highlighted by Code2HTML, v. 0.9.1