VSF Documented
time.h
Go to the documentation of this file.
1#ifndef __VSF_LINUX_SYS_TIME_H__
2#define __VSF_LINUX_SYS_TIME_H__
3
5
6#if VSF_LINUX_CFG_RELATIVE_PATH == ENABLED
7# include "./types.h"
8#else
9# include <sys/types.h>
10#endif
11
12// ugly, but seems no choice, because:
13// libc/time.h can not include timeval, so can not include sys/time.h,
14// or it will conflict with timeval in winsock.h.
15#include <time.h>
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21#if VSF_LINUX_CFG_WRAPPER == ENABLED
22#define getitimer VSF_LINUX_WRAPPER(getitimer)
23#define setitimer VSF_LINUX_WRAPPER(setitimer)
24#define gettimeofday VSF_LINUX_WRAPPER(gettimeofday)
25#define settimeofday VSF_LINUX_WRAPPER(settimeofday)
26
27#define utimes VSF_LINUX_WRAPPER(utimes)
28#endif
29
30#ifndef __SUSECONDS_T
31# define __SUSECONDS_T long int
32#endif
34
35enum {
40};
41
42struct timeval {
45};
46
47struct timezone {
50};
51
52struct itimerval {
55};
56
57#define timerisset(__tvp) ((__tvp)->tv_sec || (tvp__tvp->tv_usec)
58#define timerclear(__tvp) ((__tvp)->tv_sec = (__tvp)->tv_usec = 0)
59#define timercmp(__a, __b, __op) (((__a)->tv_sec == (__b)->tv_sec) ? \
60 ((__a)->tv_usec __op (__b)->tv_usec) : ((__a)->tv_sec __op (__b)->tv_sec))
61#define timeradd(__a, __b, __result) \
62 do { \
63 (__result)->tv_sec = (__a)->tv_sec + (__b)->tv_sec; \
64 (__result)->tv_usec = (__a)->tv_usec + (__b)->tv_usec; \
65 if ((__result)->tv_usec >= 1000000) { \
66 ++(__result)->tv_sec; \
67 (__result)->tv_usec -= 1000000; \
68 } \
69 } while (0)
70#define timersub(__a, __b, __result) \
71 do { \
72 (__result)->tv_sec = (__a)->tv_sec - (__b)->tv_sec; \
73 (__result)->tv_usec = (__a)->tv_usec - (__b)->tv_usec; \
74 if ((__result)->tv_usec < 0) { \
75 --(__result)->tv_sec; \
76 (__result)->tv_usec += 1000000; \
77 } \
78 } while (0)
79
80#if VSF_LINUX_APPLET_USE_SYS_TIME == ENABLED
83
88
92# ifndef __VSF_APPLET__
94# endif
95#endif
96
97#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_SYS_TIME_LIB__))\
98 && VSF_APPLET_CFG_ABI_PATCH != ENABLED && VSF_LINUX_APPLET_USE_SYS_TIME == ENABLED
99
100#ifndef VSF_LINUX_APPLET_SYS_TIME_VPLT
101# if VSF_LINUX_USE_APPLET == ENABLED
102# define VSF_LINUX_APPLET_SYS_TIME_VPLT \
103 ((vsf_linux_sys_time_vplt_t *)(VSF_LINUX_APPLET_VPLT->sys_time_vplt))
104# else
105# define VSF_LINUX_APPLET_SYS_TIME_VPLT \
106 ((vsf_linux_sys_time_vplt_t *)vsf_vplt((void *)0))
107# endif
108#endif
109
110#define VSF_LINUX_APPLET_SYS_TIME_ENTRY(__NAME) \
111 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_SYS_TIME_VPLT, __NAME)
112#define VSF_LINUX_APPLET_SYS_TIME_IMP(...) \
113 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_SYS_TIME_VPLT, __VA_ARGS__)
114
115VSF_LINUX_APPLET_SYS_TIME_IMP(gettimeofday, int, struct timeval *tv, struct timezone *tz) {
117 return VSF_LINUX_APPLET_SYS_TIME_ENTRY(gettimeofday)(tv, tz);
118}
119VSF_LINUX_APPLET_SYS_TIME_IMP(settimeofday, int, const struct timeval *tv, const struct timezone *tz) {
121 return VSF_LINUX_APPLET_SYS_TIME_ENTRY(settimeofday)(tv, tz);
122}
123VSF_LINUX_APPLET_SYS_TIME_IMP(getitimer, int, int which, struct itimerval *curr_value) {
125 return VSF_LINUX_APPLET_SYS_TIME_ENTRY(getitimer)(which, curr_value);
126}
127VSF_LINUX_APPLET_SYS_TIME_IMP(setitimer, int, int which, const struct itimerval *new_value, struct itimerval *old_value) {
129 return VSF_LINUX_APPLET_SYS_TIME_ENTRY(setitimer)(which, new_value, old_value);
130}
131VSF_LINUX_APPLET_SYS_TIME_IMP(futimes, int, int fd, const struct timeval tv[2]) {
133 return VSF_LINUX_APPLET_SYS_TIME_ENTRY(futimes)(fd, tv);
134}
135VSF_LINUX_APPLET_SYS_TIME_IMP(utimes, int, const char *filename, const struct timeval times[2]) {
137 return VSF_LINUX_APPLET_SYS_TIME_ENTRY(utimes)(filename, times);
138}
139
140#else // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_SYS_TIME
141
142int gettimeofday(struct timeval *tv, struct timezone *tz);
143int settimeofday(const struct timeval *tv, const struct timezone *tz);
144int getitimer(int which, struct itimerval *curr_value);
145int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
146
147int futimes(int fd, const struct timeval tv[2]);
148int utimes(const char *filename, const struct timeval times[2]);
149
150#endif // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_SYS_TIME
151
152#ifdef __cplusplus
153}
154#endif
155
156#endif
__TIME_T time_t
Definition types.h:122
Definition time.h:52
struct timeval it_value
Definition time.h:53
struct timeval it_interval
Definition time.h:54
Definition time.h:42
suseconds_t tv_usec
Definition time.h:44
time_t tv_sec
Definition time.h:43
Definition time.h:47
int tz_minuteswest
Definition time.h:48
int tz_dsttime
Definition time.h:49
Definition time.h:81
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(utimes)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(gettimeofday)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(getitimer)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(setitimer)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(settimeofday)
vsf_vplt_info_t info
Definition time.h:82
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(futimes)
int futimes(int fd, const struct timeval tv[2])
Definition vsf_linux_fs.c:2136
#define getitimer
Definition time.h:22
#define utimes
Definition time.h:27
#define __SUSECONDS_T
Definition time.h:31
__SUSECONDS_T suseconds_t
Definition time.h:33
#define setitimer
Definition time.h:23
#define gettimeofday
Definition time.h:24
#define settimeofday
Definition time.h:25
__VSF_VPLT_DECORATOR__ vsf_linux_sys_time_vplt_t vsf_linux_sys_time_vplt
Definition vsf_linux.c:4757
@ ITIMER_PROF
Definition time.h:38
@ ITIMER_REAL
Definition time.h:36
@ ITIMER_NUM
Definition time.h:39
@ ITIMER_VIRTUAL
Definition time.h:37
#define times
Definition times.h:18
Definition vsf_cfg.h:95
#define __VSF_VPLT_DECORATOR__
Definition vsf_cfg.h:93
#define VSF_APPLET_VPLT_ENTRY_FUNC_TRACE()
Definition vsf_cfg.h:165
which(union { inherit(vsf_msgt_container_t) vsf_tgui_control_t };vsf_tgui_v_container_t) implement_ex(struct
Definition vsf_tgui_control.h:540