/* * \brief C-library back end * \author Josef Soentgen * \date 2014-08-20 */ /* * Copyright (C) 2014 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. */ #include #include #include #include #include #include #include #include namespace Libc { extern char const *config_rtc(); time_t read_rtc(); } time_t Libc::read_rtc() { time_t rtc = 0; if (!Genode::strcmp(Libc::config_rtc(), "")) { PWRN("%s: rtc not configured, returning %lu", __func__, rtc); return rtc; } int fd = open(Libc::config_rtc(), O_RDONLY); if (fd == -1) { PWRN("%s: %s not readable, returning %lu", __func__, Libc::config_rtc(), rtc); return rtc; } char buf[32]; ssize_t n = read(fd, buf, sizeof(buf)); if (n > 0) { buf[n - 1] = '\0'; struct tm tm; Genode::memset(&tm, 0, sizeof(tm)); if (strptime(buf, "%Y-%m-%d %R", &tm)) { rtc = mktime(&tm); if (rtc == (time_t)-1) rtc = 0; } } close(fd); return rtc; }