static GObject * odccm_device_manager_constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *obj; OdccmDeviceManagerPrivate *priv; obj = G_OBJECT_CLASS (odccm_device_manager_parent_class)-> constructor (type, n_props, props); priv = ODCCM_DEVICE_MANAGER_GET_PRIVATE (obj); priv->server = gnet_server_new (NULL, 990, client_connected_cb, obj); #ifdef ENABLE_LEGACY_SUPPORT priv->legacy_server = gnet_server_new (NULL, 5679, client_connected_cb, obj); #endif dbus_g_connection_register_g_object (_odccm_get_dbus_conn (), DEVICE_MANAGER_OBJECT_PATH, obj); init_hal (ODCCM_DEVICE_MANAGER (obj)); init_udev (ODCCM_DEVICE_MANAGER (obj)); return obj; }
gint main(gint argc, gchar *argv[]) { gint c; gboolean run_as_daemon = TRUE; GMainLoop *mainloop; OdccmDeviceManager *mgr; DBusGConnection *bus; while ((c = getopt (argc, argv, "f")) != -1) { switch (c) { case 'f': run_as_daemon = FALSE; break; default: print_usage (argv[0]); return EXIT_FAILURE; } } g_type_init (); mainloop = g_main_loop_new (NULL, FALSE); bus = _odccm_get_dbus_conn (); _odccm_request_dbus_name (ODCCM_BUS_NAME); mgr = g_object_new (ODCCM_TYPE_DEVICE_MANAGER, NULL); if (run_as_daemon) { pid_t pid = fork (); if (pid < 0) return EXIT_FAILURE; if (pid > 0) return EXIT_FAILURE; if (setsid () < 0) return EXIT_FAILURE; if (chdir ("/") < 0) return EXIT_FAILURE; close (STDIN_FILENO); close (STDOUT_FILENO); close (STDERR_FILENO); } g_main_loop_run (mainloop); return EXIT_SUCCESS; }