home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 9 Archive / 09-Archive.zip / PAX20.ZIP / PAX.H < prev    next >
C/C++ Source or Header  |  1990-11-12  |  10KB  |  369 lines

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