Mercurial > noffle
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 42:2467ff423c15 | 43:2842f50feb55 |
|---|---|
| 1 /* | |
| 2 fetchlist.c | |
| 3 | |
| 4 $Id: fetchlist.c 49 2000-05-05 21:45:56Z uh1763 $ | |
| 5 */ | |
| 6 | |
| 7 #if HAVE_CONFIG_H | |
| 8 #include <config.h> | |
| 9 #endif | |
| 10 | |
| 11 #include <stdio.h> | |
| 12 #include "fetchlist.h" | |
| 13 #include "configfile.h" | |
| 14 #include "log.h" | |
| 15 #include "util.h" | |
| 16 | |
| 17 struct Elem | |
| 18 { | |
| 19 Str name; | |
| 20 FetchMode mode; | |
| 21 }; | |
| 22 | |
| 23 static struct Fetchlist | |
| 24 { | |
| 25 struct Elem *elem; | |
| 26 int size; | |
| 27 int max; | |
| 28 } fetchlist = { NULL, 0, 0 }; | |
| 29 | |
| 30 static const char * | |
| 31 getFile( void ) | |
| 32 { | |
| 33 static Str file; | |
| 34 snprintf( file, MAXCHAR, "%s/fetchlist", Cfg_spoolDir() ); | |
| 35 return file; | |
| 36 } | |
| 37 | |
| 38 static void | |
| 39 clearList( void ) | |
| 40 { | |
| 41 fetchlist.size = 0; | |
| 42 } | |
| 43 | |
| 44 static int | |
| 45 compareElem( const void *elem1, const void *elem2 ) | |
| 46 { | |
| 47 struct Elem* e1 = (struct Elem*)elem1; | |
| 48 struct Elem* e2 = (struct Elem*)elem2; | |
| 49 return strcmp( e1->name, e2->name ); | |
| 50 } | |
| 51 | |
| 52 static struct Elem * | |
| 53 searchElem( const char *name ) | |
| 54 { | |
| 55 int i; | |
| 56 | |
| 57 for ( i = 0; i < fetchlist.size; ++i ) | |
| 58 if ( strcmp( name, fetchlist.elem[ i ].name ) == 0 ) | |
| 59 return &fetchlist.elem[ i ]; | |
| 60 return NULL; | |
| 61 } | |
| 62 | |
| 63 static void | |
| 64 appGrp( const char *name, FetchMode mode ) | |
| 65 { | |
| 66 struct Elem elem; | |
| 67 | |
| 68 if ( fetchlist.max < fetchlist.size + 1 ) | |
| 69 { | |
| 70 if ( ! ( fetchlist.elem | |
| 71 = realloc( fetchlist.elem, | |
| 72 ( fetchlist.max + 50 ) | |
| 73 * sizeof( fetchlist.elem[ 0 ] ) ) ) ) | |
| 74 { | |
| 75 Log_err( "Could not realloc fetchlist" ); | |
| 76 exit( EXIT_FAILURE ); | |
| 77 } | |
| 78 fetchlist.max += 50; | |
| 79 } | |
| 80 strcpy( elem.name, name ); | |
| 81 elem.mode = mode; | |
| 82 fetchlist.elem[ fetchlist.size++ ] = elem; | |
| 83 } | |
| 84 | |
| 85 void | |
| 86 Fetchlist_read( void ) | |
| 87 { | |
| 88 FILE *f; | |
| 89 const char *file = getFile(); | |
| 90 char *p; | |
| 91 FetchMode mode = OVER; | |
| 92 Bool valid; | |
| 93 int ret; | |
| 94 Str line, grp, modeStr; | |
| 95 | |
| 96 Log_dbg( "Reading %s", file ); | |
| 97 clearList(); | |
| 98 if ( ! ( f = fopen( file, "r" ) ) ) | |
| 99 { | |
| 100 Log_inf( "No file %s", file ); | |
| 101 return; | |
| 102 } | |
| 103 while ( fgets( line, MAXCHAR, f ) ) | |
| 104 { | |
| 105 p = Utl_stripWhiteSpace( line ); | |
| 106 if ( *p == '#' || *p == '\0' ) | |
| 107 continue; | |
| 108 ret = sscanf( p, "%s %s", grp, modeStr ); | |
| 109 valid = TRUE; | |
| 110 if ( ret < 1 || ret > 2 ) | |
| 111 valid = FALSE; | |
| 112 else if ( ret >= 2 ) | |
| 113 { | |
| 114 if ( strcmp( modeStr, "full" ) == 0 ) | |
| 115 mode = FULL; | |
| 116 else if ( strcmp( modeStr, "thread" ) == 0 ) | |
| 117 mode = THREAD; | |
| 118 else if ( strcmp( modeStr, "over" ) == 0 ) | |
| 119 mode = OVER; | |
| 120 else | |
| 121 valid = FALSE; | |
| 122 } | |
| 123 if ( ! valid ) | |
| 124 { | |
| 125 Log_err( "Invalid entry in %s: %s", file, line ); | |
| 126 continue; | |
| 127 } | |
| 128 appGrp( grp, mode ); | |
| 129 } | |
| 130 fclose( f ); | |
| 131 } | |
| 132 | |
| 133 Bool | |
| 134 Fetchlist_write( void ) | |
| 135 { | |
| 136 int i; | |
| 137 FILE *f; | |
| 138 const char *file = getFile(); | |
| 139 const char *modeStr = ""; | |
| 140 | |
| 141 qsort( fetchlist.elem, fetchlist.size, sizeof( fetchlist.elem[ 0 ] ), | |
| 142 compareElem ); | |
| 143 if ( ! ( f = fopen( file, "w" ) ) ) | |
| 144 { | |
| 145 Log_err( "Could not open %s for writing", file ); | |
| 146 return FALSE; | |
| 147 } | |
| 148 for ( i = 0; i < fetchlist.size; ++i ) | |
| 149 { | |
| 150 switch ( fetchlist.elem[ i ].mode ) | |
| 151 { | |
| 152 case FULL: | |
| 153 modeStr = "full"; break; | |
| 154 case THREAD: | |
| 155 modeStr = "thread"; break; | |
| 156 case OVER: | |
| 157 modeStr = "over"; break; | |
| 158 } | |
| 159 fprintf( f, "%s %s\n", fetchlist.elem[ i ].name, modeStr ); | |
| 160 } | |
| 161 fclose( f ); | |
| 162 return TRUE; | |
| 163 } | |
| 164 | |
| 165 int | |
| 166 Fetchlist_size( void ) | |
| 167 { | |
| 168 return fetchlist.size; | |
| 169 } | |
| 170 | |
| 171 Bool | |
| 172 Fetchlist_contains( const char *name ) | |
| 173 { | |
| 174 return ( searchElem( name ) != NULL ); | |
| 175 } | |
| 176 | |
| 177 Bool | |
| 178 Fetchlist_element( const char **name, FetchMode *mode, int index ) | |
| 179 { | |
| 180 if ( index < 0 || index >= fetchlist.size ) | |
| 181 return FALSE; | |
| 182 *name = fetchlist.elem[ index ].name; | |
| 183 *mode = fetchlist.elem[ index ].mode; | |
| 184 return TRUE; | |
| 185 } | |
| 186 | |
| 187 Bool | |
| 188 Fetchlist_add( const char *name, FetchMode mode ) | |
| 189 { | |
| 190 struct Elem *elem = searchElem( name ); | |
| 191 if ( elem == NULL ) | |
| 192 { | |
| 193 appGrp( name, mode ); | |
| 194 return TRUE; | |
| 195 } | |
| 196 strcpy( elem->name, name ); | |
| 197 elem->mode = mode; | |
| 198 return FALSE; | |
| 199 } | |
| 200 | |
| 201 Bool | |
| 202 Fetchlist_remove( const char *name ) | |
| 203 { | |
| 204 struct Elem *elem = searchElem( name ); | |
| 205 if ( elem == NULL ) | |
| 206 return FALSE; | |
| 207 *elem = fetchlist.elem[ fetchlist.size - 1 ]; | |
| 208 --fetchlist.size; | |
| 209 return TRUE; | |
| 210 } |
