fat: create a function to calculate the timezone offest
[sfrench/cifs-2.6.git] / fs / fat / misc.c
index 573836dcaefc4c1d2720ee213e5b90098a4acb87..2eca073fe785be390fc8d74e56df98d7b4c1a3d5 100644 (file)
@@ -185,6 +185,13 @@ static long days_in_year[] = {
        0,   0,  31,  59,  90, 120, 151, 181, 212, 243, 273, 304, 334, 0, 0, 0,
 };
 
+static inline int fat_tz_offset(struct msdos_sb_info *sbi)
+{
+       return (sbi->options.tz_set ?
+              -sbi->options.time_offset :
+              sys_tz.tz_minuteswest) * SECS_PER_MIN;
+}
+
 /* Convert a FAT time/date pair to a UNIX date (seconds since 1 1 70). */
 void fat_time_fat2unix(struct msdos_sb_info *sbi, struct timespec64 *ts,
                       __le16 __time, __le16 __date, u8 time_cs)
@@ -210,10 +217,7 @@ void fat_time_fat2unix(struct msdos_sb_info *sbi, struct timespec64 *ts,
                   + days_in_year[month] + day
                   + DAYS_DELTA) * SECS_PER_DAY;
 
-       if (!sbi->options.tz_set)
-               second += sys_tz.tz_minuteswest * SECS_PER_MIN;
-       else
-               second -= sbi->options.time_offset * SECS_PER_MIN;
+       second += fat_tz_offset(sbi);
 
        if (time_cs) {
                ts->tv_sec = second + (time_cs / 100);
@@ -229,9 +233,7 @@ void fat_time_unix2fat(struct msdos_sb_info *sbi, struct timespec64 *ts,
                       __le16 *time, __le16 *date, u8 *time_cs)
 {
        struct tm tm;
-       time64_to_tm(ts->tv_sec,
-                  (sbi->options.tz_set ? sbi->options.time_offset :
-                  -sys_tz.tz_minuteswest) * SECS_PER_MIN, &tm);
+       time64_to_tm(ts->tv_sec, -fat_tz_offset(sbi), &tm);
 
        /*  FAT can only support year between 1980 to 2107 */
        if (tm.tm_year < 1980 - 1900) {