Work on file usr/src/libc/gen/sleep.c
Synthesized-from: 3bsd
--- /dev/null
+#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);
+}