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