1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 * 6 * @(#)dump.h 5.6 (Berkeley) 05/11/89 7 */ 8 9 #define NI 16 10 #define MAXINOPB (MAXBSIZE / sizeof(struct dinode)) 11 #define MAXNINDIR (MAXBSIZE / sizeof(daddr_t)) 12 13 #include <sys/param.h> 14 #include <sys/stat.h> 15 #include <sys/fs.h> 16 #include <sys/inode.h> 17 #include <protocols/dumprestore.h> 18 #include <sys/dir.h> 19 #include <utmp.h> 20 #include <sys/time.h> 21 #include <sys/signal.h> 22 #include <fstab.h> 23 #include <stdio.h> 24 #include <ctype.h> 25 26 #define MWORD(m,i) (m[(unsigned)(i-1)/NBBY]) 27 #define MBIT(i) (1<<((unsigned)(i-1)%NBBY)) 28 #define BIS(i,w) (MWORD(w,i) |= MBIT(i)) 29 #define BIC(i,w) (MWORD(w,i) &= ~MBIT(i)) 30 #define BIT(i,w) (MWORD(w,i) & MBIT(i)) 31 32 int msiz; 33 char *clrmap; 34 char *dirmap; 35 char *nodmap; 36 37 /* 38 * All calculations done in 0.1" units! 39 */ 40 41 char *disk; /* name of the disk file */ 42 char *tape; /* name of the tape file */ 43 char *increm; /* name of the file containing incremental information*/ 44 char *temp; /* name of the file for doing rewrite of increm */ 45 char lastincno; /* increment number of previous dump */ 46 char incno; /* increment number */ 47 int uflag; /* update flag */ 48 int fi; /* disk file descriptor */ 49 int to; /* tape file descriptor */ 50 int pipeout; /* true => output to standard output */ 51 ino_t ino; /* current inumber; used globally */ 52 int nsubdir; 53 int newtape; /* new tape flag */ 54 int nadded; /* number of added sub directories */ 55 int dadded; /* directory added flag */ 56 int density; /* density in 0.1" units */ 57 long tsize; /* tape size in 0.1" units */ 58 long esize; /* estimated tape size, blocks */ 59 long asize; /* number of 0.1" units written on current tape */ 60 int etapes; /* estimated number of tapes */ 61 62 int notify; /* notify operator flag */ 63 int blockswritten; /* number of blocks written on current tape */ 64 int tapeno; /* current tape number */ 65 time_t tstart_writing; /* when started writing the first tape block */ 66 char *processname; 67 struct fs *sblock; /* the file system super block */ 68 char buf[MAXBSIZE]; 69 long dev_bsize; 70 71 char *ctime(); 72 char *prdate(); 73 long atol(); 74 int mark(); 75 int add(); 76 int dirdump(); 77 int dump(); 78 int tapsrec(); 79 int dmpspc(); 80 int dsrch(); 81 int nullf(); 82 char *getsuffix(); 83 char *rawname(); 84 struct dinode *getino(); 85 86 int interrupt(); /* in case operator bangs on console */ 87 88 #define HOUR (60L*60L) 89 #define DAY (24L*HOUR) 90 #define YEAR (365L*DAY) 91 92 /* 93 * Exit status codes 94 */ 95 #define X_FINOK 0 /* normal exit */ 96 #define X_REWRITE 2 /* restart writing from the check point */ 97 #define X_ABORT 3 /* abort all of dump; don't attempt checkpointing*/ 98 99 #define OPGRENT "operator" /* group entry to notify */ 100 #define DIALUP "ttyd" /* prefix for dialups */ 101 102 struct fstab *fstabsearch(); /* search in fs_file and fs_spec */ 103 104 /* 105 * The contents of the file _PATH_DUMPDATES is maintained both on 106 * a linked list, and then (eventually) arrayified. 107 */ 108 struct idates { 109 char id_name[MAXNAMLEN+3]; 110 char id_incno; 111 time_t id_ddate; 112 }; 113 struct itime{ 114 struct idates it_value; 115 struct itime *it_next; 116 }; 117 struct itime *ithead; /* head of the list version */ 118 int nidates; /* number of records (might be zero) */ 119 int idates_in; /* we have read the increment file */ 120 struct idates **idatev; /* the arrayfied version */ 121 #define ITITERATE(i, ip) for (i = 0,ip = idatev[0]; i < nidates; i++, ip = idatev[i]) 122 123 /* 124 * We catch these interrupts 125 */ 126 int sighup(); 127 int sigquit(); 128 int sigill(); 129 int sigtrap(); 130 int sigfpe(); 131 int sigkill(); 132 int sigbus(); 133 int sigsegv(); 134 int sigsys(); 135 int sigalrm(); 136 int sigterm(); 137