File tree Expand file tree Collapse file tree 2 files changed +14
-26
lines changed Expand file tree Collapse file tree 2 files changed +14
-26
lines changed Original file line number Diff line number Diff line change @@ -33,36 +33,30 @@ timespec_add (struct timespec a, struct timespec b)
33
33
int ns = a .tv_nsec + b .tv_nsec ;
34
34
int nsd = ns - TIMESPEC_HZ ;
35
35
int rns = ns ;
36
- time_t tmin = TYPE_MINIMUM (time_t );
37
- time_t tmax = TYPE_MAXIMUM (time_t );
38
36
39
37
if (0 <= nsd )
40
38
{
41
39
rns = nsd ;
42
- if (bs < tmax )
43
- bs ++ ;
40
+ time_t bs1 ;
41
+ if (!INT_ADD_WRAPV (bs , 1 , & bs1 ))
42
+ bs = bs1 ;
44
43
else if (rs < 0 )
45
44
rs ++ ;
46
45
else
47
46
goto high_overflow ;
48
47
}
49
48
50
- /* INT_ADD_WRAPV is not appropriate since time_t might be unsigned.
51
- In theory time_t might be narrower than int, so plain
52
- INT_ADD_OVERFLOW does not suffice. */
53
- if (! INT_ADD_OVERFLOW (rs , bs ) && tmin <= rs + bs && rs + bs <= tmax )
54
- rs += bs ;
55
- else
49
+ if (INT_ADD_WRAPV (rs , bs , & rs ))
56
50
{
57
- if (rs < 0 )
51
+ if (bs < 0 )
58
52
{
59
- rs = tmin ;
53
+ rs = TYPE_MINIMUM ( time_t ) ;
60
54
rns = 0 ;
61
55
}
62
56
else
63
57
{
64
58
high_overflow :
65
- rs = tmax ;
59
+ rs = TYPE_MAXIMUM ( time_t ) ;
66
60
rns = TIMESPEC_HZ - 1 ;
67
61
}
68
62
}
Original file line number Diff line number Diff line change @@ -33,36 +33,30 @@ timespec_sub (struct timespec a, struct timespec b)
33
33
time_t bs = b .tv_sec ;
34
34
int ns = a .tv_nsec - b .tv_nsec ;
35
35
int rns = ns ;
36
- time_t tmin = TYPE_MINIMUM (time_t );
37
- time_t tmax = TYPE_MAXIMUM (time_t );
38
36
39
37
if (ns < 0 )
40
38
{
41
39
rns = ns + TIMESPEC_HZ ;
42
- if (bs < tmax )
43
- bs ++ ;
40
+ time_t bs1 ;
41
+ if (!INT_ADD_WRAPV (bs , 1 , & bs1 ))
42
+ bs = bs1 ;
44
43
else if (- TYPE_SIGNED (time_t ) < rs )
45
44
rs -- ;
46
45
else
47
46
goto low_overflow ;
48
47
}
49
48
50
- /* INT_SUBTRACT_WRAPV is not appropriate since time_t might be unsigned.
51
- In theory time_t might be narrower than int, so plain
52
- INT_SUBTRACT_OVERFLOW does not suffice. */
53
- if (! INT_SUBTRACT_OVERFLOW (rs , bs ) && tmin <= rs - bs && rs - bs <= tmax )
54
- rs -= bs ;
55
- else
49
+ if (INT_SUBTRACT_WRAPV (rs , bs , & rs ))
56
50
{
57
- if (rs < 0 )
51
+ if (0 < bs )
58
52
{
59
53
low_overflow :
60
- rs = tmin ;
54
+ rs = TYPE_MINIMUM ( time_t ) ;
61
55
rns = 0 ;
62
56
}
63
57
else
64
58
{
65
- rs = tmax ;
59
+ rs = TYPE_MAXIMUM ( time_t ) ;
66
60
rns = TIMESPEC_HZ - 1 ;
67
61
}
68
62
}
You can’t perform that action at this time.
0 commit comments