コード例 #1
0
ファイル: listen.c プロジェクト: kleopatra999/irssi
static void read_settings(void)
{
	LISTEN_REC *rec;
	GSList *remove_listens;
	char **ports, **tmp, *ircnet, *port;
	int portnum;

	remove_listens = g_slist_copy(proxy_listens);

	ports = g_strsplit(settings_get_str("irssiproxy_ports"), " ", -1);
	for (tmp = ports; *tmp != NULL; tmp++) {
		ircnet = *tmp;
		port = strchr(ircnet, '=');
		if (port == NULL)
			continue;

		*port++ = '\0';
		portnum = atoi(port);
		if (portnum <=  0)
			continue;

		rec = find_listen(ircnet, portnum);
		if (rec == NULL)
			add_listen(ircnet, portnum);
		else
			remove_listens = g_slist_remove(remove_listens, rec);
	}
	g_strfreev(ports);

	while (remove_listens != NULL) {
                remove_listen(remove_listens->data);
		remove_listens = g_slist_remove(remove_listens, remove_listens->data);
	}
}
コード例 #2
0
ファイル: listen.c プロジェクト: Manishearth/irssi
static void read_settings(void)
{
	LISTEN_REC *rec;
	GSList *remove_listens = NULL;
	GSList *add_listens = NULL;
	char **ports, **tmp, *ircnet, *port;
	int portnum;

	remove_listens = g_slist_copy(proxy_listens);

	ports = g_strsplit(settings_get_str("irssiproxy_ports"), " ", -1);
	for (tmp = ports; *tmp != NULL; tmp++) {
		ircnet = *tmp;
		port = strchr(ircnet, '=');
		if (port == NULL)
			continue;

		*port++ = '\0';
		portnum = atoi(port);
		if (portnum <=  0)
			continue;

		rec = find_listen(ircnet, portnum);
		if (rec == NULL) {
			rec = g_new0(LISTEN_REC, 1);
			rec->ircnet = ircnet; /* borrow */
			rec->port = portnum;
			add_listens = g_slist_prepend(add_listens, rec);
		} else {
			/* remove from the list of listens to remove == keep it */
			remove_listens = g_slist_remove(remove_listens, rec);
		}
	}

	while (remove_listens != NULL) {
		remove_listen(remove_listens->data);
		remove_listens = g_slist_remove(remove_listens, remove_listens->data);
	}

	while (add_listens != NULL) {
		rec = add_listens->data;
		add_listen(rec->ircnet, rec->port);
		add_listens = g_slist_remove(add_listens, rec);
		g_free(rec);
	}

	g_strfreev(ports);
}