Source
93
93
EXPORT_SYMBOL(rtc_time64_to_tm);
94
94
95
95
/*
96
96
* Does the rtc_time represent a valid date/time?
97
97
*/
98
98
int rtc_valid_tm(struct rtc_time *tm)
99
99
{
100
100
if (tm->tm_year < 70
101
101
|| ((unsigned)tm->tm_mon) >= 12
102
102
|| tm->tm_mday < 1
103
-
|| tm->tm_mday > rtc_month_days(tm->tm_mon, tm->tm_year + 1900)
103
+
|| tm->tm_mday > rtc_month_days(tm->tm_mon, ((unsigned)tm->tm_year + 1900))
104
104
|| ((unsigned)tm->tm_hour) >= 24
105
105
|| ((unsigned)tm->tm_min) >= 60
106
106
|| ((unsigned)tm->tm_sec) >= 60)
107
107
return -EINVAL;
108
108
109
109
return 0;
110
110
}
111
111
EXPORT_SYMBOL(rtc_valid_tm);
112
112
113
113
/*
114
114
* rtc_tm_to_time64 - Converts rtc_time to time64_t.
115
115
* Convert Gregorian date to seconds since 01-01-1970 00:00:00.
116
116
*/
117
117
time64_t rtc_tm_to_time64(struct rtc_time *tm)
118
118
{
119
-
return mktime64(tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
120
-
tm->tm_hour, tm->tm_min, tm->tm_sec);
119
+
return mktime64(((unsigned)tm->tm_year + 1900), tm->tm_mon + 1,
120
+
tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
121
121
}
122
122
EXPORT_SYMBOL(rtc_tm_to_time64);
123
123
124
124
/*
125
125
* Convert rtc_time to ktime
126
126
*/
127
127
ktime_t rtc_tm_to_ktime(struct rtc_time tm)
128
128
{
129
129
return ktime_set(rtc_tm_to_time64(&tm), 0);
130
130
}