|
@@ -769,3 +769,28 @@ struct timespec timespec_add_safe(const struct timespec lhs,
|
|
|
|
|
|
return res;
|
|
|
}
|
|
|
+
|
|
|
+#if __BITS_PER_LONG != 64
|
|
|
+
|
|
|
+/*
|
|
|
+ * Add two timespec64 values and do a safety check for overflow.
|
|
|
+ * It's assumed that both values are valid (>= 0).
|
|
|
+ * And, each timespec64 is in normalized form.
|
|
|
+ */
|
|
|
+struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
|
|
|
+ const struct timespec64 rhs)
|
|
|
+{
|
|
|
+ struct timespec64 res;
|
|
|
+
|
|
|
+ set_normalized_timespec64(&res, lhs.tv_sec + rhs.tv_sec,
|
|
|
+ lhs.tv_nsec + rhs.tv_nsec);
|
|
|
+
|
|
|
+ if (unlikely(res.tv_sec < lhs.tv_sec || res.tv_sec < rhs.tv_sec)) {
|
|
|
+ res.tv_sec = TIME64_MAX;
|
|
|
+ res.tv_nsec = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ return res;
|
|
|
+}
|
|
|
+
|
|
|
+#endif
|