Added a _kern_get_timezone() syscall that can be used without needing to
re-evaluate the timezone file over and over. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16785 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
33dd85501f
commit
f46bdd1c9a
@ -1,7 +1,9 @@
|
||||
/*
|
||||
** Copyright 2003, Jeff Ward, jeff@r2d2.stcloudstate.edu. All rights reserved.
|
||||
** Distributed under the terms of the Haiku License.
|
||||
*/
|
||||
* Copyright 2006, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
||||
* Copyright 2003, Jeff Ward, jeff@r2d2.stcloudstate.edu. All rights reserved.
|
||||
*
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _KERNEL_REAL_TIME_CLOCK_H
|
||||
#define _KERNEL_REAL_TIME_CLOCK_H
|
||||
|
||||
@ -13,6 +15,14 @@
|
||||
|
||||
#define RTC_EPOCHE_BASE_YEAR 1970
|
||||
|
||||
typedef struct rtc_info {
|
||||
uint32 time;
|
||||
bool is_gmt;
|
||||
int32 tz_minuteswest;
|
||||
bool tz_dsttime;
|
||||
} rtc_info;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@ -21,13 +31,6 @@ status_t rtc_init(kernel_args *args);
|
||||
bigtime_t rtc_boot_time(void);
|
||||
// Returns the time at which the system was booted in microseconds since Jan 1, 1970 UTC.
|
||||
|
||||
typedef struct rtc_info {
|
||||
uint32 time;
|
||||
bool is_gmt;
|
||||
int32 tz_minuteswest;
|
||||
bool tz_dsttime;
|
||||
} rtc_info;
|
||||
|
||||
status_t get_rtc_info(rtc_info *info);
|
||||
|
||||
// Both functions use the passed struct tm only partially
|
||||
@ -38,6 +41,7 @@ void rtc_secs_to_tm(uint32 seconds, struct tm *t);
|
||||
bigtime_t _user_system_time(void);
|
||||
status_t _user_set_real_time_clock(uint32 time);
|
||||
status_t _user_set_timezone(int32 timezoneOffset, bool daylightSavingTime);
|
||||
status_t _user_get_timezone(int32 *_timezoneOffset, bool *_daylightSavingTime);
|
||||
status_t _user_set_tzfilename(const char* filename, size_t length, bool isGMT);
|
||||
status_t _user_get_tzfilename(char *filename, size_t length, bool *_isGMT);
|
||||
|
||||
|
@ -208,6 +208,7 @@ extern status_t _kern_stop_watching(dev_t device, ino_t node, uint32 flags,
|
||||
// time functions
|
||||
extern status_t _kern_set_real_time_clock(uint32 time);
|
||||
extern status_t _kern_set_timezone(int32 timezoneOffset, bool daylightSavingTime);
|
||||
extern status_t _kern_get_timezone(int32 *_timezoneOffset, bool *_daylightSavingTime);
|
||||
extern status_t _kern_set_tzfilename(const char *filename, size_t length, bool isGMT);
|
||||
extern status_t _kern_get_tzfilename(char *filename, size_t length, bool *_isGMT);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2004-2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
||||
* Copyright 2004-2006, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
||||
* Copyright 2003, Jeff Ward, jeff@r2d2.stcloudstate.edu. All rights reserved.
|
||||
*
|
||||
* Distributed under the terms of the MIT License.
|
||||
@ -341,6 +341,20 @@ _user_set_timezone(time_t timezoneOffset, bool daylightSavingTime)
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
_user_get_timezone(time_t *_timezoneOffset, bool *_daylightSavingTime)
|
||||
{
|
||||
time_t offset = (time_t)(sTimezoneOffset / 1000000LL);
|
||||
|
||||
if (!IS_USER_ADDRESS(_timezoneOffset) || !IS_USER_ADDRESS(_daylightSavingTime)
|
||||
|| user_memcpy(_timezoneOffset, &offset, sizeof(time_t)) < B_OK
|
||||
|| user_memcpy(_daylightSavingTime, &sDaylightSavingTime, sizeof(bool)) < B_OK)
|
||||
return B_BAD_ADDRESS;
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
_user_set_tzfilename(const char *filename, size_t length, bool isGMT)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user