Exemple #1
0
static inline long openboot(void)
{
	char bootdev[256];
	long result;

	result = callback_getenv(ENV_BOOTED_DEV, bootdev, 255);
	if (result < 0)
		return result;
	return callback_open(bootdev, result & 255);
}
int main(int argc, char *argv[])
{
  /* Get command arguments */
  if ( parse_options(argc, argv) )
    usage();
  if ( devname == NULL )
    usage();

  if ( opt & CAPTURE_OPT_DEBUG ) {
    dprintf("START: device=\"%s\" callback(w)=%d update(w)=%d\n", devname, callback_fd, update_fd);
  }

  /* Enable multithreading */
  if ( !g_thread_supported() )
    g_thread_init(NULL);

  /* Open capture device */
  capture = _capture_interface.open(devname, opt, update, NULL);
  if ( capture == NULL ) {
    eprintf("Failed to open capture device\n");
    exit(1);
  }

  callback_open(capture);

  /* Hook termination procedure at exit stack and signal handling */
  atexit(terminate);
  sig_init(terminate);
  signal(SIGPIPE, SIG_IGN);

  /* Hook stdin read handler */
  fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK);
  stdin_channel = g_io_channel_unix_new(STDIN_FILENO);
  stdin_tag = g_io_add_watch(stdin_channel, G_IO_IN | G_IO_HUP,
			     (GIOFunc) stdin_read, NULL);

  /* Create main loop */
  loop = g_main_loop_new(NULL, FALSE);

  /* Enter processing loop */
  g_main_loop_run(loop);

  /* Destroy main loop */
  g_main_loop_unref(loop);
  loop = NULL;

  terminate();

  return 0;
}