svn commit: r230979 - head/usr.bin/touch
Sergey Kandaurov
pluknet at freebsd.org
Sun Feb 5 07:46:06 UTC 2012
On 4 February 2012 17:37, Jaakko Heinonen <jh at freebsd.org> wrote:
> Author: jh
> Date: Sat Feb 4 13:37:31 2012
> New Revision: 230979
> URL: http://svn.freebsd.org/changeset/base/230979
>
> Log:
> 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
>
> Modified:
> head/usr.bin/touch/touch.1
> head/usr.bin/touch/touch.c
Thank you.
FYI, this code was written before utimes(2) was born (yes, before 4.2BSD),
so it was technically correct to remove it for more than 20 years ago.
>
> Modified: head/usr.bin/touch/touch.1
> ==============================================================================
> --- head/usr.bin/touch/touch.1 Sat Feb 4 13:12:52 2012 (r230978)
> +++ head/usr.bin/touch/touch.1 Sat Feb 4 13:37:31 2012 (r230979)
> @@ -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.
>
> Modified: head/usr.bin/touch/touch.c
> ==============================================================================
> --- head/usr.bin/touch/touch.c Sat Feb 4 13:12:52 2012 (r230978)
> +++ head/usr.bin/touch/touch.c Sat Feb 4 13:37:31 2012 (r230979)
> @@ -55,7 +55,6 @@ static const char sccsid[] = "@(#)touch.
> #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 *
> 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);
> }
--
wbr,
pluknet
More information about the svn-src-all
mailing list