[ekg2-commit] r3909 - trunk/ekg: trunk/ekg/stuff.c

SVN commit svn w toxygen.net
Nie, 16 Mar 2008, 01:19:48 CET


Author: peres
Date: 2008-03-16 01:19:48 +0100 (Sun, 16 Mar 2008)
New Revision: 3909

Modified:
   trunk/ekg/stuff.c
Log:

ekg_converters to lists3.



Modified: trunk/ekg/stuff.c
===================================================================
--- trunk/ekg/stuff.c	2008-03-15 22:26:13 UTC (rev 3908)
+++ trunk/ekg/stuff.c	2008-03-16 00:19:48 UTC (rev 3909)
@@ -89,9 +89,6 @@
 struct timer *timers = NULL;
 struct conference *conferences = NULL;
 newconference_t *newconferences = NULL;
-#ifdef HAVE_ICONV
-static list_t ekg_converters = NULL;	/**< list for internal use of ekg_convert_string_*() */
-#endif
 
 struct buffer_info buffer_debug = { NULL, 0, DEBUG_MAX_LINES };		/**< debug buffer */
 struct buffer_info buffer_speech = { NULL, 0, 50 };		/**< speech buffer */
@@ -2941,14 +2938,18 @@
  * Used internally by EKG2, contains information about one initialized character converter.
  */
 struct ekg_converter {
-	iconv_t		cd;	/**< Magic thing given to iconv, always not NULL (else we won't alloc struct) */
-	iconv_t		rev;	/**< Reverse conversion thing, can be NULL */
-	char		*from;	/**< Input encoding (duped), always not NULL (even on console_charset) */
-	char		*to;	/**< Output encoding (duped), always not NULL (even on console_charset) */
-	int		used;	/**< Use counter - incr on _init(), decr on _destroy(), free if 0 */
+	struct ekg_converter *next;
+
+	iconv_t		cd;		/**< Magic thing given to iconv, always not NULL (else we won't alloc struct) */
+	iconv_t		rev;		/**< Reverse conversion thing, can be NULL */
+	char		*from;		/**< Input encoding (duped), always not NULL (even on console_charset) */
+	char		*to;		/**< Output encoding (duped), always not NULL (even on console_charset) */
+	int		used;		/**< Use counter - incr on _init(), decr on _destroy(), free if 0 */
 	int		rev_used;	/**< Like above, but for rev; if !rev, value undefined */
-	int		is_utf;	/**< Used internally for mutt_convert_string() */
+	int		is_utf;		/**< Used internally for mutt_convert_string() */
 };
+
+static struct ekg_converter *ekg_converters = NULL;	/**< list for internal use of ekg_convert_string_*() */
 #endif
 
 /**
@@ -2967,7 +2968,7 @@
  */
 void *ekg_convert_string_init(const char *from, const char *to, void **rev) {
 #ifdef HAVE_ICONV
-	list_t lp;
+	struct ekg_converter *p;
 
 	if (!from)
 		from	= config_console_charset;
@@ -2980,9 +2981,7 @@
 	}
 
 		/* maybe we've already got some converter for this charsets */
-	for (lp = ekg_converters; lp; lp = lp->next) {
-		struct ekg_converter *p = lp->data;
-
+	for (p = ekg_converters; p; p = p->next) {
 		if (!xstrcasecmp(from, p->from) && !xstrcasecmp(to, p->to)) {
 			p->used++;
 			if (rev) {
@@ -3041,7 +3040,7 @@
 				c->is_utf = 2;
 			else if (!xstrcasecmp(c->from, "UTF-8"))
 				c->is_utf = 1;
-			list_add(&ekg_converters, c);
+			LIST_ADD2(&ekg_converters, c);
 		}
 
 		return cd;
@@ -3067,14 +3066,12 @@
 
 void ekg_convert_string_destroy(void *ptr) {
 #ifdef HAVE_ICONV
-	list_t lp;
+	struct ekg_converter *c;
 
 	if (!ptr) /* we can be called with NULL ptr */
 		return;
 
-	for (lp = ekg_converters; lp; lp = lp->next) {
-		struct ekg_converter *c = lp->data;
-
+	for (c = ekg_converters; c; c = c->next) {
 		if (c->cd == ptr)
 			c->used--;
 		else if (c->rev == ptr) /* ptr won't be NULL here */
@@ -3101,7 +3098,7 @@
 			} else { /* else, free it */
 				xfree(c->from);
 				xfree(c->to);
-				list_remove(&ekg_converters, c, 1);
+				LIST_REMOVE2(&ekg_converters, c, NULL);
 			}
 		}
 		
@@ -3128,16 +3125,14 @@
 
 char *ekg_convert_string_p(const char *ps, void *ptr) {
 #ifdef HAVE_ICONV
-	list_t lp;
+	struct ekg_converter *c;
 	int is_utf = 0;
 
 	if (!ps || !*ps || !ptr)
 		return NULL;
 
 		/* XXX, maybe some faster way? any ideas? */
-	for (lp = ekg_converters; lp; lp = lp->next) {
-		const struct ekg_converter *c = lp->data;
-
+	for (c = ekg_converters; c; c = c->next) {
 		if (c->cd == ptr)
 			is_utf = c->is_utf;
 		else if (c->rev == ptr)
@@ -3188,10 +3183,9 @@
 int ekg_converters_display(int quiet)
 {
 #ifdef HAVE_ICONV
-	list_t l;
+	struct ekg_converter *c;
 
-	for (l = ekg_converters; l; l = l->next) {
-		struct ekg_converter *c = l->data;
+	for (c = ekg_converters; c; c = c->next) {
 		/* cd, rev, from, to, used, rev_used, is_utf */
 
 		printq("iconv_list", c->from, c->to, itoa(c->used), itoa(c->rev_used));



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