+ /* TODO: the "only once" guarantee only counts towards specific signals.
+ * make sure calling a SIGINT and SIGHUP doesn't cause term_handler()
+ * to be called twice */
+}
+
+int main() {
+
+ set_signal_handlers();
+
+ hostnamed_loop = g_main_loop_new(NULL, TRUE);
+ hostnamed_freeable = g_ptr_array_new();
+
+ bus_descriptor = g_bus_own_name(G_BUS_TYPE_SYSTEM,
+ "org.freedesktop.hostname1",
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ hostnamed_on_bus_acquired,
+ hostnamed_on_name_acquired,
+ hostnamed_on_name_lost,
+ NULL,
+ NULL);
+
+ g_main_loop_run(hostnamed_loop);
+ /* runs until single g_main_loop_quit() call is raised inside <interface>_mem_clean() */
+ g_main_loop_unref(hostnamed_loop);
+
+ /* guaranteed unownable */
+ g_bus_unown_name(bus_descriptor);
+
+ /* at this point no operations can occur with our data, it is safe to free it + its container */
+ g_ptr_array_free(hostnamed_freeable, TRUE);
+
+ return 0;