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