📄 pax.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 + -