1*9a747e4fSDavid du Colombier /* $Source: /u/mark/src/pax/RCS/pax.h,v $ 2*9a747e4fSDavid du Colombier * 3*9a747e4fSDavid du Colombier * $Revision: 1.2 $ 4*9a747e4fSDavid du Colombier * 5*9a747e4fSDavid du Colombier * pax.h - defnitions for entire program 6*9a747e4fSDavid du Colombier * 7*9a747e4fSDavid du Colombier * DESCRIPTION 8*9a747e4fSDavid du Colombier * 9*9a747e4fSDavid du Colombier * This file contains most all of the definitions required by the PAX 10*9a747e4fSDavid du Colombier * software. This header is included in every source file. 11*9a747e4fSDavid du Colombier * 12*9a747e4fSDavid du Colombier * AUTHOR 13*9a747e4fSDavid du Colombier * 14*9a747e4fSDavid du Colombier * Mark H. Colburn, NAPS International (mark@jhereg.mn.org) 15*9a747e4fSDavid du Colombier * 16*9a747e4fSDavid du Colombier * Sponsored by The USENIX Association for public distribution. 17*9a747e4fSDavid du Colombier * 18*9a747e4fSDavid du Colombier * Copyright (c) 1989 Mark H. Colburn. 19*9a747e4fSDavid du Colombier * All rights reserved. 20*9a747e4fSDavid du Colombier * 21*9a747e4fSDavid du Colombier * Redistribution and use in source and binary forms are permitted 22*9a747e4fSDavid du Colombier * provided that the above copyright notice and this paragraph are 23*9a747e4fSDavid du Colombier * duplicated in all such forms and that any documentation, 24*9a747e4fSDavid du Colombier * advertising materials, and other materials related to such 25*9a747e4fSDavid du Colombier * distribution and use acknowledge that the software was developed 26*9a747e4fSDavid du Colombier * by Mark H. Colburn and sponsored by The USENIX Association. 27*9a747e4fSDavid du Colombier * 28*9a747e4fSDavid du Colombier * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 29*9a747e4fSDavid du Colombier * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 30*9a747e4fSDavid du Colombier * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 31*9a747e4fSDavid du Colombier */ 32*9a747e4fSDavid du Colombier 33*9a747e4fSDavid du Colombier #ifndef _PAX_H 34*9a747e4fSDavid du Colombier #define _PAX_H 35*9a747e4fSDavid du Colombier 36*9a747e4fSDavid du Colombier /* Headers */ 37*9a747e4fSDavid du Colombier 38*9a747e4fSDavid du Colombier #include "config.h" 39*9a747e4fSDavid du Colombier #include "limits.h" 40*9a747e4fSDavid du Colombier #include <stdio.h> 41*9a747e4fSDavid du Colombier #include <errno.h> 42*9a747e4fSDavid du Colombier #include <signal.h> 43*9a747e4fSDavid du Colombier #include <ctype.h> 44*9a747e4fSDavid du Colombier #include <sys/types.h> 45*9a747e4fSDavid du Colombier #ifndef _POSIX_SOURCE 46*9a747e4fSDavid du Colombier #include <sys/ioctl.h> 47*9a747e4fSDavid du Colombier #endif 48*9a747e4fSDavid du Colombier #include <sys/stat.h> 49*9a747e4fSDavid du Colombier #include "regexp.h" 50*9a747e4fSDavid du Colombier 51*9a747e4fSDavid du Colombier #if defined(DIRENT) || defined(_POSIX_SOURCE) 52*9a747e4fSDavid du Colombier # ifdef PAXDIR 53*9a747e4fSDavid du Colombier # include "paxdir.h" 54*9a747e4fSDavid du Colombier # else 55*9a747e4fSDavid du Colombier # include <dirent.h> 56*9a747e4fSDavid du Colombier # endif 57*9a747e4fSDavid du Colombier #else 58*9a747e4fSDavid du Colombier # ifdef hpux 59*9a747e4fSDavid du Colombier # include <ndir.h> 60*9a747e4fSDavid du Colombier # else 61*9a747e4fSDavid du Colombier # ifdef XENIX_286 62*9a747e4fSDavid du Colombier # include <sys/ndir.h> 63*9a747e4fSDavid du Colombier # else XENIX_286 64*9a747e4fSDavid du Colombier # include <sys/dir.h> 65*9a747e4fSDavid du Colombier # endif XENIX_286 66*9a747e4fSDavid du Colombier # endif /* hpux */ 67*9a747e4fSDavid du Colombier # define dirent direct 68*9a747e4fSDavid du Colombier #endif 69*9a747e4fSDavid du Colombier 70*9a747e4fSDavid du Colombier #ifdef _POSIX_SOURCE 71*9a747e4fSDavid du Colombier #define major(x) 0 72*9a747e4fSDavid du Colombier #define minor(x) 0 73*9a747e4fSDavid du Colombier #else 74*9a747e4fSDavid du Colombier #ifndef major 75*9a747e4fSDavid du Colombier # include <sys/sysmacros.h> 76*9a747e4fSDavid du Colombier #endif /* major */ 77*9a747e4fSDavid du Colombier #endif 78*9a747e4fSDavid du Colombier 79*9a747e4fSDavid du Colombier #ifdef SYSTIME 80*9a747e4fSDavid du Colombier # include <sys/time.h> 81*9a747e4fSDavid du Colombier #else /* SYSTIME */ 82*9a747e4fSDavid du Colombier # include <time.h> 83*9a747e4fSDavid du Colombier #endif /* SYSTIME */ 84*9a747e4fSDavid du Colombier 85*9a747e4fSDavid du Colombier #ifndef V7 86*9a747e4fSDavid du Colombier # include <fcntl.h> 87*9a747e4fSDavid du Colombier #endif 88*9a747e4fSDavid du Colombier 89*9a747e4fSDavid du Colombier #ifdef XENIX 90*9a747e4fSDavid du Colombier # include <sys/inode.h> 91*9a747e4fSDavid du Colombier #endif 92*9a747e4fSDavid du Colombier #ifdef XENIX_286 93*9a747e4fSDavid du Colombier #include <sys/param.h> 94*9a747e4fSDavid du Colombier #endif XENIX_286 95*9a747e4fSDavid du Colombier 96*9a747e4fSDavid du Colombier #include <pwd.h> 97*9a747e4fSDavid du Colombier #include <grp.h> 98*9a747e4fSDavid du Colombier #ifndef XENIX_286 99*9a747e4fSDavid du Colombier #ifndef _POSIX_SOURCE 100*9a747e4fSDavid du Colombier #include <sys/file.h> 101*9a747e4fSDavid du Colombier #endif 102*9a747e4fSDavid du Colombier #endif /* XENIX_286 */ 103*9a747e4fSDavid du Colombier 104*9a747e4fSDavid du Colombier #ifdef _POSIX_SOURCE 105*9a747e4fSDavid du Colombier #include <unistd.h> 106*9a747e4fSDavid du Colombier #include <stdlib.h> 107*9a747e4fSDavid du Colombier #endif 108*9a747e4fSDavid du Colombier 109*9a747e4fSDavid du Colombier /* Defines */ 110*9a747e4fSDavid du Colombier 111*9a747e4fSDavid du Colombier #define STDIN 0 /* Standard input file descriptor */ 112*9a747e4fSDavid du Colombier #define STDOUT 1 /* Standard output file descriptor */ 113*9a747e4fSDavid du Colombier 114*9a747e4fSDavid du Colombier /* 115*9a747e4fSDavid du Colombier * Open modes; there is no <fcntl.h> with v7 UNIX and other versions of 116*9a747e4fSDavid du Colombier * UNIX may not have all of these defined... 117*9a747e4fSDavid du Colombier */ 118*9a747e4fSDavid du Colombier 119*9a747e4fSDavid du Colombier #ifndef O_RDONLY 120*9a747e4fSDavid du Colombier # define O_RDONLY 0 121*9a747e4fSDavid du Colombier #endif 122*9a747e4fSDavid du Colombier 123*9a747e4fSDavid du Colombier #ifndef O_WRONLY 124*9a747e4fSDavid du Colombier # define O_WRONLY 1 125*9a747e4fSDavid du Colombier #endif 126*9a747e4fSDavid du Colombier 127*9a747e4fSDavid du Colombier #ifndef O_RDWR 128*9a747e4fSDavid du Colombier # define O_WRONLY 2 129*9a747e4fSDavid du Colombier #endif 130*9a747e4fSDavid du Colombier 131*9a747e4fSDavid du Colombier #ifndef O_BINARY 132*9a747e4fSDavid du Colombier # define O_BINARY 0 133*9a747e4fSDavid du Colombier #endif 134*9a747e4fSDavid du Colombier 135*9a747e4fSDavid du Colombier #ifndef NULL 136*9a747e4fSDavid du Colombier # define NULL 0 137*9a747e4fSDavid du Colombier #endif 138*9a747e4fSDavid du Colombier 139*9a747e4fSDavid du Colombier #define TMAGIC "ustar" /* ustar and a null */ 140*9a747e4fSDavid du Colombier #define TMAGLEN 6 141*9a747e4fSDavid du Colombier #define TVERSION "00" /* 00 and no null */ 142*9a747e4fSDavid du Colombier #define TVERSLEN 2 143*9a747e4fSDavid du Colombier 144*9a747e4fSDavid du Colombier /* Values used in typeflag field */ 145*9a747e4fSDavid du Colombier #define REGTYPE '0' /* Regular File */ 146*9a747e4fSDavid du Colombier #define AREGTYPE '\0' /* Regular File */ 147*9a747e4fSDavid du Colombier #define LNKTYPE '1' /* Link */ 148*9a747e4fSDavid du Colombier #define SYMTYPE '2' /* Reserved */ 149*9a747e4fSDavid du Colombier #define CHRTYPE '3' /* Character Special File */ 150*9a747e4fSDavid du Colombier #define BLKTYPE '4' /* Block Special File */ 151*9a747e4fSDavid du Colombier #define DIRTYPE '5' /* Directory */ 152*9a747e4fSDavid du Colombier #define FIFOTYPE '6' /* FIFO */ 153*9a747e4fSDavid du Colombier #define CONTTYPE '7' /* Reserved */ 154*9a747e4fSDavid du Colombier 155*9a747e4fSDavid du Colombier #define BLOCKSIZE 512 /* all output is padded to 512 bytes */ 156*9a747e4fSDavid du Colombier #define uint unsigned int /* Not always in types.h */ 157*9a747e4fSDavid du Colombier #define ushort unsigned short /* Not always in types.h */ 158*9a747e4fSDavid du Colombier #define BLOCK 5120 /* Default archive block size */ 159*9a747e4fSDavid du Colombier #define H_COUNT 10 /* Number of items in ASCII header */ 160*9a747e4fSDavid du Colombier #define H_PRINT "%06o%06o%06o%06o%06o%06o%06o%011lo%06o%011lo" 161*9a747e4fSDavid du Colombier #define H_SCAN "%6ho%6ho%6ho%6ho%6ho%6ho%6ho%11lo%6o%11lo" 162*9a747e4fSDavid du Colombier #define H_STRLEN 70 /* ASCII header string length */ 163*9a747e4fSDavid du Colombier #define M_ASCII "070707" /* ASCII magic number */ 164*9a747e4fSDavid du Colombier #define M_BINARY 070707 /* Binary magic number */ 165*9a747e4fSDavid du Colombier #define M_STRLEN 6 /* ASCII magic number length */ 166*9a747e4fSDavid du Colombier #define PATHELEM 256 /* Pathname element count limit */ 167*9a747e4fSDavid du Colombier #define S_IFSHF 12 /* File type shift (shb in stat.h) */ 168*9a747e4fSDavid du Colombier #define S_IPERM 07777 /* File permission bits (shb in stat.h) */ 169*9a747e4fSDavid du Colombier #define S_IPEXE 07000 /* Special execution bits (shb in stat.h) */ 170*9a747e4fSDavid du Colombier #define S_IPOPN 0777 /* Open access bits (shb in stat.h) */ 171*9a747e4fSDavid du Colombier 172*9a747e4fSDavid du Colombier #ifdef _POSIX_SOURCE 173*9a747e4fSDavid du Colombier /* hack: depend on knowing bits out of stat.h for S_ISREG, etc. */ 174*9a747e4fSDavid du Colombier #define S_IFMT 0170000 175*9a747e4fSDavid du Colombier #define S_IFREG 0100000 176*9a747e4fSDavid du Colombier #define S_IFDIR 0040000 177*9a747e4fSDavid du Colombier #define S_IFCHR 0020000 178*9a747e4fSDavid du Colombier #define S_IFBLK 0060000 179*9a747e4fSDavid du Colombier #define S_IFIFO 0010000 180*9a747e4fSDavid du Colombier #endif 181*9a747e4fSDavid du Colombier 182*9a747e4fSDavid du Colombier /* 183*9a747e4fSDavid du Colombier * Trailer pathnames. All must be of the same length. 184*9a747e4fSDavid du Colombier */ 185*9a747e4fSDavid du Colombier #define TRAILER "TRAILER!!!" /* Archive trailer (cpio compatible) */ 186*9a747e4fSDavid du Colombier #define TRAILZ 11 /* Trailer pathname length (including null) */ 187*9a747e4fSDavid du Colombier 188*9a747e4fSDavid du Colombier #include "port.h" 189*9a747e4fSDavid du Colombier 190*9a747e4fSDavid du Colombier 191*9a747e4fSDavid du Colombier #define TAR 1 192*9a747e4fSDavid du Colombier #define CPIO 2 193*9a747e4fSDavid du Colombier #define PAX 3 194*9a747e4fSDavid du Colombier 195*9a747e4fSDavid du Colombier #define AR_READ 0 196*9a747e4fSDavid du Colombier #define AR_WRITE 1 197*9a747e4fSDavid du Colombier #define AR_EXTRACT 2 198*9a747e4fSDavid du Colombier #define AR_APPEND 4 199*9a747e4fSDavid du Colombier 200*9a747e4fSDavid du Colombier /* 201*9a747e4fSDavid du Colombier * Header block on tape. 202*9a747e4fSDavid du Colombier */ 203*9a747e4fSDavid du Colombier #define NAMSIZ 100 204*9a747e4fSDavid du Colombier #define PFIXSIZ 155 205*9a747e4fSDavid du Colombier #define TUNMLEN 32 206*9a747e4fSDavid du Colombier #define TGNMLEN 32 207*9a747e4fSDavid du Colombier 208*9a747e4fSDavid du Colombier /* The checksum field is filled with this while the checksum is computed. */ 209*9a747e4fSDavid du Colombier #define CHKBLANKS " " /* 8 blanks, no null */ 210*9a747e4fSDavid du Colombier 211*9a747e4fSDavid du Colombier /* 212*9a747e4fSDavid du Colombier * Exit codes from the "tar" program 213*9a747e4fSDavid du Colombier */ 214*9a747e4fSDavid du Colombier #define EX_SUCCESS 0 /* success! */ 215*9a747e4fSDavid du Colombier #define EX_ARGSBAD 1 /* invalid args */ 216*9a747e4fSDavid du Colombier #define EX_BADFILE 2 /* invalid filename */ 217*9a747e4fSDavid du Colombier #define EX_BADARCH 3 /* bad archive */ 218*9a747e4fSDavid du Colombier #define EX_SYSTEM 4 /* system gave unexpected error */ 219*9a747e4fSDavid du Colombier 220*9a747e4fSDavid du Colombier #define ROUNDUP(a,b) (((a) % (b)) == 0 ? (a) : ((a) + ((b) - ((a) % (b))))) 221*9a747e4fSDavid du Colombier 222*9a747e4fSDavid du Colombier /* 223*9a747e4fSDavid du Colombier * Mininum value. 224*9a747e4fSDavid du Colombier */ 225*9a747e4fSDavid du Colombier #define MIN(a, b) (((a) < (b)) ? (a) : (b)) 226*9a747e4fSDavid du Colombier 227*9a747e4fSDavid du Colombier /* 228*9a747e4fSDavid du Colombier * Remove a file or directory. 229*9a747e4fSDavid du Colombier */ 230*9a747e4fSDavid du Colombier #ifdef _POSIX_SOURCE 231*9a747e4fSDavid du Colombier #define REMOVE(name, asb) \ 232*9a747e4fSDavid du Colombier (S_ISDIR((asb)->sb_mode)? rmdir(name) : unlink(name)) 233*9a747e4fSDavid du Colombier #else 234*9a747e4fSDavid du Colombier #define REMOVE(name, asb) \ 235*9a747e4fSDavid du Colombier (((asb)->sb_mode & S_IFMT) == S_IFDIR ? rmdir(name) : unlink(name)) 236*9a747e4fSDavid du Colombier #endif 237*9a747e4fSDavid du Colombier 238*9a747e4fSDavid du Colombier /* 239*9a747e4fSDavid du Colombier * Cast and reduce to unsigned short. 240*9a747e4fSDavid du Colombier */ 241*9a747e4fSDavid du Colombier #define USH(n) (((ushort) (n)) & 0177777) 242*9a747e4fSDavid du Colombier 243*9a747e4fSDavid du Colombier 244*9a747e4fSDavid du Colombier /* Type Definitions */ 245*9a747e4fSDavid du Colombier 246*9a747e4fSDavid du Colombier /* 247*9a747e4fSDavid du Colombier * Binary archive header (obsolete). 248*9a747e4fSDavid du Colombier */ 249*9a747e4fSDavid du Colombier typedef struct { 250*9a747e4fSDavid du Colombier short b_dev; /* Device code */ 251*9a747e4fSDavid du Colombier ushort b_ino; /* Inode number */ 252*9a747e4fSDavid du Colombier ushort b_mode; /* Type and permissions */ 253*9a747e4fSDavid du Colombier ushort b_uid; /* Owner */ 254*9a747e4fSDavid du Colombier ushort b_gid; /* Group */ 255*9a747e4fSDavid du Colombier short b_nlink; /* Number of links */ 256*9a747e4fSDavid du Colombier short b_rdev; /* Real device */ 257*9a747e4fSDavid du Colombier ushort b_mtime[2]; /* Modification time (hi/lo) */ 258*9a747e4fSDavid du Colombier ushort b_name; /* Length of pathname (with null) */ 259*9a747e4fSDavid du Colombier ushort b_size[2]; /* Length of data */ 260*9a747e4fSDavid du Colombier } Binary; 261*9a747e4fSDavid du Colombier 262*9a747e4fSDavid du Colombier /* 263*9a747e4fSDavid du Colombier * File status with symbolic links. Kludged to hold symbolic link pathname 264*9a747e4fSDavid du Colombier * within structure. 265*9a747e4fSDavid du Colombier */ 266*9a747e4fSDavid du Colombier typedef struct { 267*9a747e4fSDavid du Colombier struct stat sb_stat; 268*9a747e4fSDavid du Colombier char sb_link[PATH_MAX + 1]; 269*9a747e4fSDavid du Colombier } Stat; 270*9a747e4fSDavid du Colombier 271*9a747e4fSDavid du Colombier #define STAT(name, asb) stat(name, &(asb)->sb_stat) 272*9a747e4fSDavid du Colombier #define FSTAT(fd, asb) fstat(fd, &(asb)->sb_stat) 273*9a747e4fSDavid du Colombier 274*9a747e4fSDavid du Colombier #define sb_dev sb_stat.st_dev 275*9a747e4fSDavid du Colombier #define sb_ino sb_stat.st_ino 276*9a747e4fSDavid du Colombier #define sb_mode sb_stat.st_mode 277*9a747e4fSDavid du Colombier #define sb_nlink sb_stat.st_nlink 278*9a747e4fSDavid du Colombier #define sb_uid sb_stat.st_uid 279*9a747e4fSDavid du Colombier #define sb_gid sb_stat.st_gid 280*9a747e4fSDavid du Colombier #define sb_rdev sb_stat.st_rdev 281*9a747e4fSDavid du Colombier #define sb_size sb_stat.st_size 282*9a747e4fSDavid du Colombier #define sb_atime sb_stat.st_atime 283*9a747e4fSDavid du Colombier #define sb_mtime sb_stat.st_mtime 284*9a747e4fSDavid du Colombier #define sb_ctime sb_stat.st_ctime 285*9a747e4fSDavid du Colombier 286*9a747e4fSDavid du Colombier #ifdef S_IFLNK 287*9a747e4fSDavid du Colombier # define LSTAT(name, asb) lstat(name, &(asb)->sb_stat) 288*9a747e4fSDavid du Colombier # define sb_blksize sb_stat.st_blksize 289*9a747e4fSDavid du Colombier # define sb_blocks sb_stat.st_blocks 290*9a747e4fSDavid du Colombier #else /* S_IFLNK */ 291*9a747e4fSDavid du Colombier /* 292*9a747e4fSDavid du Colombier * File status without symbolic links. 293*9a747e4fSDavid du Colombier */ 294*9a747e4fSDavid du Colombier # define LSTAT(name, asb) stat(name, &(asb)->sb_stat) 295*9a747e4fSDavid du Colombier #endif /* S_IFLNK */ 296*9a747e4fSDavid du Colombier 297*9a747e4fSDavid du Colombier /* 298*9a747e4fSDavid du Colombier * Hard link sources. One or more are chained from each link structure. 299*9a747e4fSDavid du Colombier */ 300*9a747e4fSDavid du Colombier typedef struct name { 301*9a747e4fSDavid du Colombier struct name *p_forw; /* Forward chain (terminated) */ 302*9a747e4fSDavid du Colombier struct name *p_back; /* Backward chain (circular) */ 303*9a747e4fSDavid du Colombier char *p_name; /* Pathname to link from */ 304*9a747e4fSDavid du Colombier } Path; 305*9a747e4fSDavid du Colombier 306*9a747e4fSDavid du Colombier /* 307*9a747e4fSDavid du Colombier * File linking information. One entry exists for each unique file with with 308*9a747e4fSDavid du Colombier * outstanding hard links. 309*9a747e4fSDavid du Colombier */ 310*9a747e4fSDavid du Colombier typedef struct link { 311*9a747e4fSDavid du Colombier struct link *l_forw; /* Forward chain (terminated) */ 312*9a747e4fSDavid du Colombier struct link *l_back; /* Backward chain (terminated) */ 313*9a747e4fSDavid du Colombier dev_t l_dev; /* Device */ 314*9a747e4fSDavid du Colombier ino_t l_ino; /* Inode */ 315*9a747e4fSDavid du Colombier ushort l_nlink; /* Unresolved link count */ 316*9a747e4fSDavid du Colombier OFFSET l_size; /* Length */ 317*9a747e4fSDavid du Colombier char *l_name; /* pathname to link from */ 318*9a747e4fSDavid du Colombier Path *l_path; /* Pathname which link to l_name */ 319*9a747e4fSDavid du Colombier } Link; 320*9a747e4fSDavid du Colombier 321*9a747e4fSDavid du Colombier /* 322*9a747e4fSDavid du Colombier * Structure for ed-style replacement strings (-s option). 323*9a747e4fSDavid du Colombier */ 324*9a747e4fSDavid du Colombier typedef struct replstr { 325*9a747e4fSDavid du Colombier regexp *comp; /* compiled regular expression */ 326*9a747e4fSDavid du Colombier char *replace; /* replacement string */ 327*9a747e4fSDavid du Colombier char print; /* >0 if we are to print replacement */ 328*9a747e4fSDavid du Colombier char global; /* >0 if we are to replace globally */ 329*9a747e4fSDavid du Colombier struct replstr *next; /* pointer to next record */ 330*9a747e4fSDavid du Colombier } Replstr; 331*9a747e4fSDavid du Colombier 332*9a747e4fSDavid du Colombier 333*9a747e4fSDavid du Colombier /* 334*9a747e4fSDavid du Colombier * This has to be included here to insure that all of the type 335*9a747e4fSDavid du Colombier * delcarations are declared for the prototypes. 336*9a747e4fSDavid du Colombier */ 337*9a747e4fSDavid du Colombier #ifndef STRERROR 338*9a747e4fSDavid du Colombier /* boofheads have a different interface than standard, so rename */ 339*9a747e4fSDavid du Colombier #define strerror xstrerror 340*9a747e4fSDavid du Colombier #endif 341*9a747e4fSDavid du Colombier #include "func.h" 342*9a747e4fSDavid du Colombier 343*9a747e4fSDavid du Colombier 344*9a747e4fSDavid du Colombier #ifndef NO_EXTERN 345*9a747e4fSDavid du Colombier /* Globally Available Identifiers */ 346*9a747e4fSDavid du Colombier 347*9a747e4fSDavid du Colombier extern char *ar_file; 348*9a747e4fSDavid du Colombier extern char *bufend; 349*9a747e4fSDavid du Colombier extern char *bufstart; 350*9a747e4fSDavid du Colombier extern char *bufidx; 351*9a747e4fSDavid du Colombier extern char *myname; 352*9a747e4fSDavid du Colombier extern int archivefd; 353*9a747e4fSDavid du Colombier extern int blocking; 354*9a747e4fSDavid du Colombier extern uint blocksize; 355*9a747e4fSDavid du Colombier extern int gid; 356*9a747e4fSDavid du Colombier extern int head_standard; 357*9a747e4fSDavid du Colombier extern int ar_interface; 358*9a747e4fSDavid du Colombier extern int ar_format; 359*9a747e4fSDavid du Colombier extern int mask; 360*9a747e4fSDavid du Colombier extern int ttyf; 361*9a747e4fSDavid du Colombier extern int uid; 362*9a747e4fSDavid du Colombier extern OFFSET total; 363*9a747e4fSDavid du Colombier extern short areof; 364*9a747e4fSDavid du Colombier extern short f_append; 365*9a747e4fSDavid du Colombier extern short f_create; 366*9a747e4fSDavid du Colombier extern short f_extract; 367*9a747e4fSDavid du Colombier extern short f_follow_links; 368*9a747e4fSDavid du Colombier extern short f_interactive; 369*9a747e4fSDavid du Colombier extern short f_linksleft; 370*9a747e4fSDavid du Colombier extern short f_list; 371*9a747e4fSDavid du Colombier extern short f_modified; 372*9a747e4fSDavid du Colombier extern short f_verbose; 373*9a747e4fSDavid du Colombier extern short f_link; 374*9a747e4fSDavid du Colombier extern short f_owner; 375*9a747e4fSDavid du Colombier extern short f_access_time; 376*9a747e4fSDavid du Colombier extern short f_pass; 377*9a747e4fSDavid du Colombier extern short f_pass; 378*9a747e4fSDavid du Colombier extern short f_disposition; 379*9a747e4fSDavid du Colombier extern short f_reverse_match; 380*9a747e4fSDavid du Colombier extern short f_mtime; 381*9a747e4fSDavid du Colombier extern short f_dir_create; 382*9a747e4fSDavid du Colombier extern short f_unconditional; 383*9a747e4fSDavid du Colombier extern short f_newer; 384*9a747e4fSDavid du Colombier extern time_t now; 385*9a747e4fSDavid du Colombier extern uint arvolume; 386*9a747e4fSDavid du Colombier extern int names_from_stdin; 387*9a747e4fSDavid du Colombier extern Replstr *rplhead; 388*9a747e4fSDavid du Colombier extern Replstr *rpltail; 389*9a747e4fSDavid du Colombier extern char **n_argv; 390*9a747e4fSDavid du Colombier extern int n_argc; 391*9a747e4fSDavid du Colombier extern FILE *msgfile; 392*9a747e4fSDavid du Colombier #endif /* NO_EXTERN */ 393*9a747e4fSDavid du Colombier 394*9a747e4fSDavid du Colombier extern char *optarg; 395*9a747e4fSDavid du Colombier extern int optind; 396*9a747e4fSDavid du Colombier #ifndef _POSIX_SOURCE 397*9a747e4fSDavid du Colombier extern int sys_nerr; 398*9a747e4fSDavid du Colombier extern char *sys_errlist[]; 399*9a747e4fSDavid du Colombier #endif 400*9a747e4fSDavid du Colombier extern int errno; 401*9a747e4fSDavid du Colombier 402*9a747e4fSDavid du Colombier #endif /* _PAX_H */ 403