Mercurial > noffle
view src/control.c @ 193:021d145e34e9 noffle
[svn] * src/fetch.c: Only leave articles in the requested list if the error
fetching them was fatal. Otherwise article requests will accumulate
indefinitely (e.g retrieving through NNTPcache when it can't find
the body of an article, now or event. Yes, this happened to me; I
had nearly 2000 requests backed up and never being cleared).
* src/group.c: The weekend's change introduced code that causes a bus
error on Sparc ( *(time_t *)p = xxx ). Replace with a safe memcpy,
and also use memcpy when reading the Entry and time items to remove
warnings on Sparc compilation.
author | bears |
---|---|
date | Mon, 22 Oct 2001 14:41:43 +0100 |
parents | fed1334d766b |
children | 24d4cd032da5 |
line wrap: on
line source
/* control.c $Id: control.c 300 2001-08-05 08:24:22Z bears $ */ #if HAVE_CONFIG_H #include <config.h> #endif #include "control.h" #include <stdio.h> #include "common.h" #include "content.h" #include "database.h" #include "group.h" #include "itemlist.h" #include "log.h" #include "outgoing.h" #include "portable.h" int Ctrl_cancel( const char *msgId ) { ItemList *refs; const char *ref; Str server; Bool seen = FALSE; int res = CANCEL_OK; /* See if in outgoing and zap if so. */ if ( Out_find( msgId, server ) ) { Out_remove( server, msgId ); Log_inf( "'%s' cancelled from outgoing queue for '%s'.\n", msgId, server ); seen = TRUE; } if ( ! Db_contains( msgId ) ) { Log_inf( "Cancel: '%s' not in database.", msgId ); return seen ? CANCEL_OK : CANCEL_NO_SUCH_MSG; } /* Retrieve the Xrefs, remove from each group and then remove from the database. */ refs = new_Itl( Db_xref( msgId ), " " ); for( ref = Itl_first( refs ); ref != NULL; ref = Itl_next( refs ) ) { Str grp; int no; if ( sscanf( ref, "%s:%d", grp, &no ) != 2 ) break; if ( Grp_exists( grp ) ) { Cont_read( grp ); Cont_delete( no ); Cont_write(); if ( ! Grp_local( grp ) && ! seen ) res = CANCEL_NEEDS_MSG; Log_dbg( LOG_DBG_CONTROL, "Removed '%s' from group '%s'.", msgId, grp ); } else { Log_inf( "Group '%s' in Xref for '%s' not found.", grp, msgId ); } } del_Itl( refs ); Db_delete( msgId ); Log_inf( "Message '%s' cancelled.", msgId ); return res; }