summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authorjh <jh@FreeBSD.org>2012-02-04 13:37:31 +0000
committerjh <jh@FreeBSD.org>2012-02-04 13:37:31 +0000
commit95784fde4016f782cc1f27cc67d80823d6b67a09 (patch)
treefa623f979d01546c6d63ae8b45b86d976fde5738 /usr.bin
parent9dcb44a0cf7752c503bb1de139329297f9c2294e (diff)
downloadFreeBSD-src-95784fde4016f782cc1f27cc67d80823d6b67a09.zip
FreeBSD-src-95784fde4016f782cc1f27cc67d80823d6b67a09.tar.gz
Remove useless and potentially dangerous rw() function which tries to
update access and modification times by reading and writing the file. chmod(2) in rw() doesn't help because utimes(2) allow owner and the super-user to change times. Using just utimes(2) should be sufficient. The -f option becomes no-op. Reviewed by: jilles
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/touch/touch.17
-rw-r--r--usr.bin/touch/touch.c68
2 files changed, 8 insertions, 67 deletions
diff --git a/usr.bin/touch/touch.1 b/usr.bin/touch/touch.1
index 1f3b8c2..c2b0a60 100644
--- a/usr.bin/touch/touch.1
+++ b/usr.bin/touch/touch.1
@@ -31,7 +31,7 @@
.\" @(#)touch.1 8.3 (Berkeley) 4/28/95
.\" $FreeBSD$
.\"
-.Dd April 28, 1995
+.Dd February 4, 2012
.Dt TOUCH 1
.Os
.Sh NAME
@@ -40,7 +40,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl A Ar [-][[hh]mm]SS
-.Op Fl acfhm
+.Op Fl achm
.Op Fl r Ar file
.Op Fl t Ar [[CC]YY]MMDDhhmm[.SS]
.Ar
@@ -109,9 +109,6 @@ The
.Nm
utility does not treat this as an error.
No error messages are displayed and the exit value is not affected.
-.It Fl f
-Attempt to force the update, even if the file permissions do not
-currently permit it.
.It Fl h
If the file is a symbolic link, change the times of the link
itself rather than the file that the link points to.
diff --git a/usr.bin/touch/touch.c b/usr.bin/touch/touch.c
index ce507b5..7a613e8 100644
--- a/usr.bin/touch/touch.c
+++ b/usr.bin/touch/touch.c
@@ -55,7 +55,6 @@ static const char sccsid[] = "@(#)touch.c 8.1 (Berkeley) 6/6/93";
#include <time.h>
#include <unistd.h>
-int rw(char *, struct stat *, int);
void stime_arg1(char *, struct timeval *);
void stime_arg2(char *, int, struct timeval *);
void stime_file(char *, struct timeval *);
@@ -69,12 +68,12 @@ main(int argc, char *argv[])
struct timeval tv[2];
int (*stat_f)(const char *, struct stat *);
int (*utimes_f)(const char *, const struct timeval *);
- int Aflag, aflag, cflag, fflag, mflag, ch, fd, len, rval, timeset;
+ int Aflag, aflag, cflag, mflag, ch, fd, len, rval, timeset;
char *p;
char *myname;
myname = basename(argv[0]);
- Aflag = aflag = cflag = fflag = mflag = timeset = 0;
+ Aflag = aflag = cflag = mflag = timeset = 0;
stat_f = stat;
utimes_f = utimes;
if (gettimeofday(&tv[0], NULL))
@@ -92,7 +91,7 @@ main(int argc, char *argv[])
cflag = 1;
break;
case 'f':
- fflag = 1;
+ /* No-op for compatibility. */
break;
case 'h':
cflag = 1;
@@ -222,14 +221,8 @@ main(int argc, char *argv[])
if (!utimes_f(*argv, NULL))
continue;
- /* Try reading/writing. */
- if (!S_ISLNK(sb.st_mode) && !S_ISDIR(sb.st_mode)) {
- if (rw(*argv, &sb, fflag))
- rval = 1;
- } else {
- rval = 1;
- warn("%s", *argv);
- }
+ rval = 1;
+ warn("%s", *argv);
}
exit(rval);
}
@@ -368,59 +361,10 @@ stime_file(char *fname, struct timeval *tvp)
TIMESPEC_TO_TIMEVAL(tvp + 1, &sb.st_mtim);
}
-int
-rw(char *fname, struct stat *sbp, int force)
-{
- int fd, needed_chmod, rval;
- u_char byte;
-
- /* Try regular files. */
- if (!S_ISREG(sbp->st_mode)) {
- warnx("%s: %s", fname, strerror(EFTYPE));
- return (1);
- }
-
- needed_chmod = rval = 0;
- if ((fd = open(fname, O_RDWR, 0)) == -1) {
- if (!force || chmod(fname, DEFFILEMODE))
- goto err;
- if ((fd = open(fname, O_RDWR, 0)) == -1)
- goto err;
- needed_chmod = 1;
- }
-
- if (sbp->st_size != 0) {
- if (read(fd, &byte, sizeof(byte)) != sizeof(byte))
- goto err;
- if (lseek(fd, (off_t)0, SEEK_SET) == -1)
- goto err;
- if (write(fd, &byte, sizeof(byte)) != sizeof(byte))
- goto err;
- } else {
- if (write(fd, &byte, sizeof(byte)) != sizeof(byte)) {
-err: rval = 1;
- warn("%s", fname);
- } else if (ftruncate(fd, (off_t)0)) {
- rval = 1;
- warn("%s: file modified", fname);
- }
- }
-
- if (close(fd) && rval != 1) {
- rval = 1;
- warn("%s", fname);
- }
- if (needed_chmod && chmod(fname, sbp->st_mode) && rval != 1) {
- rval = 1;
- warn("%s: permissions modified", fname);
- }
- return (rval);
-}
-
void
usage(char *myname)
{
- fprintf(stderr, "usage:\n" "%s [-A [-][[hh]mm]SS] [-acfhm] [-r file] "
+ fprintf(stderr, "usage:\n" "%s [-A [-][[hh]mm]SS] [-achm] [-r file] "
"[-t [[CC]YY]MMDDhhmm[.SS]] file ...\n", myname);
exit(1);
}
OpenPOWER on IntegriCloud