diff src/itemlist.c @ 43:2842f50feb55 noffle

[svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h, control.c, control.h, database.c, database.h, dynamicstring.c, dynamicstring.h, fetch.c, fetch.h, fetchlist.c, fetchlist.h, group.c, group.h, itemlist.c, itemlist.h, lock.c, lock.h, log.c, log.h, noffle.c, online.c, online.h, outgoing.c, outgoing.h, over.c, over.h, post.c, post.h, protocol.c, protocol.h, pseudo.c, pseudo.h, request.c, request.h, server.c, server.h, util.c, util.h, wildmat.c, wildmat.h: Moved files to the subdirectory src/ * Makefile.am, acconfig.h, configure.in, docs/Makefile.am, src/Makefile.am, Makefile.in, aclocal.m4, config.h.in, configure, install-sh, missing, mkinstalldirs, stamp-h.in, docs/Makefile.in, src/Makefile.in: Added files. They are used by aclocal, autoheader, autoconf and automake. * src/config.c, src/config.h: Renamed to configfile.c and configfile.h, because configure will generate a config.h file itself. * src/client.c, src/content.c, src/database.c, src/fetch.c, src/fetchlist.c, src/group.c, src/lock.c, src/noffle.c, src/online.c, src/outgoing.c, src/over.c, src/pseudo.c, src/request.c, src/server.c, src/util.c: Changed '#include "config.h"' to '#include "configfile.h"'. * src/client.c, src/content.c, src/database.c, src/fetch.c, src/fetchlist.c, src/group.c, src/lock.c, src/online.c, src/outgoing.c, src/post.c, src/protocol.c, src/request.c, src/server.c: Files now #include <config.h>. Added missing <stdio.h>. This removes the warnings about snprintf() not being declared. * Makefile: Removed. This is now generated by configure.
author uh1763
date Fri, 05 May 2000 22:45:56 +0100
parents
children 32ba1198c6fa
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/itemlist.c	Fri May 05 22:45:56 2000 +0100
@@ -0,0 +1,123 @@
+/*
+  itemlist.c
+
+  $Id: itemlist.c 49 2000-05-05 21:45:56Z uh1763 $
+*/
+
+#include "itemlist.h"
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+#include "common.h"
+#include "log.h"
+
+struct ItemList
+{
+    char *list;
+    char *separators;
+    char *next;
+    size_t count;
+};
+
+/* Make a new item list. */
+ItemList *
+new_Itl( const char *list, const char *separators )
+{
+    ItemList * res;
+    char *p;
+    Bool inItem;
+
+    res = (ItemList *) malloc( sizeof( ItemList ) );
+    if ( res == NULL )
+    {
+	Log_err( "Malloc of ItemList failed." );
+	exit( EXIT_FAILURE );
+    }
+    
+    res->list = (char *) malloc ( strlen(list) + 2 );
+    if ( res->list == NULL )
+    {
+	Log_err( "Malloc of ItemList.list failed." );
+	exit( EXIT_FAILURE );
+    }
+    strcpy( res->list, list );
+
+    if (  ( res->separators = strdup( separators ) ) == NULL )
+    {
+	Log_err( "Malloc of ItemList.separators failed." );
+	exit( EXIT_FAILURE );
+    }
+
+    res->count = 0;
+    res->next = res->list;
+
+    /* Separate items into strings and have final zero-length string. */
+    for( p = res->list, inItem = FALSE; *p != '\0'; p++ )
+    {
+	Bool isSep = ( strchr( separators, p[ 0 ] ) != NULL );
+	
+	if ( inItem )
+	{
+	    if ( isSep )
+	    {
+		p[ 0 ] = '\0';
+		inItem = FALSE;
+		res->count++;
+	    }
+	}
+	else
+	{
+	    if ( ! isSep )
+		inItem = TRUE;
+	}
+    }
+    if ( inItem )
+	res->count++;
+    p[ 1 ] = '\0';
+    return res;
+}
+
+/* Delete an item list. */
+void
+del_Itl( ItemList *self )
+{
+    if ( self == NULL )
+	return;
+    free( self->list );
+    free( self->separators );
+    free( self );
+}
+
+/* Get first item. */
+const char *
+Itl_first( ItemList *self)
+{
+    self->next = self->list;
+    return Itl_next( self );
+}
+
+/* Get next item or NULL. */
+const char *
+Itl_next( ItemList *self )
+{
+    const char *res = self->next;
+
+    if ( res[ 0 ] == '\0' )
+	return NULL;
+
+    while ( strchr( self->separators, res[ 0 ] ) != NULL )
+	res++;
+
+    if ( res[ 0 ] == '\0' && res[ 1 ] == '\0' )
+	return NULL;
+
+    self->next += strlen( res ) + 1;
+    return res;
+}
+
+/* Get count of items in list. */
+size_t
+Itl_count( const ItemList *self )
+{
+    return self->count;
+}