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
touch defined in line 50; used 1 times
  • in line 46

Defined variables

dontcreate defined in line 16; used 3 times
force defined in line 17; used 3 times
sccsid defined in line 2; never used
whoami defined in line 19; used 7 times
Last modified: 1987-03-13
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 3663
Valid CSS Valid XHTML 1.0 Strict