Read installed XML on start
All checks were successful
Build / build (push) Successful in 17s

This commit is contained in:
Eugen Wissner 2024-06-13 19:47:56 +02:00
parent e72976840c
commit ad19cb19d1
Signed by: belka
GPG Key ID: A27FDC1E8EE902C0
2 changed files with 12 additions and 40 deletions

View File

@ -169,7 +169,9 @@ namespace dlackware::timedate
try
{
introspection_data = Gio::DBus::NodeInfo::create_for_xml(INTROSPECTION_XML);
auto introspection_xml = Glib::file_get_contents(dlackware::timedate::introspection_xml);
introspection_data = Gio::DBus::NodeInfo::create_for_xml(introspection_xml);
}
catch (Glib::Error& slack_err)
{
@ -303,19 +305,19 @@ gboolean slack_set_time(gint64 seconds_since_epoch, gboolean relative)
{
return FALSE;
}
ts.tv_sec += static_cast<time_t>(seconds_since_epoch / USEC_PER_SEC);
ts.tv_nsec += (seconds_since_epoch % USEC_PER_SEC) * NSEC_PER_USEC;
ts.tv_sec += static_cast<time_t>(seconds_since_epoch / dlackware::timedate::usec_per_sec);
ts.tv_nsec += (seconds_since_epoch % dlackware::timedate::usec_per_sec) * dlackware::timedate::nsec_per_usec;
if (ts.tv_nsec < 0)
{
--ts.tv_sec;
ts.tv_nsec += USEC_PER_SEC;
ts.tv_nsec += dlackware::timedate::usec_per_sec;
}
}
else
{
ts.tv_sec = static_cast<time_t>(seconds_since_epoch / USEC_PER_SEC);
ts.tv_nsec = (seconds_since_epoch % USEC_PER_SEC) * NSEC_PER_USEC;
ts.tv_sec = static_cast<time_t>(seconds_since_epoch / dlackware::timedate::usec_per_sec);
ts.tv_nsec = (seconds_since_epoch % dlackware::timedate::usec_per_sec) * dlackware::timedate::nsec_per_usec;
}
return clock_settime (CLOCK_REALTIME, &ts) == 0;
}

View File

@ -23,46 +23,16 @@
#define BUS_NAME "org.freedesktop.timedate1"
#define BUS_PATH "/org/freedesktop/timedate1"
#define BUS_INTERFACE "org.freedesktop.timedate1"
#define INTROSPECTION_XML DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE \
"<node>\n" \
" <interface name=\"org.freedesktop.timedate1\">\n" \
" <property name=\"Timezone\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"LocalRTC\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"NTP\" type=\"b\" access=\"read\"/>\n" \
" <method name=\"SetTime\">\n" \
" <arg name=\"usec_utc\" type=\"x\" direction=\"in\"/>\n" \
" <arg name=\"relative\" type=\"b\" direction=\"in\"/>\n" \
" <arg name=\"user_interaction\" type=\"b\" direction=\"in\"/>\n" \
" </method>\n" \
" <method name=\"SetTimezone\">\n" \
" <arg name=\"timezone\" type=\"s\" direction=\"in\"/>\n" \
" <arg name=\"user_interaction\" type=\"b\" direction=\"in\"/>\n" \
" </method>\n" \
" <method name=\"SetLocalRTC\">\n" \
" <arg name=\"local_rtc\" type=\"b\" direction=\"in\"/>\n" \
" <arg name=\"fix_system\" type=\"b\" direction=\"in\"/>\n" \
" <arg name=\"user_interaction\" type=\"b\" direction=\"in\"/>\n" \
" </method>\n" \
" <method name=\"SetNTP\">\n" \
" <arg name=\"use_ntp\" type=\"b\" direction=\"in\"/>\n" \
" <arg name=\"user_interaction\" type=\"b\" direction=\"in\"/>\n" \
" </method>\n" \
" <method name=\"ListTimezones\">\n" \
" <arg name=\"timezones\" type=\"as\" direction=\"out\"/>\n" \
" </method>" \
" </interface>\n" \
"</node>\n"
#define DEFAULT_EXIT_SEC 300
constexpr gint32 USEC_PER_SEC = 1000000ULL;
constexpr gint32 NSEC_PER_USEC = 1000ULL;
namespace dlackware::timedate
{
constexpr const char *zoneinfo_database = "/usr/share/zoneinfo";
constexpr const char *introspection_xml = "/usr/share/dbus-1/interfaces/org.freedesktop.timedate1.xml";
constexpr const gint32 usec_per_sec = 1000000ULL;
constexpr const gint32 nsec_per_usec = 1000ULL;
// Returns the system time zone.
Glib::ustring timezone();