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