+ int year, month, total_days;
+
+ int monthlen[2][12] = {
+ /* Days per month for a regular year */
+ { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
+ /* Days per month for a leap year */
+ { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
+ };
+
+ if ((tm->tm_mon >= 12) ||
+ (tm->tm_mday >= 32) ||
+ (tm->tm_hour >= 24) ||
+ (tm->tm_min >= 60) ||
+ (tm->tm_sec >= 61)) {
+ errno = EOVERFLOW;
+ return (time_t) -1;
+ }
+
+ /* Add 365 days for each year since 1970 */
+ total_days = 365 * (tm->tm_year - 70);
+
+ /* Add one day for each leap year since 1970 */
+ for (year = 70; year < tm->tm_year; year++) {
+ if (bt_leapyear(1900 + year)) {
+ total_days++;