From 9f146e89fc80437626924e0b143bcaa88a83739a Mon Sep 17 00:00:00 2001
From: Gediminas Jarulaitis <beos.zealot@gmail.com>
Date: Sun, 17 Mar 2013 16:44:07 +0200
Subject: [PATCH] [iso9660, fat and exfat fs add-ons] corrects time convertion
mistakes. Fixes #9524
---
src/add-ons/kernel/file_systems/exfat/Inode.cpp | 2 +-
src/add-ons/kernel/file_systems/fat/util.c | 4 ++--
src/add-ons/kernel/file_systems/iso9660/iso9660.cpp | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/add-ons/kernel/file_systems/exfat/Inode.cpp b/src/add-ons/kernel/file_systems/exfat/Inode.cpp
index a03c13c..db90fb3 100644
a
|
b
|
Inode::_GetTimespec(uint16 date, uint16 time, struct timespec ×pec) const
|
271 | 271 | |
272 | 272 | time_t days = daze[(date>>5)&15] + ((date>>9)+10)*365 + leaps((date>>9)+10,((date>>5)&15)-1)+(date&31)-1; |
273 | 273 | |
274 | | timespec.tv_sec = ((days * 24 + (time >> 11)) * 60 + ((time>>5)&63) + tzoffset) * 60 + 2*(time&31); |
| 274 | timespec.tv_sec = ((days * 24 + (time >> 11)) * 60 + ((time>>5)&63) - tzoffset) * 60 + 2*(time&31); |
275 | 275 | timespec.tv_nsec = 0; |
276 | 276 | } |
277 | 277 | |
diff --git a/src/add-ons/kernel/file_systems/fat/util.c b/src/add-ons/kernel/file_systems/fat/util.c
index d5114f7..7bab5e3 100644
a
|
b
|
dos2time_t(uint32 t)
|
106 | 106 | |
107 | 107 | days = daze[(t>>21)&15] + ((t>>25)+10)*365 + leaps((t>>25)+10,((t>>21)&15)-1)+((t>>16)&31)-1; |
108 | 108 | |
109 | | return (((days * 24) + ((t>>11)&31)) * 60 + ((t>>5)&63) + tzoffset) * 60 + 2*(t&31); |
| 109 | return (((days * 24) + ((t>>11)&31)) * 60 + ((t>>5)&63) - tzoffset) * 60 + 2*(t&31); |
110 | 110 | } |
111 | 111 | |
112 | 112 | |
… |
… |
time_t2dos(time_t s)
|
118 | 118 | |
119 | 119 | get_tzoffset(); |
120 | 120 | |
121 | | t = (s % 60) / 2; s /= 60; s -= tzoffset; |
| 121 | t = (s % 60) / 2; s /= 60; s += tzoffset; |
122 | 122 | t += (s % 60) << 5; s /= 60; |
123 | 123 | t += (s % 24) << 11;s /= 24; |
124 | 124 | |
diff --git a/src/add-ons/kernel/file_systems/iso9660/iso9660.cpp b/src/add-ons/kernel/file_systems/iso9660/iso9660.cpp
index c66ae29..44ba3a9 100644
a
|
b
|
ConvertRecDate(ISORecDate* inDate, time_t* outDate)
|
1002 | 1002 | tz |= (-1 << 8); |
1003 | 1003 | |
1004 | 1004 | if (-48 <= tz && tz <= 52) |
1005 | | time += tz *15 * 60; |
| 1005 | time -= tz *15 * 60; |
1006 | 1006 | } |
1007 | 1007 | *outDate = time; |
1008 | 1008 | return 0; |