Annotation of 40BSD/cmd/touch.c, revision 1.1.1.1

1.1       root        1: static char *sccsid = "@(#)touch.c     4.1 (Berkeley) 10/1/80";
                      2: #include <stdio.h>
                      3: 
                      4: 
                      5: main(argc,argv)
                      6: int argc;
                      7: char *argv[];
                      8: {
                      9: int i;
                     10: static int force = 1;
                     11: 
                     12: for(i = 1 ; i < argc ; ++i)
                     13:        if( strcmp(argv[i], "-c") )
                     14:                touch(force, argv[i]);
                     15:        else
                     16:                force = 0;
                     17: }
                     18: 
                     19: 
                     20: 
                     21: 
                     22: #include <sys/types.h>
                     23: #include <sys/stat.h>
                     24: 
                     25: 
                     26: touch(force, name)
                     27: int force;
                     28: char *name;
                     29: {
                     30: struct stat stbuff;
                     31: char junk[1];
                     32: int fd;
                     33: 
                     34: if( stat(name,&stbuff) < 0)
                     35:        if(force)
                     36:                goto create;
                     37:        else
                     38:                {
                     39:                fprintf(stderr, "touch: file %s does not exist.\n", name);
                     40:                return;
                     41:                }
                     42: 
                     43: if(stbuff.st_size == 0)
                     44:        goto create;
                     45: 
                     46: if( (fd = open(name, 2)) < 0)
                     47:        goto bad;
                     48: 
                     49: if( read(fd, junk, 1) < 1)
                     50:        {
                     51:        close(fd);
                     52:        goto bad;
                     53:        }
                     54: lseek(fd, 0L, 0);
                     55: if( write(fd, junk, 1) < 1 )
                     56:        {
                     57:        close(fd);
                     58:        goto bad;
                     59:        }
                     60: close(fd);
                     61: return;
                     62: 
                     63: bad:
                     64:        fprintf(stderr, "Cannot touch %s\n", name);
                     65:        return;
                     66: 
                     67: create:
                     68:        if( (fd = creat(name, 0666)) < 0)
                     69:                goto bad;
                     70:        close(fd);
                     71: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.