aboutsummaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorKirk McKusick <mckusick@FreeBSD.org>2002-07-17 02:03:19 +0000
committerKirk McKusick <mckusick@FreeBSD.org>2002-07-17 02:03:19 +0000
commitfb36a3d8472e3b7c446b5501635ec34eb1ebaa00 (patch)
tree5b5d1d91499a541486f56f84b49c10edeafd66b2 /sbin
parenta1dc2096387101165d53fe98677d3e4e1d0557ad (diff)
Notes
Diffstat (limited to 'sbin')
-rw-r--r--sbin/dump/traverse.c8
-rw-r--r--sbin/restore/dirs.c18
-rw-r--r--sbin/restore/restore.h2
-rw-r--r--sbin/restore/tape.c28
4 files changed, 37 insertions, 19 deletions
diff --git a/sbin/dump/traverse.c b/sbin/dump/traverse.c
index 733ac265c0ec4..4cbce6ecfc69a 100644
--- a/sbin/dump/traverse.c
+++ b/sbin/dump/traverse.c
@@ -407,8 +407,8 @@ dumpino(union dinode *dp, ino_t ino)
spcl.c_atimensec = dp->dp1.di_atimensec;
spcl.c_mtime = _time32_to_time(dp->dp1.di_mtime);
spcl.c_mtimensec = dp->dp1.di_mtimensec;
- spcl.c_createtime = 0;
- spcl.c_createtimensec = 0;
+ spcl.c_birthtime = 0;
+ spcl.c_birthtimensec = 0;
spcl.c_rdev = dp->dp1.di_rdev;
spcl.c_file_flags = dp->dp1.di_flags;
spcl.c_uid = dp->dp1.di_uid;
@@ -420,8 +420,8 @@ dumpino(union dinode *dp, ino_t ino)
spcl.c_atimensec = dp->dp2.di_atimensec;
spcl.c_mtime = _time64_to_time(dp->dp2.di_mtime);
spcl.c_mtimensec = dp->dp2.di_mtimensec;
- spcl.c_createtime = _time64_to_time(dp->dp2.di_createtime);
- spcl.c_createtimensec = dp->dp2.di_creatensec;
+ spcl.c_birthtime = _time64_to_time(dp->dp2.di_birthtime);
+ spcl.c_birthtimensec = dp->dp2.di_birthnsec;
spcl.c_rdev = dp->dp2.di_rdev;
spcl.c_file_flags = dp->dp2.di_flags;
spcl.c_uid = dp->dp2.di_uid;
diff --git a/sbin/restore/dirs.c b/sbin/restore/dirs.c
index 323e9ff6bc1a9..dba5738036842 100644
--- a/sbin/restore/dirs.c
+++ b/sbin/restore/dirs.c
@@ -82,7 +82,8 @@ static struct inotab *inotab[HASHSIZE];
*/
struct modeinfo {
ino_t ino;
- struct timeval timep[2];
+ struct timeval ctimep[2];
+ struct timeval mtimep[2];
mode_t mode;
uid_t uid;
gid_t gid;
@@ -597,7 +598,8 @@ setdirmodes(int flags)
if (!Nflag) {
(void) chown(cp, node.uid, node.gid);
(void) chmod(cp, node.mode);
- utimes(cp, node.timep);
+ utimes(cp, node.ctimep);
+ utimes(cp, node.mtimep);
(void) chflags(cp, node.flags);
}
ep->e_flags &= ~NEW;
@@ -685,10 +687,14 @@ allocinotab(struct context *ctxp, long seekpt)
if (mf == NULL)
return (itp);
node.ino = ctxp->ino;
- node.timep[0].tv_sec = ctxp->atime_sec;
- node.timep[0].tv_usec = ctxp->atime_nsec / 1000;
- node.timep[1].tv_sec = ctxp->mtime_sec;
- node.timep[1].tv_usec = ctxp->mtime_nsec / 1000;
+ node.mtimep[0].tv_sec = ctxp->atime_sec;
+ node.mtimep[0].tv_usec = ctxp->atime_nsec / 1000;
+ node.mtimep[1].tv_sec = ctxp->mtime_sec;
+ node.mtimep[1].tv_usec = ctxp->mtime_nsec / 1000;
+ node.ctimep[0].tv_sec = ctxp->atime_sec;
+ node.ctimep[0].tv_usec = ctxp->atime_nsec / 1000;
+ node.ctimep[1].tv_sec = ctxp->birthtime_sec;
+ node.ctimep[1].tv_usec = ctxp->birthtime_nsec / 1000;
node.mode = ctxp->mode;
node.flags = ctxp->file_flags;
node.uid = ctxp->uid;
diff --git a/sbin/restore/restore.h b/sbin/restore/restore.h
index cb10d8169e5c9..6aff827dfc803 100644
--- a/sbin/restore/restore.h
+++ b/sbin/restore/restore.h
@@ -113,8 +113,10 @@ struct context {
int rdev; /* device number of file */
time_t atime_sec; /* access time seconds */
time_t mtime_sec; /* modified time seconds */
+ time_t birthtime_sec; /* creation time seconds */
int atime_nsec; /* access time nanoseconds */
int mtime_nsec; /* modified time nanoseconds */
+ int birthtime_nsec; /* creation time nanoseconds */
off_t size; /* size of file */
char *name; /* name of file */
} curfile;
diff --git a/sbin/restore/tape.c b/sbin/restore/tape.c
index 2b2ab916c470b..1392f59e8a049 100644
--- a/sbin/restore/tape.c
+++ b/sbin/restore/tape.c
@@ -521,15 +521,19 @@ extractfile(char *name)
{
int flags;
mode_t mode;
- struct timeval timep[2];
+ struct timeval mtimep[2], ctimep[2];
struct entry *ep;
curfile.name = name;
curfile.action = USING;
- timep[0].tv_sec = curfile.atime_sec;
- timep[0].tv_usec = curfile.atime_nsec / 1000;
- timep[1].tv_sec = curfile.mtime_sec;
- timep[1].tv_usec = curfile.mtime_nsec / 1000;
+ mtimep[0].tv_sec = curfile.atime_sec;
+ mtimep[0].tv_usec = curfile.atime_nsec / 1000;
+ mtimep[1].tv_sec = curfile.mtime_sec;
+ mtimep[1].tv_usec = curfile.mtime_nsec / 1000;
+ ctimep[0].tv_sec = curfile.atime_sec;
+ ctimep[0].tv_usec = curfile.atime_nsec / 1000;
+ ctimep[1].tv_sec = curfile.birthtime_sec;
+ ctimep[1].tv_usec = curfile.birthtime_nsec / 1000;
mode = curfile.mode;
flags = curfile.file_flags;
switch (mode & IFMT) {
@@ -567,7 +571,8 @@ extractfile(char *name)
if (linkit(lnkbuf, name, SYMLINK) == GOOD) {
(void) lchown(name, curfile.uid, curfile.gid);
(void) lchmod(name, mode);
- (void) lutimes(name, timep);
+ (void) lutimes(name, ctimep);
+ (void) lutimes(name, mtimep);
return (GOOD);
}
return (FAIL);
@@ -588,7 +593,8 @@ extractfile(char *name)
}
(void) chown(name, curfile.uid, curfile.gid);
(void) chmod(name, mode);
- (void) utimes(name, timep);
+ (void) utimes(name, ctimep);
+ (void) utimes(name, mtimep);
(void) chflags(name, flags);
skipfile();
return (GOOD);
@@ -610,7 +616,8 @@ extractfile(char *name)
}
(void) chown(name, curfile.uid, curfile.gid);
(void) chmod(name, mode);
- (void) utimes(name, timep);
+ (void) utimes(name, ctimep);
+ (void) utimes(name, mtimep);
(void) chflags(name, flags);
skipfile();
return (GOOD);
@@ -634,7 +641,8 @@ extractfile(char *name)
(void) fchmod(ofile, mode);
getfile(xtrfile, xtrskip);
(void) close(ofile);
- utimes(name, timep);
+ (void) utimes(name, ctimep);
+ (void) utimes(name, mtimep);
(void) chflags(name, flags);
return (GOOD);
}
@@ -1174,6 +1182,8 @@ findinode(struct s_spcl *header)
curfile.atime_nsec = header->c_atimensec;
curfile.mtime_sec = header->c_mtime;
curfile.mtime_nsec = header->c_mtimensec;
+ curfile.birthtime_sec = header->c_birthtime;
+ curfile.birthtime_nsec = header->c_birthtimensec;
curfile.size = header->c_size;
curfile.ino = header->c_inumber;
break;