summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ppp/timer.c
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1997-10-23 21:32:48 +0000
committerache <ache@FreeBSD.org>1997-10-23 21:32:48 +0000
commit2ac9673aae5d6c0ccae308475fa143d4c1fa6586 (patch)
tree7c8180cc479ae29ad50f629d5bd4009c1cf283b2 /usr.sbin/ppp/timer.c
parent39156922f68cd1254c86a62bbfbed6bc9d87da70 (diff)
downloadFreeBSD-src-2ac9673aae5d6c0ccae308475fa143d4c1fa6586.zip
FreeBSD-src-2ac9673aae5d6c0ccae308475fa143d4c1fa6586.tar.gz
Restore back non-interruptable sleep/usleep just redefine them to not
mix with standard library functions
Diffstat (limited to 'usr.sbin/ppp/timer.c')
-rw-r--r--usr.sbin/ppp/timer.c64
1 files changed, 63 insertions, 1 deletions
diff --git a/usr.sbin/ppp/timer.c b/usr.sbin/ppp/timer.c
index 8454f69..3070346 100644
--- a/usr.sbin/ppp/timer.c
+++ b/usr.sbin/ppp/timer.c
@@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * $Id: timer.c,v 1.18 1997/08/25 00:29:30 brian Exp $
+ * $Id: timer.c,v 1.19 1997/10/23 20:11:01 ache Exp $
*
* TODO:
*/
@@ -197,6 +197,68 @@ ShowTimers()
}
#ifdef SIGALRM
+u_int
+sleep(u_int sec)
+{
+ struct timeval to, st, et;
+ long sld, nwd, std;
+
+ gettimeofday(&st, NULL);
+ to.tv_sec = sec;
+ to.tv_usec = 0;
+ std = st.tv_sec * 1000000 + st.tv_usec;
+ for (;;) {
+ if (select(0, NULL, NULL, NULL, &to) == 0 ||
+ errno != EINTR) {
+ break;
+ } else {
+ gettimeofday(&et, NULL);
+ sld = to.tv_sec * 1000000 + to.tv_sec;
+ nwd = et.tv_sec * 1000000 + et.tv_usec - std;
+ if (sld > nwd)
+ sld -= nwd;
+ else
+ sld = 1; /* Avoid both tv_sec/usec is 0 */
+
+ /* Calculate timeout value for select */
+ to.tv_sec = sld / 1000000;
+ to.tv_usec = sld % 1000000;
+ }
+ }
+ return (0L);
+}
+
+void
+usleep(u_int usec)
+{
+ struct timeval to, st, et;
+ long sld, nwd, std;
+
+ gettimeofday(&st, NULL);
+ to.tv_sec = 0;
+ to.tv_usec = usec;
+ std = st.tv_sec * 1000000 + st.tv_usec;
+ for (;;) {
+ if (select(0, NULL, NULL, NULL, &to) == 0 ||
+ errno != EINTR) {
+ break;
+ } else {
+ gettimeofday(&et, NULL);
+ sld = to.tv_sec * 1000000 + to.tv_sec;
+ nwd = et.tv_sec * 1000000 + et.tv_usec - std;
+ if (sld > nwd)
+ sld -= nwd;
+ else
+ sld = 1; /* Avoid both tv_sec/usec is 0 */
+
+ /* Calculate timeout value for select */
+ to.tv_sec = sld / 1000000;
+ to.tv_usec = sld % 1000000;
+
+ }
+ }
+}
+
void
InitTimerService(void)
{
OpenPOWER on IntegriCloud