Example #1
0
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;
}
Example #2
0
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;
}