Skip to content

Commit 2b1dc8c

Browse files
committed
Update from Gnulib
This incorporates: 2019-10-24 timespec-add, timespec-sub: simplify * lib/timespec-add.c, lib/timespec-sub.c: Copy from Gnulib.
1 parent 6039acb commit 2b1dc8c

File tree

2 files changed

+14
-26
lines changed

2 files changed

+14
-26
lines changed

lib/timespec-add.c

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,36 +33,30 @@ timespec_add (struct timespec a, struct timespec b)
3333
int ns = a.tv_nsec + b.tv_nsec;
3434
int nsd = ns - TIMESPEC_HZ;
3535
int rns = ns;
36-
time_t tmin = TYPE_MINIMUM (time_t);
37-
time_t tmax = TYPE_MAXIMUM (time_t);
3836

3937
if (0 <= nsd)
4038
{
4139
rns = nsd;
42-
if (bs < tmax)
43-
bs++;
40+
time_t bs1;
41+
if (!INT_ADD_WRAPV (bs, 1, &bs1))
42+
bs = bs1;
4443
else if (rs < 0)
4544
rs++;
4645
else
4746
goto high_overflow;
4847
}
4948

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))
5650
{
57-
if (rs < 0)
51+
if (bs < 0)
5852
{
59-
rs = tmin;
53+
rs = TYPE_MINIMUM (time_t);
6054
rns = 0;
6155
}
6256
else
6357
{
6458
high_overflow:
65-
rs = tmax;
59+
rs = TYPE_MAXIMUM (time_t);
6660
rns = TIMESPEC_HZ - 1;
6761
}
6862
}

lib/timespec-sub.c

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,36 +33,30 @@ timespec_sub (struct timespec a, struct timespec b)
3333
time_t bs = b.tv_sec;
3434
int ns = a.tv_nsec - b.tv_nsec;
3535
int rns = ns;
36-
time_t tmin = TYPE_MINIMUM (time_t);
37-
time_t tmax = TYPE_MAXIMUM (time_t);
3836

3937
if (ns < 0)
4038
{
4139
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;
4443
else if (- TYPE_SIGNED (time_t) < rs)
4544
rs--;
4645
else
4746
goto low_overflow;
4847
}
4948

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))
5650
{
57-
if (rs < 0)
51+
if (0 < bs)
5852
{
5953
low_overflow:
60-
rs = tmin;
54+
rs = TYPE_MINIMUM (time_t);
6155
rns = 0;
6256
}
6357
else
6458
{
65-
rs = tmax;
59+
rs = TYPE_MAXIMUM (time_t);
6660
rns = TIMESPEC_HZ - 1;
6761
}
6862
}

0 commit comments

Comments
 (0)