⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pax.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
字号:
/* $Source: /u/mark/src/pax/RCS/pax.h,v $ * * $Revision: 1.2 $ * * pax.h - defnitions for entire program * * DESCRIPTION * *	This file contains most all of the definitions required by the PAX *	software.  This header is included in every source file. * * AUTHOR * *     Mark H. Colburn, NAPS International (mark@jhereg.mn.org) * * Sponsored by The USENIX Association for public distribution.  * * Copyright (c) 1989 Mark H. Colburn. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by Mark H. Colburn and sponsored by The USENIX Association.  * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */#ifndef _PAX_H#define _PAX_H/* Headers */#include "config.h"#include "limits.h"#include <stdio.h>#include <errno.h>#include <signal.h>#include <ctype.h>#include <sys/types.h>#ifndef _POSIX_SOURCE#include <sys/ioctl.h>#endif#include <sys/stat.h>#include "regexp.h"#if defined(DIRENT) || defined(_POSIX_SOURCE)# ifdef PAXDIR#  include "paxdir.h"# else#  include <dirent.h># endif#else# ifdef hpux#  include <ndir.h># else#  ifdef XENIX_286#   include <sys/ndir.h>#  else XENIX_286#   include <sys/dir.h>#  endif XENIX_286# endif /* hpux */# define dirent direct#endif#ifdef _POSIX_SOURCE#define major(x)	0#define minor(x)	0#else#ifndef	major#   include <sys/sysmacros.h>#endif				/* major */#endif#ifdef	SYSTIME#   include <sys/time.h>#else				/* SYSTIME */#   include <time.h>#endif				/* SYSTIME */#ifndef V7#   include <fcntl.h>#endif#ifdef XENIX#   include <sys/inode.h>#endif#ifdef XENIX_286#include <sys/param.h>#endif XENIX_286#include <pwd.h>#include <grp.h>#ifndef XENIX_286#ifndef _POSIX_SOURCE#include <sys/file.h>#endif#endif /* XENIX_286 */#ifdef _POSIX_SOURCE#include <unistd.h>#include <stdlib.h>#endif/* Defines */#define	STDIN	0		/* Standard input  file descriptor */#define	STDOUT	1		/* Standard output file descriptor *//* * Open modes; there is no <fcntl.h> with v7 UNIX and other versions of * UNIX may not have all of these defined... */#ifndef O_RDONLY#   define	O_RDONLY	0#endif#ifndef O_WRONLY#   define	O_WRONLY	1#endif#ifndef O_RDWR#   define	O_WRONLY	2#endif#ifndef	O_BINARY#   define	O_BINARY	0#endif#ifndef NULL#   define 	NULL 		0#endif#define TMAGIC		"ustar"		/* ustar and a null */#define TMAGLEN		6#define TVERSION	"00"		/* 00 and no null */#define TVERSLEN	2/* Values used in typeflag field */#define REGTYPE		'0'		/* Regular File */#define AREGTYPE	'\0'		/* Regular File */#define LNKTYPE		'1'		/* Link */#define SYMTYPE		'2'		/* Reserved */#define CHRTYPE		'3'		/* Character Special File */#define BLKTYPE		'4'		/* Block Special File */#define DIRTYPE		'5'		/* Directory */#define FIFOTYPE	'6'		/* FIFO */#define CONTTYPE	'7'		/* Reserved */#define BLOCKSIZE	512	/* all output is padded to 512 bytes */#define	uint	unsigned int	/* Not always in types.h */#define	ushort	unsigned short	/* Not always in types.h */#define	BLOCK	5120		/* Default archive block size */#define	H_COUNT	10		/* Number of items in ASCII header */#define	H_PRINT	"%06o%06o%06o%06o%06o%06o%06o%011lo%06o%011lo"#define	H_SCAN	"%6ho%6ho%6ho%6ho%6ho%6ho%6ho%11lo%6o%11lo"#define	H_STRLEN 70		/* ASCII header string length */#define	M_ASCII "070707"	/* ASCII magic number */#define	M_BINARY 070707		/* Binary magic number */#define	M_STRLEN 6		/* ASCII magic number length */#define	PATHELEM 256		/* Pathname element count limit */#define	S_IFSHF	12		/* File type shift (shb in stat.h) */#define	S_IPERM	07777		/* File permission bits (shb in stat.h) */#define	S_IPEXE	07000		/* Special execution bits (shb in stat.h) */#define	S_IPOPN	0777		/* Open access bits (shb in stat.h) */#ifdef _POSIX_SOURCE/* hack: depend on knowing bits out of stat.h for S_ISREG, etc. */#define S_IFMT	0170000#define S_IFREG	0100000#define S_IFDIR	0040000#define S_IFCHR	0020000#define S_IFBLK 0060000#define S_IFIFO 0010000#endif/* * Trailer pathnames. All must be of the same length.  */#define	TRAILER	"TRAILER!!!"	/* Archive trailer (cpio compatible) */#define	TRAILZ	11		/* Trailer pathname length (including null) */#include "port.h"#define	TAR		1#define	CPIO		2#define	PAX		3#define AR_READ 	0#define AR_WRITE 	1#define AR_EXTRACT	2#define AR_APPEND 	4/* * Header block on tape.  */#define	NAMSIZ		100#define	PFIXSIZ		155#define	TUNMLEN		32#define	TGNMLEN		32/* The checksum field is filled with this while the checksum is computed. */#define	CHKBLANKS	"        "	/* 8 blanks, no null *//* * Exit codes from the "tar" program  */#define	EX_SUCCESS	0	/* success! */#define	EX_ARGSBAD	1	/* invalid args */#define	EX_BADFILE	2	/* invalid filename */#define	EX_BADARCH	3	/* bad archive */#define	EX_SYSTEM	4	/* system gave unexpected error */#define	ROUNDUP(a,b) 	(((a) % (b)) == 0 ? (a) : ((a) + ((b) - ((a) % (b)))))/* * Mininum value.  */#define	MIN(a, b)	(((a) < (b)) ? (a) : (b))/* * Remove a file or directory.  */#ifdef _POSIX_SOURCE#define	REMOVE(name, asb) \	(S_ISDIR((asb)->sb_mode)? rmdir(name) : unlink(name))#else#define	REMOVE(name, asb) \	(((asb)->sb_mode & S_IFMT) == S_IFDIR ? rmdir(name) : unlink(name))#endif/* * Cast and reduce to unsigned short.  */#define	USH(n)		(((ushort) (n)) & 0177777)/* Type Definitions *//* * Binary archive header (obsolete).  */typedef struct {    short           b_dev;	/* Device code */    ushort          b_ino;	/* Inode number */    ushort          b_mode;	/* Type and permissions */    ushort          b_uid;	/* Owner */    ushort          b_gid;	/* Group */    short           b_nlink;	/* Number of links */    short           b_rdev;	/* Real device */    ushort          b_mtime[2];	/* Modification time (hi/lo) */    ushort          b_name;	/* Length of pathname (with null) */    ushort          b_size[2];	/* Length of data */} Binary;/* * File status with symbolic links. Kludged to hold symbolic link pathname * within structure.  */typedef struct {    struct stat     sb_stat;    char            sb_link[PATH_MAX + 1];} Stat;#define	STAT(name, asb)		stat(name, &(asb)->sb_stat)#define	FSTAT(fd, asb)		fstat(fd, &(asb)->sb_stat)#define	sb_dev		sb_stat.st_dev#define	sb_ino		sb_stat.st_ino#define	sb_mode		sb_stat.st_mode#define	sb_nlink	sb_stat.st_nlink#define	sb_uid		sb_stat.st_uid#define	sb_gid		sb_stat.st_gid#define	sb_rdev		sb_stat.st_rdev#define	sb_size		sb_stat.st_size#define	sb_atime	sb_stat.st_atime#define	sb_mtime	sb_stat.st_mtime#define	sb_ctime	sb_stat.st_ctime#ifdef	S_IFLNK#	define	LSTAT(name, asb)	lstat(name, &(asb)->sb_stat)#	define	sb_blksize	sb_stat.st_blksize#	define	sb_blocks	sb_stat.st_blocks#else				/* S_IFLNK *//* * File status without symbolic links.  */#	define	LSTAT(name, asb)	stat(name, &(asb)->sb_stat)#endif				/* S_IFLNK *//* * Hard link sources. One or more are chained from each link structure.  */typedef struct name {    struct name    *p_forw;	/* Forward chain (terminated) */    struct name    *p_back;	/* Backward chain (circular) */    char           *p_name;	/* Pathname to link from */} Path;/* * File linking information. One entry exists for each unique file with with * outstanding hard links.  */typedef struct link {    struct link    *l_forw;	/* Forward chain (terminated) */    struct link    *l_back;	/* Backward chain (terminated) */    dev_t           l_dev;	/* Device */    ino_t           l_ino;	/* Inode */    ushort          l_nlink;	/* Unresolved link count */    OFFSET          l_size;	/* Length */    char	   *l_name;	/* pathname to link from */    Path           *l_path;	/* Pathname which link to l_name */} Link;/* * Structure for ed-style replacement strings (-s option).*/typedef struct replstr {    regexp	   *comp;	/* compiled regular expression */    char	   *replace;	/* replacement string */    char	    print;	/* >0 if we are to print replacement */    char	    global;	/* >0 if we are to replace globally */    struct replstr *next;	/* pointer to next record */} Replstr;/* * This has to be included here to insure that all of the type  * delcarations are declared for the prototypes. */#ifndef STRERROR/* boofheads have a different interface than standard, so rename */#define strerror xstrerror#endif#include "func.h"#ifndef NO_EXTERN/* Globally Available Identifiers */extern char    *ar_file;extern char    *bufend;extern char    *bufstart;extern char    *bufidx;extern char    *myname;extern int      archivefd;extern int      blocking;extern uint     blocksize;extern int      gid;extern int      head_standard;extern int      ar_interface;extern int      ar_format;extern int      mask;extern int      ttyf;extern int      uid;extern OFFSET    total;extern short    areof;extern short    f_append;extern short    f_create;extern short    f_extract;extern short    f_follow_links;extern short    f_interactive;extern short    f_linksleft;extern short    f_list;extern short    f_modified;extern short    f_verbose;extern short	f_link;extern short	f_owner;extern short	f_access_time;extern short	f_pass;extern short	f_pass;extern short	f_disposition;extern short    f_reverse_match;extern short    f_mtime;extern short    f_dir_create;extern short    f_unconditional;extern short    f_newer;extern time_t   now;extern uint     arvolume;extern int	names_from_stdin;extern Replstr *rplhead;extern Replstr *rpltail;extern char   **n_argv;extern int      n_argc;extern FILE    *msgfile;#endif /* NO_EXTERN */extern char    *optarg;extern int      optind;#ifndef _POSIX_SOURCEextern int      sys_nerr;extern char    *sys_errlist[];#endifextern int      errno;#endif /* _PAX_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -