[ekg2-commit] r3910 - in trunk: ekg plugins/feed plugins/gg plugins/gtk plugins/jabber plugins/jogger plugins/ncurses plugins/perl/common plugins/perl/irc plugins/python plugins/readline plugins/xmsg: trunk/ekg/commands.c trunk/ekg/ekg.c trunk/ekg/plugins.c trunk/ekg/plugins.h trunk/ekg/sessions.c trunk/ekg/sessions.h trunk/ekg/stuff.c trunk/ekg/windows.c trunk/plugins/feed/rss.c trunk/plugins/gg/pubdir.c trunk/plugins/gtk/completion.c trunk/plugins/jabber/commands.c trunk/plugins/jabber/jabber.c trunk/plugins/jabber/jabber_dcc.c trunk/plugins/jogger/jogger.c trunk/plugins/ncurses/completion.c trunk/plugins/ncurses/contacts.c trunk/plugins/perl/common/Session.xs trunk/plugins/perl/irc/Server.xs trunk/plugins/python/python-ekg.c trunk/plugins/readline/readline-completion.c trunk/plugins/xmsg/xmsg.c

SVN commit svn w toxygen.net
Nie, 16 Mar 2008, 10:28:16 CET


Author: peres
Date: 2008-03-16 10:28:15 +0100 (Sun, 16 Mar 2008)
New Revision: 3910

Modified:
   trunk/ekg/commands.c
   trunk/ekg/ekg.c
   trunk/ekg/plugins.c
   trunk/ekg/plugins.h
   trunk/ekg/sessions.c
   trunk/ekg/sessions.h
   trunk/ekg/stuff.c
   trunk/ekg/windows.c
   trunk/plugins/feed/rss.c
   trunk/plugins/gg/pubdir.c
   trunk/plugins/gtk/completion.c
   trunk/plugins/jabber/commands.c
   trunk/plugins/jabber/jabber.c
   trunk/plugins/jabber/jabber_dcc.c
   trunk/plugins/jogger/jogger.c
   trunk/plugins/ncurses/completion.c
   trunk/plugins/ncurses/contacts.c
   trunk/plugins/perl/common/Session.xs
   trunk/plugins/perl/irc/Server.xs
   trunk/plugins/python/python-ekg.c
   trunk/plugins/readline/readline-completion.c
   trunk/plugins/xmsg/xmsg.c
Log:

Sessions into lists3.



Modified: trunk/ekg/commands.c
===================================================================
--- trunk/ekg/commands.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/ekg/commands.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -802,15 +802,14 @@
 			next_is_for = 1;
 
 		if (for_all) {
-			list_t l;
+			session_t *s;
 			
 			if (!sessions) {
 				printq("session_list_empty");
 				return -2;
 			}
 				
-			for (l = sessions; l; l = l->next) {
-				session_t *s = l->data;
+			for (s = sessions; s; s = s->next) {
 				char *for_command;
 				
 				if (!s || !s->uid)
@@ -1828,15 +1827,13 @@
 static COMMAND(cmd_quit)
 {
     	char *reason;
-	list_t l;
+	session_t *s;
 	
 	reason = xstrdup(params[0]);
 	query_emit_id(NULL, QUITTING, &reason);
 	xfree(reason);
 
-	for (l = sessions; l; l = l->next) {
-		session_t *s = l->data;
-		
+	for (s = sessions; s; s = s->next) {
 		if (params[0])
 			command_exec_format(NULL, s, 3, ("/disconnect %s"), params[0]);
 		else
@@ -2811,9 +2808,10 @@
 int binding_quick_list(int a, int b)
 {
 	string_t list = string_init(NULL);
-	list_t l, sl;
-	for (sl = sessions; sl; sl = sl->next) {
-		session_t *s = sl->data;
+	list_t l;
+	session_t *s;
+
+	for (s = sessions; s; s = s->next) {
 		for (l = s->userlist; l; l = l->next) {
 			userlist_t *u = l->data;
 			const char *format;

Modified: trunk/ekg/ekg.c
===================================================================
--- trunk/ekg/ekg.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/ekg/ekg.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -129,7 +129,6 @@
 void ekg_loop() {
 	struct timeval tv;
         struct timeval stv;
-        list_t l;
         fd_set rd, wd;
         int ret, maxfd, status;
 	pid_t pid;
@@ -177,46 +176,48 @@
 			}
 		}
 
-                /* sprawdź autoawaye różnych sesji */
-                for (l = sessions; l; l = l->next) {
-                        session_t *s = l->data;
-                        int tmp;
+		{			/* XXX: maybe make this some kind of idler? */
+			session_t *s;
 
-                        if (!s->connected || (s->status < EKG_STATUS_AWAY)) /* lowest autostatus is autoxa, so from xa and lower ones
-									       we can't go further */
-                                continue;
+			/* sprawdź autoawaye różnych sesji */
+			for (s = sessions; s; s = s->next) {
+				int tmp;
 
-			do {
-				if ((s->status == EKG_STATUS_AWAY) || (tmp = session_int_get(s, "auto_away")) < 1 || !s->activity)
-        	                        break;
+				if (!s->connected || (s->status < EKG_STATUS_AWAY)) /* lowest autostatus is autoxa, so from xa and lower ones
+										       we can't go further */
+					continue;
 
-                	        if (tv.tv_sec - s->activity > tmp)
-                        	        command_exec(NULL, s, ("/_autoaway"), 0);
-			} while (0);
+				do {
+					if ((s->status == EKG_STATUS_AWAY) || (tmp = session_int_get(s, "auto_away")) < 1 || !s->activity)
+						break;
 
-			do {
-	                        if ((tmp = session_int_get(s, "auto_xa")) < 1 || !s->activity)
-        	                        break;
+					if (tv.tv_sec - s->activity > tmp)
+						command_exec(NULL, s, ("/_autoaway"), 0);
+				} while (0);
 
-                	        if (tv.tv_sec - s->activity > tmp)
-                        	        command_exec(NULL, s, ("/_autoxa"), 0);
-			} while (0);
-                }
+				do {
+					if ((tmp = session_int_get(s, "auto_xa")) < 1 || !s->activity)
+						break;
 
-		/* sprawdź scroll timeouty */
-		/* XXX: nie tworzyć variabla globalnego! */
-		for (l = sessions; l; l = l->next) {
-			session_t *s = l->data;
-			int tmp;
+					if (tv.tv_sec - s->activity > tmp)
+						command_exec(NULL, s, ("/_autoxa"), 0);
+				} while (0);
+			}
 
-			if (!s->connected)
-				continue;
+			/* sprawdź scroll timeouty */
+			/* XXX: nie tworzyć variabla globalnego! */
+			for (s = sessions; s; s = s->next) {
+				int tmp;
 
-			if (!(tmp = session_int_get(s, "scroll_long_desc")) || tmp == -1)
-				continue;
+				if (!s->connected)
+					continue;
 
-			if (tv.tv_sec - s->scroll_last > tmp)
-				command_exec(NULL, s, ("/_autoscroll"), 0);
+				if (!(tmp = session_int_get(s, "scroll_long_desc")) || tmp == -1)
+					continue;
+
+				if (tv.tv_sec - s->scroll_last > tmp)
+					command_exec(NULL, s, ("/_autoscroll"), 0);
+			}
 		}
 
                 /* auto save */
@@ -415,14 +416,9 @@
 				}
 
 				if (w->fd == 0) {
-					list_t session_list;
-					for (
-						session_list = sessions;
-						session_list;
-						session_list = session_list->next) 
+					session_t *s;
+					for (s = sessions; s; s = s->next) 
 					{
-						session_t *s = session_list->data;
-
 						if (!s->connected || !s->autoaway)
 							continue;
 
@@ -698,7 +694,6 @@
 #else
 	WSADATA wsaData;
 #endif
-        list_t l;
 
 #ifndef NO_POSIX_SYSTEM
         /* zostaw po sobie core */
@@ -985,39 +980,40 @@
 
         config_postread();
 
-        /* status window takes first session if not setted before*/
+        /* status window takes first session if not set before*/
 	if (!session_current && sessions)
-			session_current = (session_t*) sessions->data;
+			session_current = sessions;
 
 	if (session_current != window_current->session)
 		window_current->session = session_current;
 
         metacontact_read(); /* read the metacontacts info */
 
-        /* wylosuj opisy i zmień stany klientów */
-        for (l = sessions; l; l = l->next) {
-                session_t *s = l->data;
-                const char *cmd = NULL;
+	{
+		session_t *s;
 
-                if (new_status)
-                        session_status_set(s, new_status);
+		/* wylosuj opisy i zmień stany klientów */
+		for (s = sessions; s; s = s->next) {
+			const char *cmd = NULL;
 
-                if (new_descr)
-                        session_descr_set(s, new_descr);
+			if (new_status)
+				session_status_set(s, new_status);
 
-		cmd = ekg_status_string(s->status, 1);
+			if (new_descr)
+				session_descr_set(s, new_descr);
 
-                command_exec_format(NULL, s, 2, ("/%s %s"), cmd, (new_descr) ? new_descr : "");
-        }
+			cmd = ekg_status_string(s->status, 1);
 
-        /* po zainicjowaniu protokołów, połącz się automagicznie ze
-         * wszystkim, co chce się automagicznie łączyć. */
-        for (l = sessions; l; l = l->next) {
-                session_t *s = l->data;
+			command_exec_format(NULL, s, 2, ("/%s %s"), cmd, (new_descr) ? new_descr : "");
+		}
 
-                if (auto_connect && session_int_get(s, "auto_connect") == 1)
-                        command_exec(NULL, s, ("/connect"), 0);
-        }
+		/* po zainicjowaniu protokołów, połącz się automagicznie ze
+		 * wszystkim, co chce się automagicznie łączyć. */
+		for (s = sessions; s; s = s->next) {
+			if (auto_connect && session_int_get(s, "auto_connect") == 1)
+				command_exec(NULL, s, ("/connect"), 0);
+		}
+	}
 
         if (config_auto_save)
                 last_save = time(NULL);

Modified: trunk/ekg/plugins.c
===================================================================
--- trunk/ekg/plugins.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/ekg/plugins.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -509,8 +509,6 @@
 	 * ekg2 do SEGV.
 	 */
 
-	list_t l;
-
 	if (!p)
 		return -1;
 
@@ -553,13 +551,16 @@
 		}
 	}
 
-	for (l = sessions; l; ) {
-		session_t *s = l->data;
+	{
+		session_t *s;
 
-		l = l->next;
+		for (s = sessions; s; ) {
+			session_t *next = s->next;
 
-		if (s->plugin == p)
-			session_remove(s->uid);
+			if (s->plugin == p)
+				session_remove(s->uid);
+			s = next;
+		}
 	}
 
 	{

Modified: trunk/ekg/plugins.h
===================================================================
--- trunk/ekg/plugins.h	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/ekg/plugins.h	2008-03-16 09:28:15 UTC (rev 3910)
@@ -26,7 +26,7 @@
 #include "dynstuff.h"
 #include "sessions.h"
 
-#define EKG_ABI_VER 3894
+#define EKG_ABI_VER 3910
 
 #define EXPORT __attribute__ ((visibility("default")))
 

Modified: trunk/ekg/sessions.c
===================================================================
--- trunk/ekg/sessions.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/ekg/sessions.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -49,7 +49,7 @@
 
 #include "queries.h"
 
-list_t sessions = NULL;
+session_t *sessions = NULL;
 session_t *session_current = NULL;
 
 /**
@@ -68,9 +68,10 @@
  */
 
 session_t *session_find_ptr(session_t *s) {
-	list_t l;
-	for (l = sessions; l; l = l->next) {
-		if (l->data == s)
+	session_t *sl;
+
+	for (sl = sessions; sl; sl = sl->next) {
+		if (sl == s)
 			return s;
 
 	}
@@ -91,14 +92,12 @@
 
 session_t *session_find(const char *uid)
 {
-	list_t l;
+	session_t *s;
 
 	if (!uid)
 		return NULL;
 
-	for (l = sessions; l; l = l->next) {
-		session_t *s = l->data;
-
+	for (s = sessions; s; s = s->next) {
                 if (!xstrcasecmp(s->uid, uid) || (s->alias && !xstrcasecmp(s->alias, uid)))
 			return s;
 	}
@@ -161,7 +160,7 @@
 	s->lock_fd	= -1;
 #endif
 	
-	LIST_ADD_SORTED(&sessions, s, session_compare);
+	LIST_ADD_SORTED2(&sessions, s, session_compare);
 
 	/* XXX, wywalic sprawdzanie czy juz jest sesja? w koncu jak dodajemy sesje.. to moze chcemy sie od razu na nia przelaczyc? */
 	if (!window_current->session && (window_current->id == 0 || window_current->id == 1)) {
@@ -222,6 +221,31 @@
 	return s;
 }
 
+static LIST_FREE_ITEM(session_free_item, session_t *) {
+	list_t l;
+
+/* free _global_ session variables */
+	array_free_count(data->values, data->global_vars_count);
+
+/* free _local_ session variables */
+        for (l = data->local_vars; l; l = l->next) {
+                session_param_t *v = l->data;
+
+                xfree(v->key);
+		xfree(v->value);
+        }
+	list_destroy(data->local_vars, 1);
+
+	xfree(data->alias);
+	xfree(data->uid);
+	xfree(data->descr);
+	xfree(data->password);
+	xfree(data->last_descr);
+
+	/* free memory like sessions_free() do */
+	userlist_free(data);
+}
+
 /**
  * session_remove()
  *
@@ -254,8 +278,8 @@
 int session_remove(const char *uid)
 {
 	session_t *s;
-	char *tmp;
 	list_t l;
+	char *tmp;
 	int count;
 
 	if (!(s = session_find(uid)))
@@ -263,7 +287,7 @@
 	if (s == session_current)
 		session_current = NULL;
 
-	count = list_count(sessions);
+	count = LIST_COUNT2(sessions);
 
 	for (l = windows; l; l = l->next) {
 		window_t *w = l->data;
@@ -321,28 +345,7 @@
 	query_emit_id(NULL, SESSION_REMOVED, &tmp);
 	xfree(tmp);
 
-/* free _global_ session variables */
-	array_free_count(s->values, s->global_vars_count);
-
-/* free _local_ session variables */
-        for (l = s->local_vars; l; l = l->next) {
-                session_param_t *v = l->data;
-
-                xfree(v->key);
-		xfree(v->value);
-        }
-	list_destroy(s->local_vars, 1);
-
-	xfree(s->alias);
-	xfree(s->uid);
-	xfree(s->descr);
-	xfree(s->password);
-	xfree(s->last_descr);
-
-	/* free memory like sessions_free() do */
-	userlist_free(s);
-
-	list_remove(&sessions, s, 1);
+	LIST_REMOVE2(&sessions, s, session_free_item);
 	return 0;
 }
 
@@ -754,13 +757,10 @@
 		plugin_t *p;
 
 		if (!in_autoexec) {
-			list_t l;
+			session_t *sf;
 
-			for (l = sessions; l; l = l->next) {
-				session_t *s = l->data;
-
-				command_exec(NULL, s, ("/disconnect"), 1);
-			}
+			for (sf = sessions; sf; sf = sf->next)
+				command_exec(NULL, sf, ("/disconnect"), 1);
 			sessions_free();
 			debug("	 flushed sessions\n");
 		}
@@ -833,7 +833,7 @@
 		return -1;
 
 	for (p = plugins; p; p = p->next) {
-		list_t ls;
+		session_t *s;
 		const char *tmp;
 
 		if (p->pclass != PLUGIN_PROTOCOL) continue; /* skip no protocol plugins */
@@ -849,8 +849,7 @@
 			continue;
                 }
 
-		for (ls = sessions; ls; ls = ls->next) {
-			session_t *s = ls->data;
+		for (s = sessions; s; s = s->next) {
 			int i;
 
 			if (s->plugin != p)
@@ -999,11 +998,7 @@
 	session_t *s;
 
 	if (!params[0] || match_arg(params[0], 'l', ("list"), 2)) {
-		list_t l;
-
-		for (l = sessions; l; l = l->next) {
-			session_t *s = l->data;
-
+		for (s = sessions; s; s = s->next) {
 			const char *descr = (s->connected) ? s->descr : NULL;
 			const int status = (s->connected) ? s->status : EKG_STATUS_NA;
 			char *tmp;
@@ -1025,10 +1020,7 @@
 	}
 	
 	if (!xstrcasecmp(params[0], "--dump")) {
-		list_t l;
-		
-		for (l = sessions; l; l = l->next) {
-			session_t *s = l->data;
+		for (s = sessions; s; s = s->next) {
 			plugin_t *p = s->plugin;
 			list_t lp;
 			int i;
@@ -1462,7 +1454,7 @@
  * zwalnia wszystkie dostępne sesje
  */
 void sessions_free() {
-	list_t old_sessions;
+	session_t *s;
 	list_t l;
 
         if (!sessions)
@@ -1498,38 +1490,15 @@
 /* it's sessions, not 'l' because we emit SESSION_REMOVED, which might want to search over sessions list...
  * This bug was really time-wasting ;(
  */
-        for (old_sessions = sessions; sessions; sessions = sessions->next) {
-                session_t *s = sessions->data;
-		list_t lp;
-
-		if (!s)
-			continue;
-
+/* mg: I modified it so it'll first emit all the events, and then start to free everything
+ * That shouldn't be a problem, should it? */
+        for (s = sessions; s; s = s->next)
 		query_emit_id(s->plugin, SESSION_REMOVED, &(s->uid));	/* it notify only that plugin here, to free internal data. 
 									 * ui-plugin already removed.. other plugins @ quit.
 									 * shouldn't be aware about it. too...
 									 * XXX, think about it?
 									 */
-		/* free _global_ variables */
-		array_free_count(s->values, s->global_vars_count);
 
-		/* free _local_ variables */
-	        for (lp = s->local_vars; lp; lp = lp->next) {
-        	        session_param_t *v = lp->data;
-	
-	                xfree(v->key);
-	                xfree(v->value);
-	        }
-	        list_destroy(s->local_vars, 1);
-
-	        xfree(s->alias);
-	        xfree(s->uid);
-        	xfree(s->descr);
-	        xfree(s->password);
-		xfree(s->last_descr);
-		userlist_free(s);
-        }
-
 	for (l = windows; l; l = l->next) {
 		window_t *w = l->data;
 
@@ -1539,7 +1508,7 @@
 		w->session = NULL;
 	}
 
-        list_destroy(old_sessions, 1);
+        LIST_DESTROY2(sessions, session_free_item);
         sessions = NULL;
 	session_current = NULL;
 	window_current->session = NULL;
@@ -1678,14 +1647,12 @@
  * It should cleanup old locks and reinit new, if needed.
  */
 void changed_session_locks(const char *varname) {
-	list_t l;
+	session_t *s;
 
 #ifdef HAVE_FLOCK
 	if (config_session_locks != 1) {
 			/* unlock all files, close fds */
-		for (l = sessions; l; l = l->next) {
-			session_t *s = l->data;
-
+		for (s = sessions; s; s = s->next) {
 			if (s->lock_fd != -1) {
 				flock(s->lock_fd, LOCK_UN);
 				close(s->lock_fd);
@@ -1697,9 +1664,7 @@
 
 	if (!config_session_locks) {
 			/* unlink all lockfiles */
-		for (l = sessions; l; l = l->next) {
-			session_t *s = l->data;
-
+		for (s = sessions; s; s = s->next) {
 			if (s->connected) { /* don't break locks of other copy of ekg2 */
 				const char *path = prepare_pathf("%s-lock", session_uid_get(s));
 				if (path)
@@ -1708,9 +1673,7 @@
 		}
 	} else {
 			/* lock all connected sessions */
-		for (l = sessions; l; l = l->next) {
-			session_t *s = l->data;
-
+		for (s = sessions; s; s = s->next) {
 			if (s->connected
 #ifdef HAVE_FLOCK
 					&& ((config_session_locks != 1) || (s->lock_fd == -1))

Modified: trunk/ekg/sessions.h
===================================================================
--- trunk/ekg/sessions.h	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/ekg/sessions.h	2008-03-16 09:28:15 UTC (rev 3910)
@@ -103,7 +103,9 @@
 /**
  * session_t contains all information about session
  */
-typedef struct {
+typedef struct session {
+	struct session	*next;
+
 /* public: */
 	void		*plugin;	/**< protocol plugin owing session */
 	char		*uid;		/**< user ID */
@@ -137,7 +139,7 @@
 } session_t;
 
 #ifndef EKG2_WIN32_NOFUNCTION
-extern list_t sessions;
+extern session_t *sessions;
 
 extern session_t *session_current;
 

Modified: trunk/ekg/stuff.c
===================================================================
--- trunk/ekg/stuff.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/ekg/stuff.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -644,16 +644,15 @@
  */
 void changed_display_blinking(const char *var)
 {
-	list_t sl;
+	session_t *s;
 
 	/* wyłączamy wszystkie blinkające uid'y */
-        for (sl = sessions; sl; sl = sl->next) {
+        for (s = sessions; s; s = s->next) {
 		list_t l;
-        	session_t *s = sl->data;
 
 		for (l = s->userlist; l; l = l->next) {
 			userlist_t *u	= l->data;
-			u->blink	= 0;;
+			u->blink	= 0;
 		}
 	}
 }
@@ -790,7 +789,7 @@
 {
 	struct conference c, *cf;
 	char **nicks;
-	list_t l, sl;
+	list_t l;
 	int i, count;
 	char **p;
 
@@ -807,12 +806,12 @@
 	/* grupy zamieniamy na niki */
 	for (i = 0; nicks[i]; i++) {
 		if (nicks[i][0] == '@') {
+			session_t *s;
 			char *gname = xstrdup(nicks[i] + 1);
 			int first = 0;
 			int nig = 0; /* nicks in group */
 		
-			for (sl = sessions; sl; sl = sl->next) {
-				session_t *s = sl->data;
+			for (s = sessions; s; s = s->next) {
 			        for (l = s->userlist; l; l = l->next) {
 					userlist_t *u = l->data;
 					list_t m;

Modified: trunk/ekg/windows.c
===================================================================
--- trunk/ekg/windows.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/ekg/windows.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -124,10 +124,8 @@
 		return NULL;
 
 	if (xstrncmp(target, "__", 2)) {
-		list_t sl;
-		for (sl = sessions; sl; sl = sl->next) {
-			session_t *s = sl->data;
-
+		session_t *s;
+		for (s = sessions; s; s = s->next) {
 		/* if sessions mishmash, and it wasn't NULL session, skip this session */
 			if (session != s && session)
 				continue;
@@ -631,7 +629,7 @@
 		w->session = window_current->session;
 
 		if (!w->session && sessions)
-			w->session = (session_t*) sessions->data;
+			w->session = sessions;
 
 		if (!w->floating)
 			window_switch(w->id);
@@ -898,7 +896,7 @@
  */
 
 int window_session_cycle(window_t *w) {
-	list_t l;
+	session_t *s;
 	session_t *new_session = NULL;
 	int once = 0;
 	char *uid;
@@ -926,12 +924,10 @@
 	}
 
 
-	/* find sessions->(...next..)->data == w->session */
-	for (l = sessions; l; l = l->next) {
-		session_t *s = l->data;
-
+	/* find sessions->(...next..) == w->session */
+	for (s = sessions; s; s = s->next) {
 		if (w->session == s) {
-			l = l->next;
+			s = s->next;
 			break;
 		}
 	}
@@ -940,26 +936,24 @@
 		uid = w->target;
 
 again:
-	if (l) {
-		list_t k;
+	if (s) {
+		session_t *k;
 
-		for (k = l; k; k = k->next) {
-			session_t *s = k->data;
-
-			if (s == w->session)
+		for (k = s; k; k = k->next) {
+			if (k == w->session)
 				break;
 
 			once = 1;
 
-			if (config_window_session_allow == 2 || !w->target || (config_window_session_allow != 0 && get_uid(s, uid))) {
-				new_session = s;
+			if (config_window_session_allow == 2 || !w->target || (config_window_session_allow != 0 && get_uid(k, uid))) {
+				new_session = k;
 				break;
 			}
 		}
 	} 
 		
-	if (!new_session && l != sessions) {
-		l = sessions;
+	if (!new_session && s != sessions) {
+		s = sessions;
 		goto again;
 	}
 

Modified: trunk/plugins/feed/rss.c
===================================================================
--- trunk/plugins/feed/rss.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/feed/rss.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -137,31 +137,27 @@
 }
 
 static void rss_set_statusdescr(const char *uid, int status, char *descr) {
-	list_t l;
-	for (l = sessions; l; l = l->next) {
-		session_t *s = l->data;
+	session_t *s;
 
+	for (s = sessions; s; s = s->next) {
 		if (!xstrncmp(s->uid, "rss:", 4))
 			feed_set_statusdescr(userlist_find(s, uid), status, descr);
 	}
 }
 
 static void rss_set_status(const char *uid, int status) {
-	list_t l;
+	session_t *s;
 
-	for (l = sessions; l; l = l->next) {
-		session_t *s = l->data;
-
+	for (s = sessions; s; s = s->next) {
 		if (!xstrncmp(s->uid, "rss:", 4))
 			feed_set_status(userlist_find(s, uid), status);
 	}
 }
 
 static void rss_set_descr(const char *uid, char *descr) {
-	list_t l;
-	for (l = sessions; l; l = l->next) {
-		session_t *s = l->data;
+	session_t *s;
 
+	for (s = sessions; s; s = s->next) {
 		if (!xstrncmp(s->uid, "rss:", 4)) 
 			feed_set_descr(userlist_find(s, uid), descr);
 	}

Modified: trunk/plugins/gg/pubdir.c
===================================================================
--- trunk/plugins/gg/pubdir.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/gg/pubdir.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -258,7 +258,7 @@
 static WATCHER(gg_handle_passwd) {
 	struct gg_http *h = data;
 	struct gg_pubdir *p = NULL;
-	list_t l;
+	session_t *s;
 
 	if (type == 2) {
 		debug("[gg] gg_handle_passwd() timeout\n");
@@ -296,8 +296,7 @@
 	print("passwd");
 
 fail:
-	for (l = sessions; l; l = l->next) {
-		session_t *s = l->data;
+	for (s = sessions; s; s = s->next) {
 		gg_private_t *g;
 		list_t m;
 

Modified: trunk/plugins/gtk/completion.c
===================================================================
--- trunk/plugins/gtk/completion.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/gtk/completion.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -579,10 +579,9 @@
 
 static void sessions_generator(const char *text, int len)
 {
-        list_t l;
+        session_t *v;
 
-        for (l = sessions; l; l = l->next) {
-                session_t *v = l->data;
+        for (v = sessions; v; v = v->next) {
                 if (*text == '-') {
                         if (!xstrncasecmp(text + 1, v->uid, len - 1))
                                 array_add_check(&completions, saprintf("-%s", v->uid), 1);

Modified: trunk/plugins/jabber/commands.c
===================================================================
--- trunk/plugins/jabber/commands.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/jabber/commands.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -1505,7 +1505,6 @@
 	}
 
 	if (match_arg(params[0], 'p', ("put"), 2)) {							/* put */
-		list_t l;
 		const char *id;
 
 		if (!(id = jabber_iq_reg(session, "private_", NULL, "query", "jabber:iq:private"))) {
@@ -1520,6 +1519,7 @@
 /* Synchronize config (?) */
 		if (config) {
 			plugin_t *p;
+			session_t *s;
 
 			for (p = plugins; p; p = p->next) {
 				variable_t *v;
@@ -1560,8 +1560,7 @@
 					}
 				}
 			}
-			for (l = sessions; l; l = l->next) {
-				session_t *s = l->data;
+			for (s = sessions; s; s = s->next) {
 				plugin_t *pl = s->plugin;
 				int i;
 

Modified: trunk/plugins/jabber/jabber.c
===================================================================
--- trunk/plugins/jabber/jabber.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/jabber/jabber.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -1486,13 +1486,11 @@
  */
 
 static QUERY(jabber_pgp_postinit) {
-	list_t l;
+	session_t *s;
 
 	session_postinit = 1;
 
-	for (l = sessions; l; l = l->next) {
-		session_t *s = l->data;
-
+	for (s = sessions; s; s = s->next) {
 		/* check if it's jabber_plugin session [DON'T DO IT ON TLEN SESSIONS] */
 		if (s && s->plugin == &jabber_plugin && !jabber_private(s)->istlen)
 			jabber_gpg_changed(s, NULL);

Modified: trunk/plugins/jabber/jabber_dcc.c
===================================================================
--- trunk/plugins/jabber/jabber_dcc.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/jabber/jabber_dcc.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -220,7 +220,7 @@
 			jabber_dcc_t *p = D->priv;
 
 			char *this_sha1;
-			list_t k;
+			session_t *s;
 
 			if (xstrncmp(D->uid, "xmpp:", 5)) continue; /* we skip not jabber dccs */
 
@@ -228,8 +228,7 @@
 			if (p->sfd != -1) 	{ debug_error("[%s:%d] p->sfd  != -1, already associated ?\n", __FILE__, __LINE__); continue; }	/* we skip associated dccs */
 			if (p->protocol != JABBER_DCC_PROTOCOL_BYTESTREAMS) continue; 								/* we skip not BYTESTREAMS dccs */
 
-			for (k = sessions; k; k = k->next) {
-				session_t *s = k->data;
+			for (s = sessions; s; s = s->next) {
 				jabber_private_t *j = s->priv;
 				char *fulluid;
 

Modified: trunk/plugins/jogger/jogger.c
===================================================================
--- trunk/plugins/jogger/jogger.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/jogger/jogger.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -55,11 +55,9 @@
  * @return	Session pointer or NULL if none match.
  */
 session_t *jogger_session_find_uid(session_t *s, const char *uid) {
-	list_t l;
+	session_t *js;
 
-	for (l = sessions; l; l = l->next) {
-		session_t *js = l->data;
-
+	for (js = sessions; js; js = js->next) {
 		if (js->plugin == &jogger_plugin) {
 			const char *jsw	= session_get(js, "used_session");
 
@@ -112,14 +110,12 @@
 	const char *suid	= *(va_arg(ap, const char **));
 
 	session_t *s		= session_find(suid);
-	list_t l;
+	session_t *js;
 
 	if (!s)
 		return 0;
 
-	for (l = sessions; l; l = l->next) {
-		session_t *js = l->data;
-
+	for (js = sessions; js; js = js->next) {
 		if (js->plugin == &jogger_plugin) {
 			const char *jsw	= session_get(js, "used_session");
 
@@ -210,16 +206,14 @@
 }
 
 static QUERY(jogger_postconfig) {
-	list_t l;
+	session_t *js;
 	void *p = ekg_convert_string_init("UTF-8", NULL, NULL);
 
 	jogger_localize_texts(p);
 	jogger_localize_headers(p);
 	ekg_convert_string_destroy(p);
 
-	for (l = sessions; l; l = l->next) {
-		session_t *js = l->data;
-
+	for (js = sessions; js; js = js->next) {
 		if ((js->plugin == &jogger_plugin) && !session_int_get(js, "userlist_keep"))
 			userlist_free(js);
 	}

Modified: trunk/plugins/ncurses/completion.c
===================================================================
--- trunk/plugins/ncurses/completion.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/ncurses/completion.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -580,10 +580,9 @@
 
 static void sessions_generator(const char *text, int len)
 {
-        list_t l;
+        session_t *v;
 
-        for (l = sessions; l; l = l->next) {
-                session_t *v = l->data;
+        for (v = sessions; v; v = v->next) {
                 if (*text == '-') {
                         if (!xstrncasecmp(text + 1, v->uid, len - 1))
                                 array_add_check(&completions, saprintf("-%s", v->uid), 1);

Modified: trunk/plugins/ncurses/contacts.c
===================================================================
--- trunk/plugins/ncurses/contacts.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/ncurses/contacts.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -229,9 +229,9 @@
 
 	if (all == 1) {
 		list_t l;
+		session_t *s;
 
-		for (l = sessions; l; l = l->next) {
-			session_t *s = l->data;
+		for (s = sessions; s; s = s->next) {
 			list_t lp;
 
 			if (!s->userlist)

Modified: trunk/plugins/perl/common/Session.xs
===================================================================
--- trunk/plugins/perl/common/Session.xs	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/perl/common/Session.xs	2008-03-16 09:28:15 UTC (rev 3910)
@@ -5,10 +5,10 @@
 
 void sessions()
 PREINIT:
-        list_t l;
+        session_t *s;
 PPCODE:
-        for (l = sessions; l; l = l->next) {
-                XPUSHs(sv_2mortal(bless_session( (session_t *) l->data)));
+        for (s = sessions; s; s = s->next) {
+                XPUSHs(sv_2mortal(bless_session( s )));
         }
 
 Ekg2::Session session_add(char *name)

Modified: trunk/plugins/perl/irc/Server.xs
===================================================================
--- trunk/plugins/perl/irc/Server.xs	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/perl/irc/Server.xs	2008-03-16 09:28:15 UTC (rev 3910)
@@ -5,11 +5,11 @@
 
 void servers()
 PREINIT:
-        list_t l;
+        session_t *s;
 PPCODE:
-        for (l = sessions; l; l = l->next) {
-		if (!xstrncasecmp( session_uid_get( (session_t *) l->data), IRC4, 4)) {
-            		XPUSHs(sv_2mortal(bless_server( (session_t *) l->data)));
+        for (s = sessions; s; s = s->next) {
+		if (!xstrncasecmp( session_uid_get( s ), IRC4, 4)) {
+            		XPUSHs(sv_2mortal(bless_server( s )));
 		}
         }
 	

Modified: trunk/plugins/python/python-ekg.c
===================================================================
--- trunk/plugins/python/python-ekg.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/python/python-ekg.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -117,7 +117,7 @@
         ekg_windowObj *pywindow;
 
         if (!w->session && sessions) {
-                w->session = (session_t*) sessions->data;
+                w->session = sessions;
         }
         pywindow = PyObject_New(ekg_windowObj, &ekg_window_type);
         pywindow->w = w;
@@ -472,15 +472,14 @@
 PyObject *ekg_cmd_sessions(PyObject * self, PyObject * pyargs)
 {
         PyObject *list;
-        list_t l;
-        int len = list_count(sessions);
+        session_t *s;
+        int len = LIST_COUNT2(sessions);
 
         list = PyList_New(len);
         len = 0;
 
-        for (l = sessions; l; l = l->next) {
-                session_t *p = l->data;
-                PyList_SetItem(list, len, python_build_session(p->uid));
+        for (s = sessions; s; s = s->next) {
+                PyList_SetItem(list, len, python_build_session(s->uid));
                 len++;
         }
         Py_INCREF(list);

Modified: trunk/plugins/readline/readline-completion.c
===================================================================
--- trunk/plugins/readline/readline-completion.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/readline/readline-completion.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -76,7 +76,7 @@
 
 GENERATOR(sessions_var) {
 	static int len;
-	static list_t el;
+	static session_t *el;
 #warning "GENERATOR: sessions_var TODO"
 	return NULL;
 
@@ -452,16 +452,15 @@
 }
 
 GENERATOR(session) {
-	static list_t l;
+	static session_t *s;
 	static int len;
 
 	if (!state) {
-		l = sessions;
+		s = sessions;
 		len = xstrlen(text);
 	}
 
-	while (l) {
-		session_t *s = l->data;
+	while (s) {
 		if (*text == '-') {
 			if (!xstrncasecmp(text+1, s->uid, len-1))
 				return saprintf("-%s", s->uid);
@@ -473,7 +472,7 @@
 			if (!xstrncasecmp(text, s->alias, len)) 
 				return xstrdup(s->alias);
 		}
-	}
+	} /* XXX: shouldn't we iterate or do sth here? I think can get into deadlock */
 	return NULL;
 }
 

Modified: trunk/plugins/xmsg/xmsg.c
===================================================================
--- trunk/plugins/xmsg/xmsg.c	2008-03-16 00:19:48 UTC (rev 3909)
+++ trunk/plugins/xmsg/xmsg.c	2008-03-16 09:28:15 UTC (rev 3910)
@@ -432,12 +432,9 @@
 		xerrn("inotify read() failed");
 	
 	for (evp = ev; n > 0; n -= (evp->len + sizeof(struct inotify_event)), evp = (void*) evp + (evp->len + sizeof(struct inotify_event))) {
-		list_t sp;
-		session_t *s = NULL;
+		session_t *s;
 
-		for (sp = sessions; sp; sp = sp->next) {
-			s = sp->data;
-
+		for (s = sessions; s; s = s->next) {
 			if (s && (s->priv == (void*) (long int) evp->wd) && !xstrncasecmp(session_uid_get(s), "xmsg:", 5))
 				break;
 		}
@@ -452,9 +449,7 @@
 			c++;
 		
 		if ((evp->mask & IN_Q_OVERFLOW) || ((config_maxinotifycount > 0) && c >= config_maxinotifycount)) {
-			for (sp = sessions; sp; sp = sp->next) {
-				s = sp->data;
-
+			for (s = sessions; s; s = s->next) {
 				if (s && !xstrncasecmp(session_uid_get(s), "xmsg:", 5)) {
 					const int i = session_int_get(s, "oneshot_resume_timer");
 					if (!timer_remove_session(s, "o"))
@@ -480,12 +475,9 @@
 
 static QUERY(xmsg_handle_sigusr)
 {
-	list_t sp;
 	session_t *s;
 
-	for (sp = sessions; sp; sp = sp->next) {
-		s = sp->data;
-
+	for (s = sessions; s; s = s->next) {
 		if (!timer_remove_session(s, "o"))
 			xdebug("old oneshot resume timer removed");
 		if (s && !xstrncasecmp(session_uid_get(s), "xmsg:", 5))



Więcej informacji o liście dyskusyjnej ekg2-commit