Annotation of 41BSD/cmd/touch.c, revision 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.