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