_user_set_tzfilename now correctly updates the system RTC offset. This

makes switching between GMT and local time in time prefs work correctly
without requiring a reboot to recalculate the clock.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24544 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rene Gollent
2008-03-24 01:01:51 +00:00
parent 92c8608e6e
commit 612ab37d12
+8 -2
View File
@@ -17,7 +17,7 @@
#include <stdlib.h> #include <stdlib.h>
//#define TRACE_TIME #define TRACE_TIME
#ifdef TRACE_TIME #ifdef TRACE_TIME
# define TRACE(x) dprintf x # define TRACE(x) dprintf x
#else #else
@@ -292,6 +292,8 @@ _user_get_timezone(time_t *_timezoneOffset, bool *_daylightSavingTime)
status_t status_t
_user_set_tzfilename(const char *filename, size_t length, bool isGMT) _user_set_tzfilename(const char *filename, size_t length, bool isGMT)
{ {
// store previous value
bool wasGMT = sIsGMT;
if (geteuid() != 0) if (geteuid() != 0)
return B_NOT_ALLOWED; return B_NOT_ALLOWED;
@@ -301,8 +303,12 @@ _user_set_tzfilename(const char *filename, size_t length, bool isGMT)
B_PATH_NAME_LENGTH) < B_OK) B_PATH_NAME_LENGTH) < B_OK)
return B_BAD_ADDRESS; return B_BAD_ADDRESS;
// ToDo: Shouldn't this update the system_time_offset as well?
sIsGMT = isGMT; sIsGMT = isGMT;
if (wasGMT != sIsGMT)
arch_rtc_set_system_time_offset(sRealTimeData,
arch_rtc_get_system_time_offset(sRealTimeData) + (((sIsGMT) ? 1 : -1) * sTimezoneOffset));
return B_OK; return B_OK;
} }