annotate src/content.c @ 288:c02c4eb95f95 noffle

[svn] * src/configfile.h,src/configfile.c,docs/noffle.conf.5: Add noffle-user and noffle-group configs. * src/configfile.c,src/fetch.c,src/fetchlist.c,src/protocol.c, src/server.c: Replace strcpy() with Utl_cpyStr() where appropriate. See Debian bug 168128. * src/control.c,src/configfile.c,src/noffle.c: Replace [s]scanf("%s") with [s]scanf(MAXCHAR_FMT). * src/noffle.c: Log warning if noffle.conf is world readable. * src/noffle.c: Restrict most options to news admins; i.e. those who are root or news on running Noffle. * Makefile.in,acconfig.h,aclocal.m4,config.h.in,configure,configure.in, docs/Makefile.in,docs/noffle.conf.5,packages/Makefile.in, packages/redhat/Makefile.in,src/Makefile.am,src/Makefile.in, src/authenticate.c,src/authenticate.h,src/noffle.c,src/server.c: Add basic authentication using either Noffle-specific user file or authenticating via PAM (service 'noffle'). PAM authentication needs to run as root, so a Noffle server that needs PAM must be started by root. Helpful (?) error messages will be logged if not. Noffle will switch ruid and euid to 'news' (or whatever is configured) ASAP. * src/noffle.c: Add uid checking.
author bears
date Fri, 10 Jan 2003 23:25:45 +0000
parents 5eece4dfd945
children 9b79433f0976
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1 /*
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
2 content.c
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
3
281
5eece4dfd945 [svn] * src/log.c,src/log.h: Add Log_fatal() for reporting fatal errors
bears
parents: 255
diff changeset
4 $Id: content.c 413 2002-12-27 21:48:25Z bears $
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
5 */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
6
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
7 #if HAVE_CONFIG_H
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
8 #include <config.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
9 #endif
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
10
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
11 #include <stdio.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
12 #include <dirent.h>
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
13 #include <errno.h>
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
14 #include <fcntl.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
15 #include <sys/types.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
16 #include <sys/stat.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
17 #include <unistd.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
18 #include "common.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
19 #include "configfile.h"
197
24d4cd032da5 [svn] * AUTHORS,INSTALL,NEWS,README,TODO,docs/NOTES,src/client.c,src/protocol.c,
bears
parents: 196
diff changeset
20 #include "content.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
21 #include "group.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
22 #include "log.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
23 #include "over.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
24 #include "pseudo.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
25 #include "util.h"
54
125d79c9e586 [svn] * src/client.c, src/configfile.c, src/content.c, src/control.c,
uh1763
parents: 49
diff changeset
26 #include "portable.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
27
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
28 struct
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
29 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
30 DIR *dir; /* Directory for browsing through all
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
31 groups */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
32 int vecFirst; /* First article number in vector */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
33 int first; /* First live article number */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
34 int last; /* Last article number */
59
e612b263934f [svn] Changed some variable types and used some casts to avoid compiler
enz
parents: 54
diff changeset
35 int size; /* Number of overviews. */
e612b263934f [svn] Changed some variable types and used some casts to avoid compiler
enz
parents: 54
diff changeset
36 int max; /* Size of elem. */
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
37 Over **elem; /* Ptr to array with ptrs to overviews.
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
38 NULL entries for non-existing article numbers
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
39 in group. */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
40 Str name;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
41 Str file;
167
7ba337dafb2c [svn] * TODO,content.c,lock.c,server.c,server.h: Remove bug notice re:
bears
parents: 96
diff changeset
42 Bool dirty; /* Needs writing? */
7ba337dafb2c [svn] * TODO,content.c,lock.c,server.c,server.h: Remove bug notice re:
bears
parents: 96
diff changeset
43 } cont = { NULL, 1, 1, 0, 0, 0, NULL, "", "", FALSE };
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
44
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
45 void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
46 Cont_app( Over *ov )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
47 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
48 if ( cont.max < cont.size + 1 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
49 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
50 if ( ! ( cont.elem = realloc( cont.elem,
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
51 ( cont.max + 500 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
52 * sizeof( cont.elem[ 0 ] ) ) ) )
281
5eece4dfd945 [svn] * src/log.c,src/log.h: Add Log_fatal() for reporting fatal errors
bears
parents: 255
diff changeset
53 Log_fatal( "Could not realloc overview list" );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
54 cont.max += 500;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
55 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
56 ASSERT( cont.vecFirst > 0 );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
57 if ( ov )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
58 Ov_setNumb( ov, cont.vecFirst + cont.size );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
59 cont.elem[ cont.size++ ] = ov;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
60 cont.last = cont.vecFirst + cont.size - 1;
167
7ba337dafb2c [svn] * TODO,content.c,lock.c,server.c,server.h: Remove bug notice re:
bears
parents: 96
diff changeset
61 cont.dirty = TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
62 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
63
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
64 Bool
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
65 Cont_validNumb( int n )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
66 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
67 return ( n != 0 && n >= cont.first && n <= cont.last
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
68 && cont.elem[ n - cont.vecFirst ] );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
69 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
70
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
71 void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
72 Cont_delete( int n )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
73 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
74 Over **ov;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
75
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
76 if ( ! Cont_validNumb( n ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
77 return;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
78 ov = &cont.elem[ n - cont.vecFirst ];
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
79 free( *ov );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
80 *ov = NULL;
167
7ba337dafb2c [svn] * TODO,content.c,lock.c,server.c,server.h: Remove bug notice re:
bears
parents: 96
diff changeset
81 cont.dirty = TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
82 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
83
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
84 /* Remove all overviews from content. */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
85 static void
45
32ba1198c6fa [svn] * Makefile.in, configure, configure.in, docs/Makefile.in, src/Makefile.in:
uh1763
parents: 43
diff changeset
86 clearCont( void )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
87 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
88 int i;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
89
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
90 for ( i = 0; i < cont.size; ++i )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
91 del_Over( cont.elem[ i ] );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
92 cont.size = 0;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
93 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
94
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
95 static void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
96 setupEmpty( const char *name )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
97 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
98 cont.last = Grp_last( name );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
99 cont.first = cont.vecFirst = cont.last + 1;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
100 ASSERT( cont.first > 0 );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
101 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
102
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
103 /* Extend content list to size "cnt" and append NULL entries. */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
104 static void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
105 extendCont( int cnt )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
106 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
107 int i, n;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
108
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
109 if ( cont.size < cnt )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
110 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
111 n = cnt - cont.size;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
112 for ( i = 0; i < n; ++i )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
113 Cont_app( NULL );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
114 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
115 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
116
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
117 /* Discard all cached overviews, and read in the overviews of a new group
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
118 from its overviews file. */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
119 void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
120 Cont_read( const char *name )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
121 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
122 FILE *f;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
123 Over *ov;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
124 int numb;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
125 Str line;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
126
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
127 /* Delete old overviews and make room for new ones. */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
128 cont.vecFirst = 0;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
129 cont.first = 0;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
130 cont.last = 0;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
131 Utl_cpyStr( cont.name, name );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
132 clearCont();
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
133
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
134 /* read overviews from overview file and store them in the overviews
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
135 list */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
136 snprintf( cont.file, MAXCHAR, "%s/overview/%s", Cfg_spoolDir(), name );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
137 f = fopen( cont.file, "r" );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
138 if ( ! f )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
139 {
185
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 167
diff changeset
140 Log_dbg( LOG_DBG_NEWSBASE, "No group overview file: %s", cont.file );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
141 setupEmpty( name );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
142 return;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
143 }
185
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 167
diff changeset
144 Log_dbg( LOG_DBG_NEWSBASE, "Reading %s", cont.file );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
145 while ( fgets( line, MAXCHAR, f ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
146 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
147 if ( ! ( ov = Ov_read( line ) ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
148 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
149 Log_err( "Overview corrupted in %s: %s", name, line );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
150 continue;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
151 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
152 numb = Ov_numb( ov );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
153 if ( numb < cont.first )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
154 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
155 Log_err( "Wrong ordering in %s: %s", name, line );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
156 continue;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
157 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
158 if ( cont.first == 0 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
159 cont.first = cont.vecFirst = numb;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
160 cont.last = numb;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
161 extendCont( numb - cont.first + 1 );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
162 cont.elem[ numb - cont.first ] = ov;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
163 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
164 fclose( f );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
165
196
60a70c16d79c [svn] * src/content.c: When generating temp file to write new content to, make
bears
parents: 188
diff changeset
166
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
167 if ( cont.first == 0 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
168 setupEmpty( name ); /* Corrupt overview file recovery */
96
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
169 else
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
170 {
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
171 int grpLast;
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
172
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
173 /*
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
174 Check for end article(s) being cancelled. Need to ensure we
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
175 don't re-use and article number.
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
176 */
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
177 grpLast = Grp_last( name );
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
178 if ( cont.last < grpLast )
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
179 extendCont( grpLast - cont.first + 1 );
988cacc01470 [svn] Preserve group last number if last article(s) cancelled
bears
parents: 75
diff changeset
180 }
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
181 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
182
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
183 Bool
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
184 Cont_write( void )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
185 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
186 Bool anythingWritten;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
187 int i;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
188 FILE *f;
75
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
189 const Over *ov, *ov_next;
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
190 Str tmpfname;
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
191 Bool writeErr;
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
192 int first;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
193
167
7ba337dafb2c [svn] * TODO,content.c,lock.c,server.c,server.h: Remove bug notice re:
bears
parents: 96
diff changeset
194 /* If nowt has changed, do nowt. */
7ba337dafb2c [svn] * TODO,content.c,lock.c,server.c,server.h: Remove bug notice re:
bears
parents: 96
diff changeset
195 if ( ! cont.dirty )
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
196 return TRUE;
167
7ba337dafb2c [svn] * TODO,content.c,lock.c,server.c,server.h: Remove bug notice re:
bears
parents: 96
diff changeset
197
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
198 /* Save the overview to temporary file in same dir. */
213
f0acb9366e4f [svn] minor bugfix in Conf_write()
mirkol
parents: 197
diff changeset
199 /* old tmpfnames will be expired at noffle.c:expireContents() */
196
60a70c16d79c [svn] * src/content.c: When generating temp file to write new content to, make
bears
parents: 188
diff changeset
200 snprintf( tmpfname, MAXCHAR, "%s/overview/.#%d.%s",
60a70c16d79c [svn] * src/content.c: When generating temp file to write new content to, make
bears
parents: 188
diff changeset
201 Cfg_spoolDir(), (int) getpid(), cont.name );
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
202 if ( ! ( f = fopen( tmpfname, "w" ) ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
203 {
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
204 Log_err( "Could not open %s for writing", tmpfname );
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
205 return FALSE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
206 }
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
207 Log_dbg( LOG_DBG_NEWSBASE, "Writing %s (%lu)", tmpfname, cont.size );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
208 anythingWritten = FALSE;
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
209 first = -1;
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
210 writeErr = FALSE;
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
211
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
212 for ( i = 0; i < cont.size; ++i )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
213 {
75
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
214 ov = cont.elem[ i ];
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
215 if ( ov )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
216 {
75
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
217 if ( i + 1 < cont.size )
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
218 ov_next = cont.elem[ i + 1 ];
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
219 else
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
220 ov_next = NULL;
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
221
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
222 /*
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
223 Preserve gen info if it is followed immediately by an
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
224 article with the next number. In practice, this means
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
225 that when in auto-subscribed mode, the gen info will
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
226 remain until the 'group now subscribed' message is
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
227 expired.
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
228 */
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
229 if ( ! Pseudo_isGeneralInfo( Ov_msgId( ov ) )
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
230 || ( ov_next != NULL &&
22b3e3dfc8c2 [svn] Preserve gen info sometimes
bears
parents: 59
diff changeset
231 Ov_numb( ov_next ) - Ov_numb( ov ) == 1 ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
232 {
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
233 anythingWritten = TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
234 if ( ! Ov_write( ov, f ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
235 {
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
236 Log_err( "Writing of overview line to %s failed: %s",
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
237 tmpfname, strerror( errno ) );
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
238 writeErr = TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
239 break;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
240 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
241 else
49
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
242 {
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
243 if ( first < 0 )
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
244 first = cont.vecFirst + i;
49
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
245 }
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
246 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
247 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
248 }
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
249 if ( fclose( f ) != 0 )
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
250 {
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
251 Log_err( "Close of content file %s failed: %s",
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
252 tmpfname, strerror( errno ) );
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
253 writeErr = TRUE;
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
254 }
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
255
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
256 if ( writeErr )
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
257 {
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
258 /* Write error - leave everything as at present */
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
259 return FALSE;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
260 }
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
261
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
262 /*
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
263 If empty, remove the overview file and set first to one
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
264 beyond last to flag said emptiness.
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
265 */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
266 if ( ! anythingWritten )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
267 {
213
f0acb9366e4f [svn] minor bugfix in Conf_write()
mirkol
parents: 197
diff changeset
268 if ( unlink( tmpfname ) < 0 )
f0acb9366e4f [svn] minor bugfix in Conf_write()
mirkol
parents: 197
diff changeset
269 Log_err( "Unlink of %s failed: %s", tmpfname, strerror( errno ) );
218
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
270 if ( unlink( cont.file ) < 0 )
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
271 {
218
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
272 Log_err( "Unlink of %s failed: %s", cont.file, strerror( errno ) );
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
273 return FALSE;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
274 }
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
275 else
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
276 {
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
277 cont.dirty = FALSE;
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
278 cont.first = cont.last + 1;
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
279 }
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
280 }
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
281 else
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
282 {
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
283 if ( rename( tmpfname, cont.file ) < 0 )
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
284 {
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
285 Log_err( "Rename of content file %s to %s failed: %s",
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
286 tmpfname, cont.file, strerror( errno ) );
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
287 return FALSE;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
288 }
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
289 else
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
290 {
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
291 ASSERT( first != -1 );
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
292 cont.dirty = FALSE;
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
293 cont.first = first;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
294 }
188
f1bacee93ca6 [svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
bears
parents: 185
diff changeset
295 }
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
296
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 219
diff changeset
297 return TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
298 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
299
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
300 const Over *
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
301 Cont_get( int numb )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
302 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
303 if ( ! Cont_validNumb( numb ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
304 return NULL;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
305 return cont.elem[ numb - cont.vecFirst ];
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
306 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
307
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
308 int
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
309 Cont_first( void ) { return cont.first; }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
310
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
311 int
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
312 Cont_last( void ) { return cont.last; }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
313
49
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
314 int
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
315 Cont_find( const char *msgId )
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
316 {
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
317 int i;
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
318 const Over *ov;
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
319
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
320 for ( i = 0; i < cont.size; i++ )
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
321 {
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
322 if ( ( ov = cont.elem[ i ] )
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
323 && strcmp( Ov_msgId( ov ), msgId ) == 0 )
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
324 return i + cont.vecFirst;
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
325 }
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
326
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
327 return -1;
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
328 }
5ecb646acf97 [svn] Article numbering bug fixes
bears
parents: 45
diff changeset
329
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
330 const char *
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
331 Cont_grp( void ) { return cont.name; }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
332
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
333 Bool
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
334 Cont_nextGrp( Str result )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
335 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
336 struct dirent *d;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
337
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
338 ASSERT( cont.dir );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
339 if ( ! ( d = readdir( cont.dir ) ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
340 {
219
d9f314014f7a [svn] * src/content.c: Remove spurious temporary files and add a closedir()
bears
parents: 218
diff changeset
341 closedir( cont.dir );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
342 cont.dir = NULL;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
343 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
344 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
345 if ( ! d->d_name )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
346 return FALSE;
218
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
347 if ( d->d_name[0] == '.' )
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
348 {
227
c48d7e881a21 [svn] fixed expiration of temp overview files, once again.
mirkol
parents: 223
diff changeset
349 Str tmpfname;
219
d9f314014f7a [svn] * src/content.c: Remove spurious temporary files and add a closedir()
bears
parents: 218
diff changeset
350
218
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
351 /*
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
352 * If it is '.' or '..', skip.
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
353 * If it starts '.#', treat as a temporary file that didn't
219
d9f314014f7a [svn] * src/content.c: Remove spurious temporary files and add a closedir()
bears
parents: 218
diff changeset
354 * get deleted for some reason and flag an error and delete it.
218
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
355 */
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
356 switch( d->d_name[1] )
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
357 {
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
358 case '\0':
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
359 case '.':
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
360 break;
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
361
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
362 case '#':
227
c48d7e881a21 [svn] fixed expiration of temp overview files, once again.
mirkol
parents: 223
diff changeset
363 snprintf( tmpfname, MAXCHAR, "%s/overview/%s",
c48d7e881a21 [svn] fixed expiration of temp overview files, once again.
mirkol
parents: 223
diff changeset
364 Cfg_spoolDir(), d->d_name );
c48d7e881a21 [svn] fixed expiration of temp overview files, once again.
mirkol
parents: 223
diff changeset
365 Log_err( "Bad temporary file %s - deleting.",
c48d7e881a21 [svn] fixed expiration of temp overview files, once again.
mirkol
parents: 223
diff changeset
366 tmpfname );
219
d9f314014f7a [svn] * src/content.c: Remove spurious temporary files and add a closedir()
bears
parents: 218
diff changeset
367 if ( unlink( tmpfname ) < 0 )
d9f314014f7a [svn] * src/content.c: Remove spurious temporary files and add a closedir()
bears
parents: 218
diff changeset
368 Log_err( "Unlink of %s failed: %s",
d9f314014f7a [svn] * src/content.c: Remove spurious temporary files and add a closedir()
bears
parents: 218
diff changeset
369 tmpfname, strerror(errno) );
218
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
370 break;
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
371
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
372 default:
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
373 Log_err( "Unknown file %s in %s/overview - please delete",
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
374 d->d_name, Cfg_spoolDir() );
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
375 break;
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
376 }
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
377 return Cont_nextGrp( result );
411b6ab1acb7 [svn] *src/content.c,src/noffle.c: Correct bugfix in Conf_write().
bears
parents: 213
diff changeset
378 }
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
379 Utl_cpyStr( result, d->d_name );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
380 result[ MAXCHAR - 1 ] = '\0';
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
381 return TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
382 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
383
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
384 Bool
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
385 Cont_firstGrp( Str result )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
386 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
387 Str name;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
388
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
389 snprintf( name, MAXCHAR, "%s/overview", Cfg_spoolDir() );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
390 if ( ! ( cont.dir = opendir( name ) ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
391 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
392 Log_err( "Cannot open %s", name );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
393 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
394 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
395 return Cont_nextGrp( result );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
396 }
255
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
397
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
398 Bool
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
399 Cont_exists( const char *grp )
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
400 {
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
401 Str fname;
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
402
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
403 /* Do we have a content/overview file for this group? */
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
404 snprintf( fname, MAXCHAR, "%s/overview/%s", Cfg_spoolDir(), grp );
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
405 return ( access( fname, R_OK ) == 0 );
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
406 }
52f467c7213b [svn] * docs/noffle.1,src/Makefile.am,src/Makefile.in,src/content.c,
bears
parents: 227
diff changeset
407