diff options
author | mckusick <mckusick@FreeBSD.org> | 2002-07-17 02:03:19 +0000 |
---|---|---|
committer | mckusick <mckusick@FreeBSD.org> | 2002-07-17 02:03:19 +0000 |
commit | 3abb526f86a27b005f352fb91f605228876fa8f7 (patch) | |
tree | 5b5d1d91499a541486f56f84b49c10edeafd66b2 /sbin | |
parent | 9498a983a938cec96851b64642f0b62bba7d1827 (diff) | |
download | FreeBSD-src-3abb526f86a27b005f352fb91f605228876fa8f7.zip FreeBSD-src-3abb526f86a27b005f352fb91f605228876fa8f7.tar.gz |
Change utimes to set the file creation time (for filesystems that
support creation times such as UFS2) to the value of the
modification time if the value of the modification time is older
than the current creation time. See utimes(2) for further details.
Sponsored by: DARPA & NAI Labs.
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/dump/traverse.c | 8 | ||||
-rw-r--r-- | sbin/restore/dirs.c | 18 | ||||
-rw-r--r-- | sbin/restore/restore.h | 2 | ||||
-rw-r--r-- | sbin/restore/tape.c | 28 |
4 files changed, 37 insertions, 19 deletions
diff --git a/sbin/dump/traverse.c b/sbin/dump/traverse.c index 733ac26..4cbce6e 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 323e9ff..dba5738 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 cb10d81..6aff827 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 2b2ab91..1392f59 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; |