SecBSD's official ports repository
This commit is contained in:
commit
2c0afcbbf3
64331 changed files with 5339189 additions and 0 deletions
95
lang/scm/patches/patch-time_c
Normal file
95
lang/scm/patches/patch-time_c
Normal file
|
@ -0,0 +1,95 @@
|
|||
--- time.c.orig Thu Jan 31 04:33:06 2008
|
||||
+++ time.c Fri Dec 6 20:54:39 2013
|
||||
@@ -20,6 +20,11 @@
|
||||
|
||||
#include "scm.h"
|
||||
|
||||
+#ifdef __unix__
|
||||
+# ifndef unix
|
||||
+# define unix 1
|
||||
+# endif
|
||||
+#endif
|
||||
#ifdef STDC_HEADERS
|
||||
# include <time.h>
|
||||
# ifdef M_SYSV
|
||||
@@ -104,7 +109,6 @@
|
||||
#ifdef __OpenBSD__
|
||||
# include <sys/types.h>
|
||||
# include <sys/time.h>
|
||||
-# include <sys/timeb.h>
|
||||
# define USE_GETTIMEOFDAY
|
||||
#endif
|
||||
#ifdef __TURBOC__
|
||||
@@ -169,6 +173,7 @@
|
||||
# define USE_GETTIMEOFDAY
|
||||
#endif
|
||||
|
||||
+#ifndef USE_GETTIMEOFDAY
|
||||
#ifndef LACK_FTIME
|
||||
# ifdef HAVE_UNIX
|
||||
# ifndef GO32
|
||||
@@ -176,6 +181,7 @@
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#ifdef __EMX__
|
||||
# define LACK_TIMES
|
||||
@@ -308,18 +314,40 @@ SCM your_time()
|
||||
#else /* LACK_FTIME */
|
||||
# ifdef USE_GETTIMEOFDAY
|
||||
int scm_ftime(time_buffer)
|
||||
- struct timeb *time_buffer;
|
||||
+ struct timeval *time_buffer;
|
||||
{
|
||||
- struct timezone t_z; struct timeval t_v;
|
||||
- if (gettimeofday(&t_v, &t_z) < 0) return -1;
|
||||
- time_buffer->timezone = t_z.tz_minuteswest;
|
||||
- time_buffer->dstflag = t_z.tz_dsttime;
|
||||
- time_buffer->millitm = t_v.tv_usec / 1000;
|
||||
- time_buffer->time = t_v.tv_sec;
|
||||
+ struct timezone t_z;
|
||||
+ if (gettimeofday(time_buffer, &t_z) < 0) return -1;
|
||||
return 0;}
|
||||
+
|
||||
+struct timeval your_base = {0, 0};
|
||||
+# define TIMETRIES 10
|
||||
+SCM your_time()
|
||||
+{
|
||||
+ long tmp;
|
||||
+ struct timeval time_buffer1;
|
||||
+ struct timeval time_buffer2;
|
||||
+ int cnt = 0;
|
||||
+ tryagain:
|
||||
+ cnt++;
|
||||
+ scm_ftime(&time_buffer1);
|
||||
+ scm_ftime(&time_buffer2);
|
||||
+ if (time_buffer1.tv_sec==time_buffer2.tv_sec) {
|
||||
+ if (time_buffer1.tv_usec > time_buffer2.tv_usec)
|
||||
+ time_buffer2.tv_sec = time_buffer2.tv_sec + 1;
|
||||
+ }
|
||||
+ else if ((1 + time_buffer1.tv_sec)==time_buffer2.tv_sec) ;
|
||||
+ else if (cnt < TIMETRIES) goto tryagain;
|
||||
+ else { /* could not read two ftime()s within one second in 10 tries */
|
||||
+ scm_warn("ftime()s too fast", "", MAKINUM(TIMETRIES));
|
||||
+ return MAKINUM(-1);
|
||||
+ }
|
||||
+ tmp = CLKTCK*(time_buffer2.tv_usec - your_base.tv_usec);
|
||||
+ tmp = CLKTCK*(time_buffer2.tv_sec - your_base.tv_sec) + tmp/1000000;
|
||||
+ return MAKINUM(tmp);
|
||||
+}
|
||||
# else /* USE_GETTIMEOFDAY */
|
||||
# define scm_ftime ftime
|
||||
-# endif /* USE_GETTIMEOFDAY */
|
||||
struct timeb your_base = {0};
|
||||
# define TIMETRIES 10
|
||||
SCM your_time()
|
||||
@@ -346,6 +374,7 @@ SCM your_time()
|
||||
tmp = CLKTCK*(time_buffer2.time - your_base.time) + tmp/1000;
|
||||
return MAKINUM(tmp);
|
||||
}
|
||||
+# endif /* USE_GETTIMEOFDAY */
|
||||
#endif /* LACK_FTIME */
|
||||
|
||||
long my_base = 0;
|
Loading…
Add table
Add a link
Reference in a new issue