# 2.11BSD#431 - /usr/src/usr.bin/touch.c

##### Functions

    main              X
    readwrite         X
    touch             X

##### Variables

    dontcreate        X
    force             X
    whoami            X

       1: #ifndef lint
       2: static  char sccsid[] = "@(#)touch.c	4.3 (Berkeley) 8/11/83";
       3: #endif
       4:
       5: /*
       6:  *	attempt to set the modify date of a file to the current date.
       7:  *	if the file exists, read and write its first character.
       8:  *	if the file doesn't exist, create it, unless -c option prevents it.
       9:  *	if the file is read-only, -f forces chmod'ing and touch'ing.
      10:  */
      11:
      12: #include <stdio.h>
      13: #include <sys/types.h>
      14: #include <sys/stat.h>
      15:
      16: int dontcreate; /* set if -c option */
      17: int force;      /* set if -f option */
      18:
      19: char *whoami = "touch";
      20:
      21: main(argc,argv)
      22:     int argc;
      23:     char    **argv;
      24: {
      25:     char    *argp;
      26:
      27:     dontcreate = 0;
      28:     force = 0;
      29:     for (argv++; **argv == '-'; argv++) {
      30:         for (argp = &(*argv)[1]; *argp; argp++) {
      31:             switch (*argp) {
      32:             case 'c':
      33:                 dontcreate = 1;
      34:                 break;
      35:             case 'f':
      36:                 force = 1;
      37:                 break;
      38:             default:
      39:                 fprintf(stderr, "%s: bad option -%c\n",
      40:                     whoami, *argp);
      41:                 exit(1);
      42:             }
      43:         }
      44:     }
      45:     for (/*void*/; *argv; argv++) {
      46:         touch(*argv);
      47:     }
      48: }
      49:
      50: touch(filename)
      51:     char    *filename;
      52: {
      53:     struct stat statbuffer;
      54:
      55:     if (stat(filename,&statbuffer) == -1) {
      56:         if (!dontcreate) {
      57:             readwrite(filename,0L);
      58:         } else {
      59:             fprintf(stderr, "%s: %s: does not exist\n",
      60:                 whoami, filename);
      61:         }
      62:         return;
      63:     }
      64:     if ((statbuffer.st_mode & S_IFMT) != S_IFREG) {
      65:         fprintf(stderr, "%s: %s: can only touch regular files\n",
      66:             whoami, filename);
      67:         return;
      68:     }
      69:     if (!access(filename,4|2)) {
      70:         readwrite(filename,statbuffer.st_size);
      71:         return;
      72:     }
      73:     if (force) {
      74:         if (chmod(filename,0666)) {
      75:             fprintf(stderr, "%s: %s: couldn't chmod: ",
      76:                 whoami, filename);
      77:             perror("");
      78:             return;
      79:         }
      80:         readwrite(filename,statbuffer.st_size);
      81:         if (chmod(filename,statbuffer.st_mode)) {
      82:             fprintf(stderr, "%s: %s: couldn't chmod back: ",
      83:                 whoami, filename);
      84:             perror("");
      85:             return;
      86:         }
      87:     } else {
      88:         fprintf(stderr, "%s: %s: cannot touch\n", whoami, filename);
      89:     }
      90: }
      91:
      92: readwrite(filename,size)
      93:     char    *filename;
      94:     off_t   size;
      95: {
      96:     int filedescriptor;
      97:     char    first;
      98:
      99:     if (size) {
     100:         filedescriptor = open(filename,2);
     101:         if (filedescriptor == -1) {
     102: error:
     103:             fprintf(stderr, "%s: %s: ", whoami, filename);
     104:             perror("");
     105:             return;
     106:         }
     107:         if (read(filedescriptor, &first, 1) != 1) {
     108:             goto error;
     109:         }
     110:         if (lseek(filedescriptor,0l,0) == -1) {
     111:             goto error;
     112:         }
     113:         if (write(filedescriptor, &first, 1) != 1) {
     114:             goto error;
     115:         }
     116:     } else {
     117:         filedescriptor = creat(filename,0666);
     118:         if (filedescriptor == -1) {
     119:             goto error;
     120:         }
     121:     }
     122:     if (close(filedescriptor) == -1) {
     123:         goto error;
     124:     }
     125: }

#### Defined functions

main defined in line 21; never used
readwrite defined in line 92; used 3 times

- in line 57, 70, 80

touch defined in line 50; used 1 times

- in line 46

#### Defined variables

dontcreate defined in line 16; used 3 times

- in line 27, 33, 56

force defined in line 17; used 3 times

- in line 28, 36, 73

sccsid defined in line 2; never used
whoami defined in line 19; used 7 times

- in line 40, 60, 66, 76, 83-88(2), 103

Last modified: 1987-03-13 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1412 |