home *** CD-ROM | disk | FTP | other *** search
- /* $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>
- #ifdef __STDC__ /* Xn */
- # include <stdlib.h> /* Xn */
- #endif /* Xn */
- #include <errno.h>
- #include <signal.h>
- #include <ctype.h>
- #include <sys/types.h>
- #ifdef _POSIX_SOURCE /* Xn */
- # include <utime.h> /* Xn */
- # include <unistd.h> /* Xn */
- #else /* Xn */
- # include <sys/ioctl.h> /* Xn */
- #endif /* Xn */
- #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
-
- #ifndef major
- # include <sys/sysmacros.h>
- #endif /* major */
-
- #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 /* Xn */
- # include <sys/file.h> /* Xn */
- # endif /* _POSIX_SOURCE */ /* Xn */
- #endif /* XENIX_286 */
-
- /* Defines */
-
- #ifdef _POSIX_SOURCE /* Xn */
- # define STDIN STDIN_FILENO /* Standard input file descriptor */ /* Xn */
- # define STDOUT STDOUT_FILENO /* Standard output file descriptor */ /* Xn */
- #else /* Xn */
- # define STDIN 0 /* Standard input file descriptor */ /* Xn */
- # define STDOUT 1 /* Standard output file descriptor */ /* Xn */
- #endif /* Xn */
-
- /*
- * 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_RDWR 2 /* Xn */
- #endif
-
- #ifndef O_BINARY
- # define O_BINARY 0
- #endif
- /* Xn */
- /* Xn
- * Lseek symbolic constants; there is no <unistd.h> with most UNIXes, so Xn
- * all of these may not be defined... Xn
- */ /* Xn */
- /* Xn */
- #ifndef SEEK_SET /* Xn */
- # define SEEK_SET 0 /* Xn */
- #endif /* Xn */
- /* Xn */
- #ifndef SEEK_CUR /* Xn */
- # define SEEK_CUR 1 /* Xn */
- #endif /* Xn */
- /* Xn */
- #ifndef SEEK_END /* Xn */
- # define SEEK_END 2 /* Xn */
- #endif /* Xn */
-
- #ifndef NULL
- # ifdef __STDC__ /* Xn */
- # define NULL ((void *) 0) /* Xn */
- # else /* Xn */
- # define NULL ((char *) 0) /* Xn */
- # endif /* Xn */
- #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 SOCKTYPE 'S' /* Socket */ /* Xn */
-
- #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) */
- #ifndef S_IPERM /* Xn */
- # define S_IPERM 07777 /* File permission bits (shb in stat.h) */ /* Xn */
- #endif /* Xn */
- #define S_IPEXE 07000 /* Special execution bits (shb in stat.h) */
- #define S_IPOPN 0777 /* Open access bits (shb in stat.h) */
-
- /*
- * 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.
- */
- #define REMOVE(name, asb) \
- (((asb)->sb_mode & S_IFMT) == S_IFDIR ? rmdir(name) : unlink(name))
-
- /*
- * Cast and reduce to unsigned short.
- */
- #define USH(n) ((n) & 0777777)
-
-
- /* 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 */
- #ifdef _POSIX_SOURCE /* Xn */
- nlink_t l_nlink; /* Unresolved link count */ /* Xn */
- #else /* Xn */
- ushort l_nlink; /* Unresolved link count */
- #endif /* Xn */
- 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.
- */
- #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_quiet; /* Xn */
- 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;
- # if 1 && WIN_NT
- extern pid_t ppid;
- extern int globulation;
- # endif
- #endif /* NO_EXTERN */
-
- extern char *optarg;
- extern int optind;
- extern int sys_nerr;
- extern char *sys_errlist[];
- #ifndef _POSIX_SOURCE /* Xn */
- extern int errno;
- #endif /* Xn */
-
- #endif /* _PAX_H */
-