"Fossies" - the Fresh Open Source Software Archive

Member "afio-2.5.2/afio.h" (30 Nov 2018, 14483 Bytes) of package /linux/misc/afio-2.5.2.tgz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "afio.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 2.5.1_vs_2.5.2.

    1 /* afio.h  defines for afio. */
    2 
    3 #ifdef  SYSTIME
    4 #include <sys/time.h>
    5 #else /* SYSTIME */
    6 #include <time.h>
    7 #endif /* SYSTIME */
    8 
    9 #ifdef  CTC3B2
   10 #include <sys/vtoc.h>
   11 #include <sys/ct.h>
   12 #endif /* CTC3B2 */
   13 
   14 #ifdef MYTEMPNAM
   15 #include <sys/file.h>
   16 #endif
   17 
   18 #ifdef USESHMEM
   19 #include <sys/ipc.h>
   20 #include <sys/shm.h>
   21 
   22 #define NUMSHKEYS   20
   23 #define SHMEMSIZE   262144  /* 2^18 (dev3b1) */
   24 #endif
   25 
   26 /* done writing to the archive */
   27 #define FALSE   0
   28 #define TRUE    1
   29 #define NOTDONE 0
   30 #define DONE    1
   31 #define NODIE   0
   32 #define DIE 1
   33 
   34 /* Note for porters: see the PORTING file if your compiler
   35    does not support unsigned long long.
   36 */
   37 typedef  unsigned long long ulonglong;
   38 
   39 /* KH */
   40 #define MEMFD 10000
   41 #define ZIPFD 10001
   42 extern int zipfdfd;
   43 
   44 /* flags for the st_rdev field of regular files */
   45  /* file is not compressed, ignore any .z extension */
   46 #define RDEV_NOTCOMPR 1
   47  /* file is a control file */
   48 #define RDEV_ISCONTROL 2
   49 
   50 /*
   51    An archive entry is a control file if it is a regular file and
   52    if the ISCONTROL flag is set.  The filename is not important.
   53 */
   54 #define ISCONTROL(sb) ((((sb)->sb_mode & S_IFMT) == S_IFREG)&&((sb)->sb_rdev & RDEV_ISCONTROL))
   55 
   56 /* pseudo filename for control files */
   57 #define CONTROLNAME "CONTROL_FILE"
   58 
   59 /* label value if no label given */
   60 #define NOLABEL "no_label"
   61 
   62 /*
   63  * Address link information base.
   64  */
   65 #define linkhash(ino)   \
   66     (linkbase + ((ino) & 0xffff) % nel(linkbase))
   67 
   68 /*
   69  * Mininum value.
   70  */
   71 #define min(one, two)   \
   72     (one < two ? one : two)
   73 
   74 /*
   75  * Number of array elements.
   76  */
   77 #define nel(a)      \
   78     (sizeof(a) / sizeof(*(a)))
   79 
   80 /*
   81  * Remove a file or directory.
   82  */
   83 #define afremove(name, asb) \
   84     (((asb)->sb_mode & S_IFMT) == S_IFDIR ? rmdir(name) : unlink(name))
   85 
   86 /*
   87  * Swap bytes.
   88  */
   89 #define swab(n)     \
   90     ((((unsigned short)(n) >> 8) & 0xff) | (((unsigned short)(n) << 8) & 0xff00))
   91 
   92 /*
   93  * Cast and reduce to unsigned short.
   94  */
   95 #define ush(n)      \
   96     (((unsigned short) (n)) & 0177777)
   97 
   98 #define ulo(n)      \
   99     (((unsigned long) (n)) & 0xFFFFFFFFL)
  100 
  101 #define ull(n)      \
  102     (((unsigned long long) (n)) & 0xFFFFFFFFFFFFFFFFLL)
  103 /*                             1234567890123456 */
  104 
  105 /*
  106  * Definitions.
  107  */
  108 #define reg register    /* Convenience */
  109 #define uint    unsigned int    /* Not always in types.h */
  110 #define ushort  unsigned short  /* Not always in types.h */
  111 
  112 #define BLOCK   5120        /* Default archive block size */
  113 #define FSBUF   (8*1024)    /* Filesystem buffer size */
  114 #define H_COUNT 10      /* Number of items in ASCII header */
  115 
  116 /* binary format */
  117 #define M_BINARY 070707     /* Binary magic number */
  118 #define M_STRLEN 6      /* ASCII magic number length */
  119 
  120 /* (old) ASCII format */
  121 #define H_STRLEN 70     /* old ASCII header string length */
  122 #define M_ASCII "070707"    /* old ASCII magic number */
  123 #define H_PRINT "%06o%06o%06o%06o%06o%06o%06o%011lo%06o%011lo"
  124 /* H_SCAN is obsolete, replaced by PH_SCAN to be more portable. */
  125 #define H_SCAN  "%6ho%6ho%6ho%6ho%6ho%6ho%6ho%11lo%6o%11lo"
  126 #define PH_SCAN  "%6lo%6lo%6lo%6lo%6lo%6lo%6lo%11lo%6o%11lo"
  127 
  128 /*
  129 Below is a handy piece of ASCII art which can be used to decode old
  130 ASCII format headers.
  131 
  132 |23456|23456|23456|23456|23456|23456|23456|23456|23456789ab|23456|23456789ab|-
  133 |  hdr|  dev|  ino| mode|  uid|  gid|nlink| rdev|     mtime|nmlen|      size|n
  134 */
  135 
  136 /* extended ASCII format */
  137 #define H_STRLEN2 75        /* extended ASCII header string length */
  138 #define M_ASCII2 "070717"   /* extended ASCII magic number */
  139 #define H_PRINT2  "%06o%011lo%06o%06o%06o%06o%06o%011lo%06o%011lo"
  140 #define PH_SCAN2  "%6lo%11lo%6lo%6lo%6lo%6lo%6lo%11lo%6o%11lo"
  141 
  142 
  143 /*
  144 Below is a handy piece of ASCII art which can be used to decode large
  145 ASCII format headers.
  146 
  147 |23456|2345678|234567890123456m|23456|2345678|2345678|2345678|2345678|234567890123456n|234|234|234s|234567890123456:|-
  148 |  hdr|    dev|            inoM|  mod|    uid|    gid|  nlink|   rdev|          mtimeN|nml|flg|xszS|           size:|n
  149 */
  150 
  151 /* large ASCII format */
  152 #define H_STRLEN3 110       /* large ASCII string length */
  153 #define M_ASCII3 "070727"   /* large ASCII magic number */
  154 #define H_COUNT3 12
  155 #define H_PRINT3  "%08lX%016llXm%06lo%08lX%08lX%08lX%08lX%016llXn%04X%04X%04Xs%016llX:"
  156 #define PH_SCAN3  "%8lX%16llXm%6lo%8lX%8lX%8lX%8llX%16llXn%4X%4X%4Xs%16llX:"
  157 
  158 
  159 
  160 typedef struct {
  161 long unsigned int PSt_dev;
  162 long unsigned int PSt_ino;
  163 long unsigned int PSt_mode;
  164 long unsigned int PSt_uid;
  165 long unsigned int PSt_gid;
  166 long unsigned int PSt_nlink;
  167 long unsigned int PSt_rdev;
  168 long unsigned int PSt_mtime;
  169 long unsigned int PSt_size;
  170 } PStat;
  171 
  172 
  173 typedef struct {
  174 long unsigned int PSt_dev;
  175 unsigned long long PSt_ino;
  176 long unsigned int PSt_mode;
  177 long unsigned int PSt_uid;
  178 long unsigned int PSt_gid;
  179 long unsigned int PSt_nlink;
  180 unsigned long long PSt_rdev;
  181 unsigned long long PSt_mtime;
  182 unsigned long long PSt_size;
  183 } PHStat;
  184 
  185 
  186 
  187 #define NULLDEV -1      /* Null device code */
  188 #define NULLINO 0       /* Null inode number */
  189 #define PATHELEM 256        /* Pathname element count limit */
  190 #define PATHSIZE 1024       /* Pathname length limit */
  191 #define S_IFSHF 12      /* File type shift (shb in stat.h) */
  192 #define S_IPERM 07777       /* File permission bits (shb in stat.h) */
  193 #define S_IPEXE 07000       /* Special execution bits (shb in stat.h) */
  194 #define S_IPOPN 0777        /* Open access bits (shb in stat.h) */
  195 #define STDIN   0       /* Standard input file descriptor */
  196 #define STDOUT  1       /* Standard output file descriptor */
  197 #define TTY "/dev/tty"  /* For volume-change queries */
  198 
  199 /* the three flags below are used in the match.c code, they allow us
  200    to store 3 types of patterns in a single `all patterns' linked
  201    list.  (the use of a single list is for historical reasons, it is
  202    not the most ovbious design for the current needs)
  203  */
  204 #define PATTYPE_MATCH 0
  205 #define PATTYPE_NOMATCH 1
  206 #define PATTYPE_EXT 2
  207 
  208 #ifndef PRG_COMPRESS
  209 #define PRG_COMPRESS "compress"
  210 #endif
  211 
  212 /*
  213  * Some versions of the portable "C" compiler (PCC) can't handle
  214  * pointers to functions returning void.
  215  */
  216 #ifdef  VOIDFIX
  217 #define VOIDFN  void        /* Expect "void (*fnptr)()" to work */
  218 #else /* VOIDFIX */
  219 #define VOIDFN  int     /* Avoid PCC "void (*fnptr)()" bug */
  220 #endif /* VOIDFIX */
  221 
  222 /*
  223  * Trailer pathnames. All must be of the same length.
  224  */
  225 #define TRAILER "TRAILER!!!"    /* Archive trailer (cpio compatible) */
  226 #define TRAILZ  11      /* Trailer pathname length (including null) */
  227 
  228 /*
  229  * Open modes; there is no <fcntl.h> with v7 UNIX.
  230  */
  231 #ifdef HAVEFCNTL
  232 #include <fcntl.h>
  233 #else
  234 #define O_RDONLY 0      /* Read-only */
  235 #define O_WRONLY 1      /* Write-only */
  236 #define O_RDWR  2       /* Read/write */
  237 #endif
  238 /*
  239  * V7 and BSD UNIX use old-fashioned names for a couple of
  240  * string functions.
  241  */
  242 #ifdef  INDEX
  243 #define strchr  index       /* Forward character search */
  244 #define strrchr rindex      /* Reverse character search */
  245 #endif /* INDEX */
  246 
  247 /*
  248  * Some compilers can't handle void casts.
  249  */
  250 #ifdef  NOVOID
  251 #define VOID            /* Omit void casts */
  252 #else /* NOVOID */
  253 #define VOID    (void)      /* Quiet lint about ignored return values */
  254 #endif /* NOVOID */
  255 
  256 /*
  257  * Adb is more palatable when static functions and variables are
  258  * declared as globals. Lint gives more useful information when
  259  * statics are truly static.
  260  */
  261 #ifdef  lint
  262 #define STATIC  static      /* Declare static variables for lint */
  263 #else /* lint */
  264 #define STATIC          /* Make static variables global for adb */
  265 #endif /* lint */
  266 
  267 /*
  268  * Simple types.
  269  */
  270 typedef struct group Group; /* Structure for getgrgid(3) */
  271 typedef struct passwd Passwd;   /* Structure for getpwuid(3) */
  272 typedef struct tm Time;     /* Structure for localtime(3) */
  273 
  274 #ifdef  S_IFLNK
  275 /*
  276  * File status with symbolic links. Kludged to hold symbolic
  277  * link pathname within structure.
  278  */
  279 typedef struct
  280 {
  281   struct stat sb_stat;
  282   char sb_link[PATHSIZE];
  283   ino_t ino_orig; /* used in -o mode to support -ovv */
  284 } Stat;
  285 
  286 #define STAT(name, asb)     stat(name, &(asb)->sb_stat)
  287 #define FSTAT(fd, asb)      fstat(fd, &(asb)->sb_stat)
  288 #define LSTAT(name, asb)    lstat(name, &(asb)->sb_stat)
  289 #define sb_dev      sb_stat.st_dev
  290 #define sb_ino      sb_stat.st_ino
  291 #define sb_mode     sb_stat.st_mode
  292 #define sb_nlink    sb_stat.st_nlink
  293 #define sb_uid      sb_stat.st_uid
  294 #define sb_gid      sb_stat.st_gid
  295 #define sb_rdev     sb_stat.st_rdev
  296 #define sb_size     sb_stat.st_size
  297 #define sb_atime    sb_stat.st_atime
  298 #define sb_mtime    sb_stat.st_mtime
  299 #define sb_ctime    sb_stat.st_ctime
  300 #define sb_blksize  sb_stat.st_blksize
  301 #define sb_blocks   sb_stat.st_blocks
  302 #else /* !S_IFLNK */
  303 /*
  304  * File status without symbolic links.
  305  */
  306 typedef struct stat Stat;
  307 #define STAT(name, asb)     stat(name, asb)
  308 #define FSTAT(fd, asb)      fstat(fd, asb)
  309 #define LSTAT(name, asb)    stat(name, asb)
  310 #define sb_dev      st_dev
  311 #define sb_ino      st_ino
  312 #define sb_mode     st_mode
  313 #define sb_nlink    st_nlink
  314 #define sb_uid      st_uid
  315 #define sb_gid      st_gid
  316 #define sb_rdev     st_rdev
  317 #define sb_size     st_size
  318 #define sb_atime    st_atime
  319 #define sb_mtime    st_mtime
  320 #define sb_ctime    st_ctime
  321 #endif /* !S_IFLNK */
  322 
  323 /*
  324  * Binary archive header (obsolete).
  325  */
  326 typedef struct
  327 {
  328   short b_dev;          /* Device code */
  329   ushort b_ino;         /* Inode number */
  330   ushort b_mode;        /* Type and permissions */
  331   ushort b_uid;         /* Owner */
  332   ushort b_gid;         /* Group */
  333   short b_nlink;        /* Number of links */
  334   short b_rdev;         /* Real device */
  335   ushort b_mtime[2];        /* Modification time (hi/lo) */
  336   ushort b_name;        /* Length of pathname (with null) */
  337   ushort b_size[2];     /* Length of data */
  338 } Binary;
  339 
  340 /*
  341  * Child process structure.
  342  */
  343 typedef struct child
  344 {
  345   struct child *c_forw;     /* Forward link */
  346   int c_pid;            /* Process ID */
  347   int c_flags;          /* Flags (CF_) */
  348   int c_status;         /* Exit status */
  349 } Child;
  350 
  351 /*
  352  * Child process flags (c_flags).
  353  */
  354 #define CF_EXIT (1<<0)      /* Exited */
  355 
  356 /*
  357  * Hard link sources. One or more are chained from each link
  358  * structure.
  359  */
  360 typedef struct name
  361 {
  362   struct name *p_forw;      /* Forward chain (terminated) */
  363   struct name *p_back;      /* Backward chain (circular) */
  364   char *p_name;         /* Pathname to link from */
  365 } Path;
  366 
  367 /*
  368  * File linking information. One entry exists for each unique
  369  * file with with outstanding hard links.
  370  */
  371 typedef struct link
  372 {
  373   struct link *l_forw;      /* Forward chain (terminated) */
  374   struct link *l_back;      /* Backward chain (terminated) */
  375   dev_t l_dev;          /* Device */
  376   ino_t l_ino;          /* Inode */
  377   ino_t l_ino_ar;       /* Inode nr we will put in the archive */
  378   ushort l_nlink;       /* Unresolved link count */
  379   time_t l_mtime;       /* Modification time */
  380   ushort l_mode;               /* mode */
  381   off_t l_size;         /* Length */
  382   Path *l_path;         /* Pathname(s) to link from */
  383 } Link;
  384 
  385 /*
  386  * Directory information. One entry exists for each directory
  387  * in order to update it with the correct timestamps.
  388  */
  389 typedef struct dir
  390 {
  391   struct dir *d_forw;       /* Forward chain (terminated) */
  392   time_t d_mtime;       /* Modification time */
  393   char *d_name;         /* Pathname of directory */
  394 } Dir;
  395 
  396 
  397 
  398 /*
  399  * Internal functions.
  400  */
  401 VOIDFN copyin (char **);
  402 VOIDFN copyout (char **);
  403 void compressfile (int *, char *, Stat *, int *);
  404 int dirchg (char *, char *);
  405 int dirmake (char *, Stat *);
  406 int dirneed (char *);
  407 void fatal (char *,char *);
  408 void goodbye (int);
  409 VOIDFN in (char **);
  410 void inalloc (uint);
  411 int inascii (char *, char *, Stat *);
  412 int inascii2 (char *, char *, Stat *);
  413 int inascii3 (char *, char *, Stat *);
  414 int inavail (char **, uint*);
  415 int inbinary (char *, char *, Stat *);
  416 int indata (int, off_t, char*);
  417 int inentry (char *, Stat *);
  418 int infill (void);
  419 int inhead (char *, Stat *);
  420 int inread (char *, uint);
  421 int inskip (off_t);
  422 int inswab (char *, char *, Stat *);
  423 int lineget (FILE *, char *, int);
  424 void linkalso (Link *, char * );
  425 Link *linkfrom (Stat *, int);
  426 void linkleft (void);
  427 Link *linkto (char *, Stat *);
  428 #ifndef MEMCPY
  429 char *memcpy (char *, char *, uint);
  430 #endif
  431 char *memget (uint);
  432 char *memstr (char *);
  433 #ifndef MKDIR
  434 int mkdir (char *, ushort);
  435 #endif
  436 void nameadd (char *, int);
  437 int namecmp (char *, Stat *);
  438 int namecmp_ext (char *);
  439 int nameopt (char *);
  440 void next (int, char *);
  441 int runpromptscript (char *);
  442 void nextask (char *, char *, int);
  443 void nextclos (void );
  444 int nextopen (int);
  445 int openin (char *, char *, Stat *, int *);
  446 int openotty (char *, Stat *, Link *, int, int);
  447 int openqtty (void);
  448 int options (int, char **, char *);
  449 VOIDFN out (char **);
  450 void outalloc (size_t);
  451 size_t outavail (char **);
  452 int outdata (int, char*, off_t);
  453 
  454 void outdatazip (int, char*, off_t); /* added KH */
  455 void waitforgzip(void);     /* added KH */
  456 void outdatamem (char *, off_t); /* added KH */
  457 void memreset(void); /* added KH */
  458 int memread(char *buf,int count); /* added KH */
  459 void memfree(void); /* added KH */
  460 int nameaddfile(char *, int, int); /* added KH */
  461 
  462 void outeof (char *, uint);
  463 void outflush (int);
  464 void outhead (char *, Stat *);
  465 void outhead2 (char *, Stat *);
  466 void outhead3 (char *, Stat *);
  467 void outpad (off_t);
  468 void outwait (void);
  469 void outwrite (char *,uint);
  470 VOIDFN pass (char **);
  471 void passdata (char *, int, char*, int);
  472 int passitem (char *, Stat *,int, char**);
  473 int pipechld (int, int *);
  474 int pipeopen (int );
  475 void pipewait (void);
  476 void prsize (FILE *, ulonglong);
  477 VOIDFN readcheck (char **);
  478 VOIDFN process_arname (char *);
  479 #ifndef MKDIR
  480 int rmdir (char *);
  481 #endif
  482 #if !defined (linux) && !defined(__FreeBSD__) && !defined(sun) && !defined(__CYGWIN32__)
  483 VOIDFN (*signal ())();
  484 #endif
  485      ssize_t fswrite (int, char*, size_t);
  486      char *syserr (void);
  487      VOIDFN toc (char **);
  488      void tocentry (char *, Stat *);
  489      void tocmode (mode_t);
  490      void usage (void);
  491      void verify (int);
  492      int warn (char *, char *);
  493      int warn_nocount (char*, char *);
  494      int warnarch (char *, off_t);
  495      int writedisk (int);
  496      int xfork (char *, int);
  497      void xpause (void);
  498      int xwait (int, char *, int);
  499      void mail(char *who,int vol,char *archive);
  500 
  501 ssize_t writeall(int, const char*, size_t);
  502 int incheckentry(char *, Stat *);
  503 int incheckdata (int fd, off_t size, char *name, Stat *asb, int comp);
  504 Link * linkinode16 (dev_t dev, ino_t ino);
  505 int opencontrolscript (char *name);
  506 
  507 int openincheck(char *, Stat *, int *,int);
  508 void mayberewind(void);
  509 int fixinsecure (char *);
  510 
  511 extern  void add_arg(char *arg);
  512 extern  char *compress_arg_list[];
  513 
  514 extern short lflag;
  515 extern short hflag;
  516 
  517 extern int gzipfactor;
  518 extern off_t maxmem;
  519 extern long compthreshold;
  520 extern int ignoreslash;
  521 extern short Zflag;
  522 extern int arfd;
  523 extern int extcasesens;
  524 
  525 extern int forceZflag;
  526 extern char *compressprog;
  527 extern int compressargs;
  528 extern int rewindfd;
  529 extern char *ignorewarnings;
  530 
  531 extern int readcompexts(char*);
  532 
  533 ulonglong optsize (char *);
  534 void update_aruntil(void);
  535 extern ulonglong maxsizetocompress;
  536 extern short noglob;
  537 extern short flag0;