Annotation of researchv9/libc/gen/sleep.c, revision 1.1

1.1     ! root        1: #include <signal.h>
        !             2: #include <setjmp.h>
        !             3: 
        !             4: static jmp_buf jmp;
        !             5: 
        !             6: sleep(n)
        !             7: unsigned n;
        !             8: {
        !             9:        int sleepx();
        !            10:        unsigned altime;
        !            11:        unsigned sltime;
        !            12:        int (*alsig)() = SIG_DFL;
        !            13: 
        !            14:        if (n==0)
        !            15:                return;
        !            16:        altime = alarm(1000);   /* time to maneuver */
        !            17:        if (setjmp(jmp)) {
        !            18:                signal(SIGALRM, alsig);
        !            19:                if (sltime) {
        !            20:                        kill(getpid(), SIGALRM);
        !            21:                        sleep(sltime);
        !            22:                        return;
        !            23:                }
        !            24:                alarm(altime);
        !            25:                return;
        !            26:        }
        !            27:        sltime = 0;
        !            28:        if (altime) {
        !            29:                if (altime < n) {
        !            30:                        sltime = n - altime;
        !            31:                        n -= altime;
        !            32:                } else {
        !            33:                        altime -= n;
        !            34:                        if (altime == 0)
        !            35:                                altime = 1;
        !            36:                }
        !            37:        }
        !            38:        alsig = signal(SIGALRM, sleepx);
        !            39:        alarm(n);
        !            40:        for(;;)
        !            41:                pause();
        !            42:        /*NOTREACHED*/
        !            43: }
        !            44: 
        !            45: static
        !            46: sleepx()
        !            47: {
        !            48:        longjmp(jmp, 1);
        !            49: }

unix.superglobalmegacorp.com

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