|
|
1.1 root 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.