haiku/src/system/libroot/os/time.c
Ingo Weinhold 6b202f4e3d * Introduced new header directory headers/private/system which is supposed
to contain headers shared by kernel and userland (mainly libroot).
* Moved quite a few private kernel headers to the new location. Split
  several kernel headers into a shared part and one that is still kernel
  private. Adjusted all affected Jamfiles and source in the standard x86
  build accordingly. The build for other architectures and for test code
  may be broken.
* Quite a bit of userland code still includes private kernel headers.
  Mostly those are <util/*> headers. The ones that aren't strictly
  kernel-only should be moved to some other place (maybe
  headers/private/shared/util).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25486 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-14 03:55:16 +00:00

101 lines
1.8 KiB
C

/*
* Copyright 2002-2006, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*/
#include <commpage_defs.h>
#include <libroot_private.h>
#include <real_time_data.h>
#include <syscalls.h>
#include <FindDirectory.h>
#include <OS.h>
#include <stdio.h>
#include <string.h>
#include <syslog.h>
static struct real_time_data *sRealTimeData;
void
__init_time(void)
{
sRealTimeData = (struct real_time_data*)
USER_COMMPAGE_TABLE[COMMPAGE_ENTRY_REAL_TIME_DATA];
__arch_init_time(sRealTimeData, false);
}
uint32
real_time_clock(void)
{
return (__arch_get_system_time_offset(sRealTimeData) + system_time())
/ 1000000;
}
bigtime_t
real_time_clock_usecs(void)
{
return __arch_get_system_time_offset(sRealTimeData) + system_time();
}
void
set_real_time_clock(uint32 secs)
{
_kern_set_real_time_clock(secs);
}
status_t
set_timezone(char *timezone)
{
char path[B_PATH_NAME_LENGTH];
char tzfilename[B_PATH_NAME_LENGTH];
bool isGMT;
status_t err;
struct tm *tm;
time_t t;
if ((err = find_directory(B_USER_SETTINGS_DIRECTORY, -1, true, path, B_PATH_NAME_LENGTH)) != B_OK) {
fprintf(stderr, "can't find settings directory: %s\n", strerror(err));
return err;
}
strcat(path, "/timezone");
err = unlink(path);
if (err != B_OK) {
fprintf(stderr, "can't unlink: %s\n", strerror(err));
return err;
}
err = symlink(timezone, path);
if (err != B_OK) {
fprintf(stderr, "can't symlink: %s\n", strerror(err));
return err;
}
_kern_get_tzfilename(tzfilename, sizeof(tzfilename), &isGMT);
_kern_set_tzfilename(timezone, strlen(timezone), isGMT);
tzset();
time(&t);
tm = localtime(&t);
if ((err = _kern_set_timezone(tm->tm_gmtoff, tm->tm_isdst)) < B_OK)
return err;
return B_OK;
}
bigtime_t
set_alarm(bigtime_t when, uint32 mode)
{
return _kern_set_alarm(when, mode);
}