annotate fetchlist.c @ 32:45ddd5e72164 noffle

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