Mercurial > noffle
view src/fetchlist.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 source
/* fetchlist.c $Id: fetchlist.c 49 2000-05-05 21:45:56Z uh1763 $ */ #if HAVE_CONFIG_H #include <config.h> #endif #include <stdio.h> #include "fetchlist.h" #include "configfile.h" #include "log.h" #include "util.h" struct Elem { Str name; FetchMode mode; }; static struct Fetchlist { struct Elem *elem; int size; int max; } fetchlist = { NULL, 0, 0 }; static const char * getFile( void ) { static Str file; snprintf( file, MAXCHAR, "%s/fetchlist", Cfg_spoolDir() ); return file; } static void clearList( void ) { fetchlist.size = 0; } static int compareElem( const void *elem1, const void *elem2 ) { struct Elem* e1 = (struct Elem*)elem1; struct Elem* e2 = (struct Elem*)elem2; return strcmp( e1->name, e2->name ); } static struct Elem * searchElem( const char *name ) { int i; for ( i = 0; i < fetchlist.size; ++i ) if ( strcmp( name, fetchlist.elem[ i ].name ) == 0 ) return &fetchlist.elem[ i ]; return NULL; } static void appGrp( const char *name, FetchMode mode ) { struct Elem elem; if ( fetchlist.max < fetchlist.size + 1 ) { if ( ! ( fetchlist.elem = realloc( fetchlist.elem, ( fetchlist.max + 50 ) * sizeof( fetchlist.elem[ 0 ] ) ) ) ) { Log_err( "Could not realloc fetchlist" ); exit( EXIT_FAILURE ); } fetchlist.max += 50; } strcpy( elem.name, name ); elem.mode = mode; fetchlist.elem[ fetchlist.size++ ] = elem; } void Fetchlist_read( void ) { FILE *f; const char *file = getFile(); char *p; FetchMode mode = OVER; Bool valid; int ret; Str line, grp, modeStr; Log_dbg( "Reading %s", file ); clearList(); if ( ! ( f = fopen( file, "r" ) ) ) { Log_inf( "No file %s", file ); return; } while ( fgets( line, MAXCHAR, f ) ) { p = Utl_stripWhiteSpace( line ); if ( *p == '#' || *p == '\0' ) continue; ret = sscanf( p, "%s %s", grp, modeStr ); valid = TRUE; if ( ret < 1 || ret > 2 ) valid = FALSE; else if ( ret >= 2 ) { if ( strcmp( modeStr, "full" ) == 0 ) mode = FULL; else if ( strcmp( modeStr, "thread" ) == 0 ) mode = THREAD; else if ( strcmp( modeStr, "over" ) == 0 ) mode = OVER; else valid = FALSE; } if ( ! valid ) { Log_err( "Invalid entry in %s: %s", file, line ); continue; } appGrp( grp, mode ); } fclose( f ); } Bool Fetchlist_write( void ) { int i; FILE *f; const char *file = getFile(); const char *modeStr = ""; qsort( fetchlist.elem, fetchlist.size, sizeof( fetchlist.elem[ 0 ] ), compareElem ); if ( ! ( f = fopen( file, "w" ) ) ) { Log_err( "Could not open %s for writing", file ); return FALSE; } for ( i = 0; i < fetchlist.size; ++i ) { switch ( fetchlist.elem[ i ].mode ) { case FULL: modeStr = "full"; break; case THREAD: modeStr = "thread"; break; case OVER: modeStr = "over"; break; } fprintf( f, "%s %s\n", fetchlist.elem[ i ].name, modeStr ); } fclose( f ); return TRUE; } int Fetchlist_size( void ) { return fetchlist.size; } Bool Fetchlist_contains( const char *name ) { return ( searchElem( name ) != NULL ); } Bool Fetchlist_element( const char **name, FetchMode *mode, int index ) { if ( index < 0 || index >= fetchlist.size ) return FALSE; *name = fetchlist.elem[ index ].name; *mode = fetchlist.elem[ index ].mode; return TRUE; } Bool Fetchlist_add( const char *name, FetchMode mode ) { struct Elem *elem = searchElem( name ); if ( elem == NULL ) { appGrp( name, mode ); return TRUE; } strcpy( elem->name, name ); elem->mode = mode; return FALSE; } Bool Fetchlist_remove( const char *name ) { struct Elem *elem = searchElem( name ); if ( elem == NULL ) return FALSE; *elem = fetchlist.elem[ fetchlist.size - 1 ]; --fetchlist.size; return TRUE; }