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