aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/times.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2018-11-27 13:59:37 +0100
committerCorinna Vinschen <corinna@vinschen.de>2018-11-29 10:01:57 +0100
commit6df301076af0f8b6dd0b12eb7c3ea15a4f835267 (patch)
tree65d861efaa2eff23e08b046bdd24e7de66149134 /winsup/cygwin/times.cc
parent0b868df147d613b6f277161eff4ac2834aa24ee7 (diff)
downloadnewlib-6df301076af0f8b6dd0b12eb7c3ea15a4f835267.zip
newlib-6df301076af0f8b6dd0b12eb7c3ea15a4f835267.tar.gz
newlib-6df301076af0f8b6dd0b12eb7c3ea15a4f835267.tar.bz2
Cygwin: timers: clock_setres: make no-op
clock_setres is a questionable function only existing on QNX. Disable the function, just return success for CLOCK_REALTIME to maintain backward compatibility. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/times.cc')
-rw-r--r--winsup/cygwin/times.cc38
1 files changed, 2 insertions, 36 deletions
diff --git a/winsup/cygwin/times.cc b/winsup/cygwin/times.cc
index 4e405b2..c557e82 100644
--- a/winsup/cygwin/times.cc
+++ b/winsup/cygwin/times.cc
@@ -688,47 +688,13 @@ clock_getres (clockid_t clk_id, struct timespec *tp)
extern "C" int
clock_setres (clockid_t clk_id, struct timespec *tp)
{
- static NO_COPY bool period_set;
- int status;
-
+ /* Don't use this function. It only exists in QNX. Just return
+ success on CLOCK_REALTIME for backward compat. */
if (clk_id != CLOCK_REALTIME)
{
set_errno (EINVAL);
return -1;
}
-
- /* Convert to 100ns to match OS resolution. The OS uses ULONG values
- to express resolution in 100ns units, so the coarsest timer resolution
- is < 430 secs. Actually the coarsest timer resolution is only slightly
- beyond 15ms, but this might change in future OS versions, so we play nice
- here. */
- ULONGLONG period = tp->tv_sec * NS100PERSEC
- + (tp->tv_nsec + (NSPERSEC/NS100PERSEC) - 1)
- / (NSPERSEC/NS100PERSEC);
-
- /* clock_setres is non-POSIX/non-Linux. On QNX, the function always
- rounds the incoming value to the nearest supported value. */
- ULONG coarsest, finest, actual;
- if (NT_SUCCESS (NtQueryTimerResolution (&coarsest, &finest, &actual)))
- {
- if (period > coarsest)
- period = coarsest;
- else if (finest > period)
- period = finest;
- }
-
- if (period_set
- && NT_SUCCESS (NtSetTimerResolution (minperiod, FALSE, &actual)))
- period_set = false;
-
- status = NtSetTimerResolution (period, TRUE, &actual);
- if (!NT_SUCCESS (status))
- {
- __seterrno_from_nt_status (status);
- return -1;
- }
- minperiod = period;
- period_set = true;
return 0;
}