comparison src/post.c @ 223:ffb1848a39db noffle

[svn] * src/util.c: Improve (correct) error detection when updating timestamp file. * src/content.h, src/content.c: Return Boolean success/fail from Cont_write. Also ensure cont.first isn't polluted in the event of a failed update. * src/client.c,src/control.c,src/fetch.c,src/noffle.c,src/post.c, src/pseudo.c: If Cont_write fails, don't do actions that need it to have worked. Typically, don't update first and last article numbers in group database. * src/server.c: If groupinfo.lastupdate is unreadable or corrupt, spot this and report it and give an explicit error when processing NNTP NEWGROUPS command.
author bears
date Sun, 09 Dec 2001 12:31:57 +0000
parents bf290632d29e
children fbff73fe5b40
comparison
equal deleted inserted replaced
222:bf290632d29e 223:ffb1848a39db
1 /* 1 /*
2 post.c 2 post.c
3 3
4 $Id: post.c 341 2001-12-09 11:32:31Z bears $ 4 $Id: post.c 342 2001-12-09 12:31:57Z bears $
5 */ 5 */
6 6
7 #if HAVE_CONFIG_H 7 #if HAVE_CONFIG_H
8 #include <config.h> 8 #include <config.h>
9 #endif 9 #endif
95 Log_dbg( LOG_DBG_POST, "Adding '%s' to Xref of '%s'", grp, msgId ); 95 Log_dbg( LOG_DBG_POST, "Adding '%s' to Xref of '%s'", grp, msgId );
96 snprintf( t, MAXCHAR, "%s %s:%i", xref, grp, Ov_numb( over ) ); 96 snprintf( t, MAXCHAR, "%s %s:%i", xref, grp, Ov_numb( over ) );
97 Db_setXref( msgId, t ); 97 Db_setXref( msgId, t );
98 } 98 }
99 99
100 Cont_write(); 100 if ( Cont_write() )
101 Grp_setFirstLast( Cont_grp(), Cont_first(), Cont_last() ); 101 {
102 Grp_setLastPostTime( Cont_grp() ); 102 Grp_setFirstLast( Cont_grp(), Cont_first(), Cont_last() );
103 return TRUE; 103 Grp_setLastPostTime( Cont_grp() );
104 return TRUE;
105 }
106 else
107 return FALSE;
104 } 108 }
105 109
106 static Bool 110 static Bool
107 checkPostableNewsgroup( void ) 111 checkPostableNewsgroup( void )
108 { 112 {
177 int sigLines; 181 int sigLines;
178 182
179 s = new_DynStr( 10000 ); 183 s = new_DynStr( 10000 );
180 article.text = s; 184 article.text = s;
181 185
182 memset( &article.over, 0, sizeof( article.over ) );
183 replyToFound = pathFound = orgFound = FALSE; 186 replyToFound = pathFound = orgFound = FALSE;
184 187
185 /* Grab header lines first, getting overview info as we go. */ 188 /* Grab header lines first, getting overview info as we go. */
186 while ( ( p = Utl_getHeaderLn( line, p ) ) != NULL 189 while ( ( p = Utl_getHeaderLn( line, p ) ) != NULL
187 && line[ 0 ] != '\0' 190 && line[ 0 ] != '\0'
537 } 540 }
538 541
539 return postExternal() && err; 542 return postExternal() && err;
540 } 543 }
541 544
545
546 static void
547 clearArticleInfo( void )
548 {
549 article.text = NULL;
550 article.newsgroups = NULL;
551 article.control = NULL;
552 article.approved = FALSE;
553 article.posted = FALSE;
554 article.flags = 0;
555 memset( &article.over, 0, sizeof( article.over ) );
556 }
557
542 /* Register an article for posting. */ 558 /* Register an article for posting. */
543 Bool 559 Bool
544 Post_open( const char * text, unsigned flags ) 560 Post_open( const char * text, unsigned flags )
545 { 561 {
546 if ( article.text != NULL ) 562 if ( article.text != NULL )
547 { 563 {
548 Log_err( "Busy article in Post_open." ); 564 Log_err( "Busy article in Post_open." );
549 return FALSE; 565 return FALSE;
550 } 566 }
551 567
568 clearArticleInfo();
569
552 article.flags = flags; 570 article.flags = flags;
553
554 if ( ! getArticleText( text ) ) 571 if ( ! getArticleText( text ) )
555 return FALSE; 572 return FALSE;
556 573
557 if ( Db_contains( article.over.msgId ) ) 574 if ( Db_contains( article.over.msgId ) )
558 { 575 {
599 if ( article.control != NULL ) 616 if ( article.control != NULL )
600 { 617 {
601 del_Itl( article.control ); 618 del_Itl( article.control );
602 article.control = NULL; 619 article.control = NULL;
603 } 620 }
604 article.approved = FALSE; 621 }
605 article.posted = FALSE; 622
606 } 623
607
608