static void enable_events(pa_iochannel *io) { pa_assert(io); if (io->hungup) { delete_events(io); return; } if (io->ifd == io->ofd && io->ifd >= 0) { pa_io_event_flags_t f = PA_IO_EVENT_NULL; if (!io->readable) f |= PA_IO_EVENT_INPUT; if (!io->writable) f |= PA_IO_EVENT_OUTPUT; pa_assert(io->input_event == io->output_event); if (f != PA_IO_EVENT_NULL) { if (io->input_event) io->mainloop->io_enable(io->input_event, f); else io->input_event = io->output_event = io->mainloop->io_new(io->mainloop, io->ifd, f, callback, io); } else delete_events(io); } else { if (io->ifd >= 0) { if (!io->readable) { if (io->input_event) io->mainloop->io_enable(io->input_event, PA_IO_EVENT_INPUT); else io->input_event = io->mainloop->io_new(io->mainloop, io->ifd, PA_IO_EVENT_INPUT, callback, io); } else if (io->input_event) { io->mainloop->io_free(io->input_event); io->input_event = NULL; } } if (io->ofd >= 0) { if (!io->writable) { if (io->output_event) io->mainloop->io_enable(io->output_event, PA_IO_EVENT_OUTPUT); else io->output_event = io->mainloop->io_new(io->mainloop, io->ofd, PA_IO_EVENT_OUTPUT, callback, io); } else if (io->output_event) { io->mainloop->io_free(io->output_event); io->output_event = NULL; } } } }
void pa_iochannel_free(pa_iochannel*io) { pa_assert(io); delete_events(io); if (!io->no_close) { if (io->ifd >= 0) pa_close(io->ifd); if (io->ofd >= 0 && io->ofd != io->ifd) pa_close(io->ofd); } pa_xfree(io); }
int main(int argc, char *argv) { void *options, *events; bool fullscr = false; int tmp; /* parse command line here */ options = pcline(argc, argv); if (options == NULL) { /* oopthspthspthsie! */ prinf("\nUnable to allocate memory!\n"); return 1; } if (((bool) *options) == true) { /* we're editing */ fullscr = init_ncurses(); /* TODO: Implement non-fullscreen functionality */ while ((tmp = event_editor(events, fullscr)) != 5) { switch (event_editor(events, fullscr)) { case 1: /* list events */ list_events(*events); break; case 2: /* delete event(s) */ delete_events(*events); break; case 3: /* add event(s) */ add_events(*events); break; case 4: /* edit event */ ed_event(*events); break; case 5: /* exit */ return 0; break; default: err("\n\nWTF?\nFell through main loop: %s\n"); } } } else if (((bool) *(options + 1)) == true) { /* fork & notify */ if (notifyd != 0) return 2; } }