diff options
author | Wolfgang Hommel <wolf@code-wizards.com> | 2022-04-02 13:47:04 +0200 |
---|---|---|
committer | Wolfgang Hommel <wolf@code-wizards.com> | 2022-04-02 13:47:04 +0200 |
commit | 98e3d3f36feea8550e12b02f07414643cbfcd5e0 (patch) | |
tree | 420d9f3959a0df325ac59f9e65f902bb74fb92e1 | |
parent | 0ca35dd8c4532075d6805133a8f2f319f54c26ff (diff) | |
download | libfaketime-98e3d3f36feea8550e12b02f07414643cbfcd5e0.tar.gz |
select(): Scale timeout parameter by user rate on return (addresses #382)
-rw-r--r-- | src/libfaketime.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/libfaketime.c b/src/libfaketime.c index 0c28e5f..684f153 100644 --- a/src/libfaketime.c +++ b/src/libfaketime.c @@ -1725,6 +1725,21 @@ int select(int nfds, fd_set *readfds, #else DONT_FAKE_TIME(ret = (*real_select)(nfds, readfds, writefds, errorfds, timeout == NULL ? timeout : &timeout_real)); #endif + + /* scale timeout back if user rate is set, #382 */ + if (user_rate_set && (timeout != NULL)) + { + struct timespec ts; + + ts.tv_sec = timeout_real.tv_sec; + ts.tv_nsec = timeout_real.tv_usec * 1000; + + timespecmul(&ts, user_rate, &ts); + + timeout->tv_sec = ts.tv_sec; + timeout->tv_usec = ts.tv_nsec / 1000; + } + return ret; } |