Пример #1
0
int
main (int argc, const char *const *argv)
try
  {
    rxvt_init ();

    rxvt_term *t = new rxvt_term;

#if ENABLE_PERL
    stringvec *args = new stringvec;
    stringvec *envv = new stringvec;

    for (int i = 0; i < argc; i++)
      args->push_back (strdup (argv [i]));

    for (char **var = environ; *var; var++)
      envv->push_back (strdup (*var));

    envv->push_back (0);

    t->init (args, envv);
#else
    t->init (argc, argv, 0);
#endif

    ev_loop (0);

    return EXIT_SUCCESS;
  }
catch (const class rxvt_failure_exception &e)
  {
    return EXIT_FAILURE;
  }
Пример #2
0
int
main (int argc, char *argv[])
{
  ptytty::init ();

  static char opt_fork, opt_opendisplay, opt_quiet;
#if ENABLE_PERL
  static char *opt_eval;
#endif
#if ENABLE_MLOCK
  static char opt_lock;
#endif

  for (int i = 1; i < argc; i++)
    {
      if (!strcmp (argv [i], "-f") || !strcmp (argv [i], "--fork"))
        opt_fork = 1;
      else if (!strcmp (argv [i], "-o") || !strcmp (argv [i], "--opendisplay"))
        opt_opendisplay = 1;
      else if (!strcmp (argv [i], "-q") || !strcmp (argv [i], "--quiet"))
        opt_quiet = 1;
#if ENABLE_MLOCK
      else if (!strcmp (argv [i], "-m") || !strcmp (argv [i], "--mlock"))
        opt_lock = 1;
#endif
#if ENABLE_PERL
      else if (!strcmp (argv [i], "-e") || !strcmp (argv [i], "--eval"))
        opt_eval = argv [++i];
#endif
      else
        {
          rxvt_log ("%s: unknown option '%s', aborting.\n", argv [0], argv [i]);
          return EXIT_FAILURE;
        }
    }

  rxvt_init ();

#if ENABLE_PERL
  if (opt_eval)
    {
      rxvt_perl.init ();
      rxvt_perl.eval (opt_eval);
    }
#endif

  // optionally open display and never release it.
  if (opt_opendisplay)
    if (const char *dpy = getenv ("DISPLAY"))
      displays.get (dpy ? dpy : ":0"); // move string logic into rxvt_display maybe?

  char *sockname = rxvt_connection::unix_sockname ();
  unix_listener l (sockname);

  chdir ("/");

  if (!opt_quiet)
    {
      printf ("rxvt-unicode daemon listening on %s.\n", sockname);
      fflush (stdout);
    }

  free (sockname);

  pid_t pid = 0;
  if (opt_fork)
    {
      pid = fork ();
    }

#if ENABLE_MLOCK
  // Optionally perform an mlockall so this process does not get swapped out.
  if (opt_lock && !pid)
    if (mlockall (MCL_CURRENT | MCL_FUTURE) < 0)
      perror ("unable to lock into ram");
#endif

  if (opt_fork)
    {
      if (pid < 0)
        {
          rxvt_log ("unable to fork daemon, aborting.\n");
          return EXIT_FAILURE;
        }
      else if (pid > 0)
        _exit (EXIT_SUCCESS);

      ev_loop_fork (EV_DEFAULT_UC);
    }

  ev_run ();

  return EXIT_SUCCESS;
}