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; }