result_t libwrap_del_evt_listener(int32 mask, int32 listener_idx) { int32 count = 0; result_t rc = RESULT_OK; listener_t *header = NULL; rc = get_listeners(mask, &header); if (rc != RESULT_OK) { return rc; } if (header == NULL) return RESULT_NONE_POINTER; if (listener_idx < 1) return RESULT_NO_NODE; else listener_idx--; while (listener_idx) { header = header->pnext; listener_idx--; } if (header) rc = del_listener(header->url); free_listeners(header); return rc; }
static void consclose(Chan *c) { if((c->flag & COPEN) == 0) return; switch((ulong)c->qid.path) { case Qconsctl: /* last close of control file turns off raw */ if(decref(&kbd.ctl) == 0) kbd.raw = 0; break; case Qscancode: qlock(&kbd.gq); if(gkscanq) { qfree(gkscanq); gkscanq = nil; } qunlock(&kbd.gq); break; case Qkprint: wlock(&kprintq.l); qfree(kprintq.q); kprintq.q = nil; wunlock(&kprintq.l); break; case Qevents: del_listener(&event_listeners, c->aux); qfree(c->aux); c->aux = NULL; break; } }