BSD 3 development
authorBill Joy <wnj@ucbvax.Berkeley.EDU>
Fri, 23 Nov 1979 12:13:02 +0000 (04:13 -0800)
committerBill Joy <wnj@ucbvax.Berkeley.EDU>
Fri, 23 Nov 1979 12:13:02 +0000 (04:13 -0800)
Work on file usr/src/libc/gen/sleep.c

Synthesized-from: 3bsd

usr/src/libc/gen/sleep.c [new file with mode: 0644]

diff --git a/usr/src/libc/gen/sleep.c b/usr/src/libc/gen/sleep.c
new file mode 100644 (file)
index 0000000..4226dc5
--- /dev/null
@@ -0,0 +1,40 @@
+#include <signal.h>
+#include <setjmp.h>
+
+static jmp_buf jmp;
+
+sleep(n)
+unsigned n;
+{
+       int sleepx();
+       unsigned altime;
+       int (*alsig)() = SIG_DFL;
+
+       if (n==0)
+               return;
+       altime = alarm(1000);   /* time to maneuver */
+       if (setjmp(jmp)) {
+               signal(SIGALRM, alsig);
+               alarm(altime);
+               return;
+       }
+       if (altime) {
+               if (altime > n)
+                       altime -= n;
+               else {
+                       n = altime;
+                       altime = 1;
+               }
+       }
+       alsig = signal(SIGALRM, sleepx);
+       alarm(n);
+       for(;;)
+               pause();
+       /*NOTREACHED*/
+}
+
+static
+sleepx()
+{
+       longjmp(jmp, 1);
+}