mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Fixed a possible integer overflow in GetAbsTime()
This commit is contained in:
13
thread.c
13
thread.c
@@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: thread.c 2.1 2008/04/13 11:53:56 kls Exp $
|
||||
* $Id: thread.c 2.2 2008/09/06 09:39:43 kls Exp $
|
||||
*/
|
||||
|
||||
#include "thread.h"
|
||||
@@ -25,11 +25,12 @@ static bool GetAbsTime(struct timespec *Abstime, int MillisecondsFromNow)
|
||||
{
|
||||
struct timeval now;
|
||||
if (gettimeofday(&now, NULL) == 0) { // get current time
|
||||
now.tv_usec += MillisecondsFromNow * 1000; // add the timeout
|
||||
while (now.tv_usec >= 1000000) { // take care of an overflow
|
||||
now.tv_sec++;
|
||||
now.tv_usec -= 1000000;
|
||||
}
|
||||
now.tv_sec += MillisecondsFromNow / 1000; // add full seconds
|
||||
now.tv_usec += (MillisecondsFromNow % 1000) * 1000; // add microseconds
|
||||
if (now.tv_usec >= 1000000) { // take care of an overflow
|
||||
now.tv_sec++;
|
||||
now.tv_usec -= 1000000;
|
||||
}
|
||||
Abstime->tv_sec = now.tv_sec; // seconds
|
||||
Abstime->tv_nsec = now.tv_usec * 1000; // nano seconds
|
||||
return true;
|
||||
|
Reference in New Issue
Block a user