Annotation of researchv8dc/cmd/upas/print/semaphore.c, revision 1.1

1.1     ! root        1: #include <stdio.h>
        !             2: #include <sys/types.h>
        !             3: #include <sys/stat.h>
        !             4: #include "mail.h"
        !             5: #include "string.h"
        !             6: 
        !             7: /* imported */
        !             8: extern char *getenv();
        !             9: extern int getpid();
        !            10: extern char *ttyname();
        !            11: 
        !            12: /* global to the module */
        !            13: static char semaphore[PATHSIZE];
        !            14: static char tty[64];
        !            15: 
        !            16: extern void
        !            17: V()
        !            18: {
        !            19:        unlink(semaphore);
        !            20: }
        !            21: 
        !            22: /* return name of tty if file is already being read, NULL otherwise */
        !            23: extern char *
        !            24: P()
        !            25: {
        !            26:        char file[PATHSIZE];
        !            27:        struct stat sbuf;
        !            28:        FILE *fp;
        !            29:        int pid;
        !            30:        char *home = getenv("HOME");
        !            31: 
        !            32:        if (home == NULL)
        !            33:                return NULL;
        !            34:        (void)strcpy(file, home);
        !            35:        (void)strcat(file, "/.Maillock");
        !            36:        if (stat(file, &sbuf) >= 0) {
        !            37: 
        !            38:                /* lock file exists */
        !            39:                fp = fopen(file, "r");
        !            40:                if (fp == NULL)
        !            41:                        return "another tty";
        !            42:                fscanf(fp, "%d %s", &pid, tty);
        !            43:                fclose(fp);
        !            44:                if (kill(pid, 0) == 0)
        !            45:                        return tty;
        !            46:        }
        !            47: 
        !            48:        /* create a semaphore file */
        !            49:        strcpy(semaphore, file);
        !            50:        V();
        !            51:        fp = fopen(semaphore, "w");
        !            52:        if (fp == NULL)
        !            53:                return 0;               /* nothing else we can do */
        !            54:        fprintf(fp, "%d %s\n", getpid(), ttyname(2));
        !            55:        fclose(fp);
        !            56:        return 0;
        !            57: }
        !            58: 

unix.superglobalmegacorp.com

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