]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sbin/restore/restore.h
Remove spurious newline
[FreeBSD/FreeBSD.git] / sbin / restore / restore.h
1 /*-
2  * SPDX-License-Identifier: BSD-3-Clause
3  *
4  * Copyright (c) 1983, 1993
5  *      The Regents of the University of California.  All rights reserved.
6  * (c) UNIX System Laboratories, Inc.
7  * All or some portions of this file are derived from material licensed
8  * to the University of California by American Telephone and Telegraph
9  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
10  * the permission of UNIX System Laboratories, Inc.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions and the following disclaimer.
17  * 2. Redistributions in binary form must reproduce the above copyright
18  *    notice, this list of conditions and the following disclaimer in the
19  *    documentation and/or other materials provided with the distribution.
20  * 3. Neither the name of the University nor the names of its contributors
21  *    may be used to endorse or promote products derived from this software
22  *    without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  *      @(#)restore.h   8.3 (Berkeley) 9/13/94
37  * $FreeBSD$
38  */
39
40 /*
41  * Flags
42  */
43 extern int      bflag;          /* set input block size */
44 extern int      dflag;          /* print out debugging info */
45 extern int      Dflag;          /* degraded mode - try hard to get stuff back */
46 extern int      hflag;          /* restore hierarchies */
47 extern int      mflag;          /* restore by name instead of inode number */
48 extern int      Nflag;          /* do not write the disk */
49 extern int      uflag;          /* unlink symlink targets */
50 extern int      vflag;          /* print out actions taken */
51 extern int      yflag;          /* always try to recover from tape errors */
52 /*
53  * Global variables
54  */
55 extern char     *dumpmap;       /* map of inodes on this dump tape */
56 extern char     *usedinomap;    /* map of inodes that are in use on this fs */
57 extern ino_t    maxino;         /* highest numbered inode in this file system */
58 extern long     dumpnum;        /* location of the dump on this tape */
59 extern long     volno;          /* current volume being read */
60 extern long     ntrec;          /* number of TP_BSIZE records per tape block */
61 extern time_t   dumptime;       /* time that this dump begins */
62 extern time_t   dumpdate;       /* time that this dump was made */
63 extern char     command;        /* opration being performed */
64 extern FILE     *terminal;      /* file descriptor for the terminal input */
65 extern int      Bcvt;           /* need byte swapping on inodes and dirs */
66 extern int      oldinofmt;      /* reading tape with FreeBSD 1 format inodes */
67
68 /*
69  * Each file in the file system is described by one of these entries
70  */
71 struct entry {
72         char    *e_name;                /* the current name of this entry */
73         u_char  e_namlen;               /* length of this name */
74         char    e_type;                 /* type of this entry, see below */
75         short   e_flags;                /* status flags, see below */
76         ino_t   e_ino;                  /* inode number in previous file sys */
77         long    e_index;                /* unique index (for dumpped table) */
78         struct  entry *e_parent;        /* pointer to parent directory (..) */
79         struct  entry *e_sibling;       /* next element in this directory (.) */
80         struct  entry *e_links;         /* hard links to this inode */
81         struct  entry *e_entries;       /* for directories, their entries */
82         struct  entry *e_next;          /* hash chain list */
83 };
84 /* types */
85 #define LEAF 1                  /* non-directory entry */
86 #define NODE 2                  /* directory entry */
87 #define LINK 4                  /* synthesized type, stripped by addentry */
88 /* flags */
89 #define EXTRACT         0x0001  /* entry is to be replaced from the tape */
90 #define NEW             0x0002  /* a new entry to be extracted */
91 #define KEEP            0x0004  /* entry is not to change */
92 #define REMOVED         0x0010  /* entry has been removed */
93 #define TMPNAME         0x0020  /* entry has been given a temporary name */
94 #define EXISTED         0x0040  /* directory already existed during extract */
95
96 /*
97  * Constants associated with entry structs
98  */
99 #define HARDLINK        1
100 #define SYMLINK         2
101 #define TMPHDR          "RSTTMP"
102
103 /*
104  * The entry describes the next file available on the tape
105  */
106 struct context {
107         short   action;         /* action being taken on this file */
108         mode_t  mode;           /* mode of file */
109         ino_t   ino;            /* inumber of file */
110         uid_t   uid;            /* file owner */
111         gid_t   gid;            /* file group */
112         int     file_flags;     /* status flags (chflags) */
113         int     rdev;           /* device number of file */
114         time_t  atime_sec;      /* access time seconds */
115         time_t  mtime_sec;      /* modified time seconds */
116         time_t  birthtime_sec;  /* creation time seconds */
117         int     atime_nsec;     /* access time nanoseconds */
118         int     mtime_nsec;     /* modified time nanoseconds */
119         int     birthtime_nsec; /* creation time nanoseconds */
120         int     extsize;        /* size of extended attribute data */
121         off_t   size;           /* size of file */
122         char    *name;          /* name of file */
123 } curfile;
124 /* actions */
125 #define USING   1       /* extracting from the tape */
126 #define SKIP    2       /* skipping */
127 #define UNKNOWN 3       /* disposition or starting point is unknown */
128
129 /*
130  * Definitions for library routines operating on directories.
131  */
132 typedef struct rstdirdesc RST_DIR;
133
134 /*
135  * Flags to setdirmodes.
136  */
137 #define FORCE   0x0001
138
139 /*
140  * Useful macros
141  */
142 #define TSTINO(ino, map) \
143         (map[(u_int)((ino) - 1) / CHAR_BIT] & \
144             (1 << ((u_int)((ino) - 1) % CHAR_BIT)))
145 #define SETINO(ino, map) \
146         map[(u_int)((ino) - 1) / CHAR_BIT] |= \
147             1 << ((u_int)((ino) - 1) % CHAR_BIT)
148
149 #define dprintf         if (dflag) fprintf
150 #define vprintf         if (vflag) fprintf
151
152 #define GOOD 1
153 #define FAIL 0
154
155 #define NFS_DR_NEWINODEFMT      0x2     /* Tape uses 4.4 BSD inode format */