diff options
Diffstat (limited to 'src/timedate.cpp')
| -rw-r--r-- | src/timedate.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/timedate.cpp b/src/timedate.cpp index b06cbcc..101a925 100644 --- a/src/timedate.cpp +++ b/src/timedate.cpp @@ -18,6 +18,7 @@ #include <cstring> #include <filesystem> #include <fstream> +#include <iostream> #include <string> #include "timedate.h" @@ -116,6 +117,10 @@ static void slack_get_property(Glib::VariantBase& result, const Glib::RefPtr<Gio { result = Glib::Variant<bool>::create(dlackware::timedate::ntp()); } + else if (prop_name == "CanNTP") + { + result = Glib::Variant<bool>::create(dlackware::timedate::can_ntp()); + } } namespace dlackware::timedate @@ -265,6 +270,24 @@ namespace dlackware::timedate return Glib::file_test("/etc/rc.d/rc.ntpd", Glib::FileTest::FILE_TEST_IS_EXECUTABLE); } + bool can_ntp() + { + std::string standard_output; + int wait_status{-1}; + + try + { + Glib::spawn_sync("", std::vector<std::string>{ "s6-rc-db", "type", "ntpd" }, + Glib::SpawnFlags::SPAWN_SEARCH_PATH | Glib::SpawnFlags::SPAWN_STDERR_TO_DEV_NULL, + {}, &standard_output, nullptr, &wait_status); + } + catch (const Glib::SpawnError& spawn_error) + { + return std::filesystem::exists("/etc/rc.d/rc.ntpd"); + } + return wait_status == 0 && standard_output == "bundle\n"; + } + void set_time(gint64 seconds_since_epoch, bool relative, bool) { timespec ts; |
