+#define TV_SUB(dst, a, b) TV_SUBL(dst, a, (b)->tv_sec, (b)->tv_usec)
+
+/* --- @tv_subl@ --- *
+ *
+ * Arguments: @struct timeval *dst@ = destination block
+ * @const struct timeval *a@ = source blocks
+ * @time_t sec@, @unsigned long usec@ = time to subtract
+ *
+ * Returns: ---
+ *
+ * Use: Subtracts a literal time in seconds and microseconds.
+ */
+
+extern void tv_subl(struct timeval */*dst*/,
+ const struct timeval */*a*/,
+ time_t /*sec*/, unsigned long /*usec*/);
+
+#define TV_SUBL(dst, a, sec, usec) do { \
+ (dst)->tv_sec = (a)->tv_sec - (sec); \
+ if ((a)->tv_usec >= (usec)) \
+ (dst)->tv_usec = (a)->tv_usec - (usec); \
+ else { \
+ (dst)->tv_usec = (a)->tv_usec + MILLION - (usec); \
+ (dst)->tv_sec--; \
+ } \
+} while (0)
+