Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <math.h>
00022 #include <stdarg.h>
00023 #include <stdio.h>
00024 #include <string.h>
00025 #include <strings.h>
00026 #include <unistd.h>
00027
00028 #include <fcntl.h>
00029 #include <sys/stat.h>
00030 #include <sys/time.h>
00031 #include <sys/types.h>
00032 #include <time.h>
00033
00034 #ifdef HAVE_CONFIG_H
00035 #include <config.h>
00036 #endif // HAVE_CONFIG_H
00037
00038 #include <utility.h>
00039
00040 #ifdef __WIN32
00041 #include <windows.h>
00042 #endif // __WIN32
00043
00044
00045 double get_time(void)
00046 {
00047 struct timeval current;
00048
00049 gettimeofday(¤t, NULL);
00050
00051 return current.tv_sec + current.tv_usec / 1000000.0;
00052 }
00053
00054 void yp_usleep(int usec)
00055 {
00056 #if defined(HAVE_NANOSLEEP)
00057
00058 struct timespec request;
00059 request.tv_sec = usec / 1000000;
00060 request.tv_nsec = (usec - request.tv_sec * 1000000) * 1000;
00061
00062 nanosleep(&request, NULL);
00063 #elif defined(__MINGW32__)
00064
00065
00066 Sleep((usec + 999) / 1000);
00067 #else
00068
00069 usleep(usec);
00070 #endif // defined(HAVE_NANOSLEEP)
00071 }
00072
00073 void hook_pre_global()
00074 {
00075
00076 setvbuf(stdout, 0, _IONBF, 0);
00077 setvbuf(stderr, 0, _IONBF, 0);
00078 }
00079
00080 #if !defined(HAVE_STRTOK_R)
00081 #ifndef strtok_r
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 char *strtok_r(char *str, const char *delim, char **nextp)
00092 {
00093 char *ret;
00094
00095 if (str == NULL)
00096 str = *nextp;
00097
00098 str += strspn(str, delim);
00099
00100 if (*str == '\0')
00101 return NULL;
00102
00103 ret = str;
00104 str += strcspn(str, delim);
00105
00106 if (*str)
00107 *str++ = '\0';
00108
00109 *nextp = str;
00110
00111 return ret;
00112 }
00113
00114 #endif // strtok_r
00115 #endif // !defined(HAVE_STRTOK_R)