int perl_input_add(int source, int condition, SV *func, SV *data, int once) { PERL_SCRIPT_REC *script; PERL_SOURCE_REC *rec; GIOChannel *channel; const char *pkg; pkg = perl_get_package(); script = perl_script_find_package(pkg); g_return_val_if_fail(script != NULL, -1); rec = g_new0(PERL_SOURCE_REC, 1); perl_source_ref(rec); rec->once = once; rec->script =script; rec->func = perl_func_sv_inc(func, pkg); rec->data = SvREFCNT_inc(data); channel = g_io_channel_unix_new(source); rec->tag = g_input_add(channel, condition, (GInputFunction) perl_source_event, rec); g_io_channel_unref(channel); perl_sources = g_slist_append(perl_sources, rec); return rec->tag; }
int perl_timeout_add(int msecs, const char *func, const char *data) { PERL_SOURCE_REC *rec; rec = g_new(PERL_SOURCE_REC, 1); rec->func = g_strdup_printf("%s::%s", perl_get_package(), func); rec->data = g_strdup(data); rec->tag = g_timeout_add(msecs, (GSourceFunc) perl_source_event, rec); perl_sources = g_slist_append(perl_sources, rec); return rec->tag; }
static void perl_signal_add_full_int(const char *signal, SV *func, int priority, int command, const char *category) { PERL_SCRIPT_REC *script; PERL_SIGNAL_REC *rec; GSList **siglist; void *signal_idp; g_return_if_fail(signal != NULL); g_return_if_fail(func != NULL); script = perl_script_find_package(perl_get_package()); g_return_if_fail(script != NULL); rec = g_new(PERL_SIGNAL_REC, 1); rec->script = script; rec->signal_id = signal_get_uniq_id(signal); rec->signal = g_strdup(signal); rec->func = perl_func_sv_inc(func, perl_get_package()); if (command || strncmp(signal, "command ", 8) == 0) { /* we used Irssi::signal_add() instead of Irssi::command_bind() - oh well, allow this.. */ command_bind_full(MODULE_NAME, priority, signal+8, -1, category, sig_func, rec); } else { signal_add_full_id(MODULE_NAME, priority, rec->signal_id, sig_func, rec); } signal_idp = GINT_TO_POINTER(rec->signal_id); siglist = g_hash_table_lookup(signals, signal_idp); if (siglist == NULL) { siglist = g_new0(GSList *, 1); g_hash_table_insert(signals, signal_idp, siglist); }
int perl_input_add(int source, int condition, const char *func, const char *data) { PERL_SOURCE_REC *rec; GIOChannel *channel; rec = g_new(PERL_SOURCE_REC, 1); rec->func = g_strdup_printf("%s::%s", perl_get_package(), func); rec->data = g_strdup(data); channel = g_io_channel_unix_new(source); rec->tag = g_input_add(channel, condition, (GInputFunction) perl_source_event, rec); g_io_channel_unref(channel); perl_sources = g_slist_append(perl_sources, rec); return rec->tag; }
int perl_timeout_add(int msecs, SV *func, SV *data, int once) { PERL_SCRIPT_REC *script; PERL_SOURCE_REC *rec; const char *pkg; pkg = perl_get_package(); script = perl_script_find_package(pkg); g_return_val_if_fail(script != NULL, -1); rec = g_new0(PERL_SOURCE_REC, 1); perl_source_ref(rec); rec->once = once; rec->script = script; rec->func = perl_func_sv_inc(func, pkg); rec->data = SvREFCNT_inc(data); rec->tag = g_timeout_add(msecs, (GSourceFunc) perl_source_event, rec); perl_sources = g_slist_append(perl_sources, rec); return rec->tag; }