xref: /original-bsd/sbin/restore/restore.h (revision 8251a00e)
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