Time64_T mktime64(struct TM *input_date) { struct tm safe_date; struct TM date; Time64_T time; Year year = input_date->tm_year + 1900; if( date_in_safe_range(input_date, &SYSTEM_MKTIME_MIN, &SYSTEM_MKTIME_MAX) ) { copy_TM64_to_tm(input_date, &safe_date); time = (Time64_T)mktime(&safe_date); /* Correct the possibly out of bound input date */ copy_tm_to_TM64(&safe_date, input_date); return time; } /* Have to make the year safe in date else it won't fit in safe_date */ date = *input_date; date.tm_year = safe_year(year) - 1900; copy_TM64_to_tm(&date, &safe_date); time = (Time64_T)mktime(&safe_date); /* Correct the user's possibly out of bound input date */ copy_tm_to_TM64(&safe_date, input_date); time += seconds_between_years(year, (Year)(safe_date.tm_year + 1900)); return time; }
Time64_T mktime64(const struct TM *input_date) { struct tm safe_date; struct TM date; Time64_T time_; Year year = input_date->tm_year + 1900; if( date_in_safe_range(input_date, &SYSTEM_MKTIME_MIN, &SYSTEM_MKTIME_MAX) ) { copy_TM64_to_tm(input_date, &safe_date); return (Time64_T)mktime(&safe_date); } /* Have to make the year safe in date else it won't fit in safe_date */ date = *input_date; date.tm_year = safe_year(year) - 1900; copy_TM64_to_tm(&date, &safe_date); time_ = (Time64_T)mktime(&safe_date); time_ += seconds_between_years(year, (Year)(safe_date.tm_year + 1900)); return time_; }