1 /* restore.h 3.8 83/08/11 */ 2 3 #include <stdio.h> 4 #include <sys/param.h> 5 #include <sys/inode.h> 6 #include <sys/fs.h> 7 8 /* 9 * Flags 10 */ 11 extern int cvtflag; /* convert from old to new tape format */ 12 extern int dflag; /* print out debugging info */ 13 extern int hflag; /* restore heirarchies */ 14 extern int mflag; /* restore by name instead of inode number */ 15 extern int vflag; /* print out actions taken */ 16 extern int yflag; /* always try to recover from tape errors */ 17 /* 18 * Global variables 19 */ 20 extern char *dumpmap; /* map of inodes on this dump tape */ 21 extern char *clrimap; /* map of inodes to be deleted */ 22 extern ino_t maxino; /* highest numbered inode in this file system */ 23 extern long dumpnum; /* location of the dump on this tape */ 24 extern long volno; /* current volume being read */ 25 extern time_t dumptime; /* time that this dump begins */ 26 extern time_t dumpdate; /* time that this dump was made */ 27 extern char command; /* opration being performed */ 28 extern FILE *terminal; /* file descriptor for the terminal input */ 29 30 /* 31 * Each file in the file system is described by one of these entries 32 */ 33 struct entry { 34 char *e_name; /* the current name of this entry */ 35 u_char e_namlen; /* length of this name */ 36 char e_type; /* type of this entry, see below */ 37 short e_flags; /* status flags, see below */ 38 ino_t e_ino; /* inode number in previous file sys */ 39 long e_index; /* unique index (for dumpped table) */ 40 struct entry *e_parent; /* pointer to parent directory (..) */ 41 struct entry *e_sibling; /* next element in this directory (.) */ 42 struct entry *e_links; /* hard links to this inode */ 43 struct entry *e_entries; /* for directories, their entries */ 44 struct entry *e_next; /* hash chain list */ 45 }; 46 /* types */ 47 #define LEAF 1 /* non-directory entry */ 48 #define NODE 2 /* directory entry */ 49 #define LINK 4 /* synthesized type, stripped by addentry */ 50 /* flags */ 51 #define EXTRACT 0x0001 /* entry is to be replaced from the tape */ 52 #define NEW 0x0002 /* a new entry to be extracted */ 53 #define KEEP 0x0004 /* entry is not to change */ 54 #define REMOVED 0x0010 /* entry has been removed */ 55 #define TMPNAME 0x0020 /* entry has been given a temporary name */ 56 /* 57 * functions defined on entry structs 58 */ 59 extern struct entry *lookupino(); 60 extern struct entry *lookupname(); 61 extern struct entry *lookupparent(); 62 extern struct entry *addentry(); 63 extern char *myname(); 64 extern char *savename(); 65 extern char *gentempname(); 66 extern char *flagvalues(); 67 extern ino_t lowerbnd(); 68 extern ino_t upperbnd(); 69 #define NIL ((struct entry *)(0)) 70 /* 71 * Constants associated with entry structs 72 */ 73 #define HARDLINK 1 74 #define SYMLINK 2 75 #define TMPHDR "RSTTMP" 76 77 /* 78 * The entry describes the next file available on the tape 79 */ 80 struct context { 81 char *name; /* name of file */ 82 ino_t ino; /* inumber of file */ 83 struct dinode *dip; /* pointer to inode */ 84 char action; /* action being taken on this file */ 85 } curfile; 86 /* actions */ 87 #define USING 1 /* extracting from the tape */ 88 #define SKIP 2 /* skipping */ 89 #define UNKNOWN 3 /* disposition or starting point is unknown */ 90 91 /* 92 * Other exported routines 93 */ 94 extern ino_t psearch(); 95 extern ino_t dirlookup(); 96 extern long listfile(); 97 extern long deletefile(); 98 extern long addfile(); 99 extern long nodeupdates(); 100 extern long verifyfile(); 101 extern char *rindex(); 102 extern char *index(); 103 extern char *strcat(); 104 extern char *strncat(); 105 extern char *strcpy(); 106 extern char *strncpy(); 107 extern char *fgets(); 108 extern char *mktemp(); 109 extern char *malloc(); 110 extern char *calloc(); 111 extern char *realloc(); 112 extern long lseek(); 113 114 /* 115 * Useful macros 116 */ 117 #define MWORD(m,i) (m[(unsigned)(i-1)/NBBY]) 118 #define MBIT(i) (1<<((unsigned)(i-1)%NBBY)) 119 #define BIS(i,w) (MWORD(w,i) |= MBIT(i)) 120 #define BIC(i,w) (MWORD(w,i) &= ~MBIT(i)) 121 #define BIT(i,w) (MWORD(w,i) & MBIT(i)) 122 123 #define dprintf if (dflag) fprintf 124 #define vprintf if (vflag) fprintf 125 126 #define GOOD 1 127 #define FAIL 0 128