comparison src/request.c @ 124:cfad9678e286 noffle

[svn] Applied patch from M.Nalis: Modify Req_add() to append to requested/news.serv.er file each MsgID (and do not clean dirty flag, because otherwise writeRequestfile() would nuke us when overwriting file!).
author enz
date Sat, 22 Jul 2000 10:04:20 +0100
parents 125d79c9e586
children fed1334d766b
comparison
equal deleted inserted replaced
123:ec190bad201b 124:cfad9678e286
1 /* 1 /*
2 request.c 2 request.c
3 3
4 Collection of articles that are marked for download. 4 Collection of articles that are marked for download.
5 5
6 $Id: request.c 60 2000-05-09 22:28:38Z uh1763 $ 6 $Id: request.c 178 2000-07-22 09:04:20Z enz $
7 */ 7 */
8 8
9 #if HAVE_CONFIG_H 9 #if HAVE_CONFIG_H
10 #include <config.h> 10 #include <config.h>
11 #endif 11 #endif
63 /* local functions */ 63 /* local functions */
64 static Reqserv* newReqserv (const char* serv); 64 static Reqserv* newReqserv (const char* serv);
65 static Bool getReqserv (const char* serv, Reqserv** rsz); 65 static Bool getReqserv (const char* serv, Reqserv** rsz);
66 static void fileRequest (Str file, const char *serv); 66 static void fileRequest (Str file, const char *serv);
67 static char** searchMsgId (const Reqserv * rs, const char *msgId); 67 static char** searchMsgId (const Reqserv * rs, const char *msgId);
68 static void storeMsgId (Reqserv* rs, const char* msgId); 68 static Bool storeMsgId (Reqserv* rs, const char* msgId);
69 static Bool readRequestfile (const char* serv, Reqserv** rsz); 69 static Bool readRequestfile (const char* serv, Reqserv** rsz);
70 static time_t get_mtime (const char* serv); 70 static time_t get_mtime (const char* serv);
71 71
72 /* read modification time of request file */ 72 /* read modification time of request file */
73 static time_t get_mtime(const char* serv) 73 static time_t get_mtime(const char* serv)
176 return FALSE; 176 return FALSE;
177 return searchMsgId(rs, msgId) ? TRUE : FALSE; 177 return searchMsgId(rs, msgId) ? TRUE : FALSE;
178 } 178 }
179 179
180 180
181 static void storeMsgId(Reqserv* rs, const char* msgId) 181 static Bool storeMsgId(Reqserv* rs, const char* msgId)
182 { 182 {
183 char* msgid; 183 char* msgid;
184 184
185 if (searchMsgId(rs, msgId)) 185 if (searchMsgId(rs, msgId))
186 /* already recorded */ 186 /* already recorded */
187 return; 187 return FALSE;
188 188
189 msgid = strcpy(malloc(strlen(msgId)+1), msgId); 189 msgid = strcpy(malloc(strlen(msgId)+1), msgId);
190 190
191 if (rs->reql_length >= rs->reql_capacity) { 191 if (rs->reql_length >= rs->reql_capacity) {
192 int c1 = rs->reql_capacity*2 + 10; 192 int c1 = rs->reql_capacity*2 + 10;
194 rs->reql_capacity = c1; 194 rs->reql_capacity = c1;
195 } 195 }
196 196
197 *(rs->reql + rs->reql_length++) = msgid; 197 *(rs->reql + rs->reql_length++) = msgid;
198 rs->dirty = TRUE; 198 rs->dirty = TRUE;
199 return TRUE;
200 }
201
202 static Bool
203 appRequest (Reqserv* rs, const char *msgId)
204 {
205 Str filename;
206 FILE* file;
207
208 fileRequest(filename, rs->serv);
209 Log_dbg("appending to request file %s", filename);
210
211 if (Log_check((file = fopen(filename, "a")) != 0,
212 "could not open %s for appending: %s",
213 filename, strerror(errno)))
214 return FALSE;
215
216 if (Log_check( fputs(msgId, file) != EOF
217 && fputs("\n", file) != EOF,
218 "write error: %s", strerror(errno)))
219 return FALSE;
220
221 if (Log_check(fclose(file) != EOF,
222 "could not close %s properly: %s\n",
223 filename, strerror(errno)))
224 return FALSE;
225
226 return TRUE;
199 } 227 }
200 228
201 229
202 /* Add request for message "msgIg" from server "serv". Return TRUE iff 230 /* Add request for message "msgIg" from server "serv". Return TRUE iff
203 successful. 231 successful.
208 ASSERT( is_open ); 236 ASSERT( is_open );
209 Log_dbg( "Marking %s on %s for download", msgId, serv ); 237 Log_dbg( "Marking %s on %s for download", msgId, serv );
210 238
211 if (getReqserv(serv, &rs) == FALSE) 239 if (getReqserv(serv, &rs) == FALSE)
212 return FALSE; 240 return FALSE;
213 storeMsgId(rs, msgId); 241 if (storeMsgId(rs, msgId) == FALSE) /* already recorded */
214 return TRUE; 242 return TRUE;
243 return appRequest(rs, msgId);
215 } 244 }
216 245
217 static Bool 246 static Bool
218 readLn( Str line, FILE* f ) 247 readLn( Str line, FILE* f )
219 { 248 {