annotate group.c @ 15:54f08929b195 noffle

[svn] Bring up to date
author enz
date Sat, 29 Apr 2000 13:22:25 +0100
parents 04124a4423d4
children 526a4c34ee2e
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 group.c
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
3
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
4 The group database resides in groupinfo.gdbm and stores all we know about
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
5 the groups we know of. One database record is cached in the global struct
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
6 grp. Group information is transfered between the grp and the database by
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
7 loadGrp() and saveGrp(). This is done transparently. Access to the groups
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
8 database is done by group name, by the functions defined in group.h.
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
9
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
10 $Id: group.c 3 2000-01-04 11:35:42Z enz $
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
11 */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
12
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
13 #include "group.h"
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
14 #include <gdbm.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
15 #include <errno.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
16 #include <fcntl.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
17 #include <sys/stat.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
18 #include "config.h"
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
19 #include "log.h"
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
20 #include "util.h"
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
21
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
22 /* currently only used within grp */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
23 typedef struct
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
24 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
25 int first; /* number of first article within group */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
26 int last; /* number of last article within group */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
27 int rmtNext;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
28 time_t created;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
29 time_t lastAccess;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
30 } Entry;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
31
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
32 struct
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
33 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
34 Str name; /* name of the group */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
35 Entry entry; /* more information about this group */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
36 Str serv; /* server the group resides on */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
37 Str dsc; /* description of the group */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
38 GDBM_FILE dbf;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
39
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
40 } grp = { "(no grp)", { 0, 0, 0, 0, 0 }, "", "", NULL };
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
41
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
42 static const char *
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
43 errMsg( void )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
44 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
45 if ( errno != 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
46 return strerror( errno );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
47 return gdbm_strerror( gdbm_errno );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
48 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
49
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
50 Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
51 Grp_open( void )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
52 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
53 Str name;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
54 int flags;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
55
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
56 ASSERT( grp.dbf == NULL );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
57 snprintf( name, MAXCHAR, "%s/data/groupinfo.gdbm", Cfg_spoolDir() );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
58 flags = GDBM_WRCREAT | GDBM_FAST;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
59 if ( ! ( grp.dbf = gdbm_open( name, 512, flags, 0644, NULL ) ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
60 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
61 Log_err( "Error opening %s for r/w (%s)", errMsg() );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
62 return FALSE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
63 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
64 Log_dbg( "%s opened for r/w", name );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
65 return TRUE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
66 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
67
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
68 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
69 Grp_close( void )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
70 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
71 ASSERT( grp.dbf );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
72 Log_dbg( "Closing groupinfo" );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
73 gdbm_close( grp.dbf );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
74 grp.dbf = NULL;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
75 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
76
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
77 /* Load group info from gdbm-database into global struct grp */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
78 static Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
79 loadGrp( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
80 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
81 const char *p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
82 datum key, val;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
83
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
84 ASSERT( grp.dbf );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
85 if ( strcmp( grp.name, name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
86 return TRUE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
87 key.dptr = (void *)name;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
88 key.dsize = strlen( name ) + 1;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
89 val = gdbm_fetch( grp.dbf, key );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
90 if ( val.dptr == NULL )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
91 return FALSE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
92 grp.entry = *( (Entry *)val.dptr );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
93 p = val.dptr + sizeof( grp.entry );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
94 Utl_cpyStr( grp.serv, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
95 p += strlen( p ) + 1;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
96 Utl_cpyStr( grp.dsc, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
97 Utl_cpyStr( grp.name, name );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
98 free( val.dptr );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
99 return TRUE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
100 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
101
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
102 /* Save group info from global struct grp into gdbm-database */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
103 static void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
104 saveGrp( void )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
105 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
106 size_t lenServ, lenDsc, bufLen;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
107 datum key, val;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
108 void *buf;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
109 char *p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
110
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
111 ASSERT( grp.dbf );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
112 lenServ = strlen( grp.serv );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
113 lenDsc = strlen( grp.dsc );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
114 bufLen = sizeof( grp.entry ) + lenServ + lenDsc + 2;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
115 buf = malloc( bufLen );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
116 memcpy( buf, (void *)&grp.entry, sizeof( grp.entry ) );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
117 p = (char *)buf + sizeof( grp.entry );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
118 strcpy( p, grp.serv );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
119 p += lenServ + 1;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
120 strcpy( p, grp.dsc );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
121 key.dptr = (void *)grp.name;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
122 key.dsize = strlen( grp.name ) + 1;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
123 val.dptr = buf;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
124 val.dsize = bufLen;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
125 if ( gdbm_store( grp.dbf, key, val, GDBM_REPLACE ) != 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
126 Log_err( "Could not save group %s: %s", errMsg() );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
127 free( buf );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
128 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
129
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
130 Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
131 Grp_exists( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
132 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
133 datum key;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
134
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
135 ASSERT( grp.dbf );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
136 key.dptr = (void*)name;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
137 key.dsize = strlen( name ) + 1;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
138 return gdbm_exists( grp.dbf, key );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
139 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
140
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
141 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
142 Grp_create( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
143 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
144 Utl_cpyStr( grp.name, name );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
145 Utl_cpyStr( grp.serv, "(unknown)" );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
146 grp.dsc[ 0 ] = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
147 grp.entry.first = 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
148 grp.entry.last = 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
149 grp.entry.rmtNext = 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
150 grp.entry.created = 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
151 grp.entry.lastAccess = 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
152 saveGrp();
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
153 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
154
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
155 const char *
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
156 Grp_dsc( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
157 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
158 if ( ! loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
159 return NULL;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
160 return grp.dsc;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
161 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
162
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
163 const char *
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
164 Grp_serv( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
165 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
166 static Str serv = "";
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
167
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
168 if ( ! loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
169 return "[unknown grp]";
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
170 if ( Cfg_servListContains( grp.serv ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
171 Utl_cpyStr( serv, grp.serv );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
172 else
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
173 snprintf( serv, MAXCHAR, "[%s]", grp.serv );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
174 return serv;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
175 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
176
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
177 int
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
178 Grp_first( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
179 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
180 if ( ! loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
181 return 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
182 return grp.entry.first;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
183 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
184
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
185 int
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
186 Grp_last( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
187 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
188 if ( ! loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
189 return 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
190 return grp.entry.last;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
191 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
192
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
193 int
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
194 Grp_lastAccess( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
195 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
196 if ( ! loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
197 return 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
198 return grp.entry.lastAccess;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
199 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
200
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
201 int
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
202 Grp_rmtNext( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
203 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
204 if ( ! loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
205 return 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
206 return grp.entry.rmtNext;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
207 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
208
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
209 time_t
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
210 Grp_created( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
211 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
212 if ( ! loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
213 return 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
214 return grp.entry.created;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
215 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
216
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
217 /* Replace group's description (only if value != ""). */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
218 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
219 Grp_setDsc( const char *name, const char *value )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
220 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
221 if ( loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
222 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
223 Utl_cpyStr( grp.dsc, value );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
224 saveGrp();
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
225 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
226 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
227
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
228 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
229 Grp_setServ( const char *name, const char *value )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
230 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
231 if ( loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
232 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
233 Utl_cpyStr( grp.serv, value );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
234 saveGrp();
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
235 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
236 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
237
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
238 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
239 Grp_setCreated( const char *name, time_t value )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
240 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
241 if ( loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
242 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
243 grp.entry.created = value;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
244 saveGrp();
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
245 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
246 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
247
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
248 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
249 Grp_setRmtNext( const char *name, int value )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
250 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
251 if ( loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
252 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
253 grp.entry.rmtNext = value;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
254 saveGrp();
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
255 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
256 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
257
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
258 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
259 Grp_setLastAccess( const char *name, int value )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
260 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
261 if ( loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
262 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
263 grp.entry.lastAccess = value;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
264 saveGrp();
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
265 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
266 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
267
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
268 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
269 Grp_setFirstLast( const char *name, int first, int last )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
270 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
271 if ( loadGrp( name ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
272 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
273 grp.entry.first = first;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
274 grp.entry.last = last;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
275 saveGrp();
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
276 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
277 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
278
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
279 static datum cursor = { NULL, 0 };
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
280
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
281 Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
282 Grp_firstGrp( const char **name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
283 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
284 ASSERT( grp.dbf );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
285 if ( cursor.dptr != NULL )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
286 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
287 free( cursor.dptr );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
288 cursor.dptr = NULL;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
289 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
290 cursor = gdbm_firstkey( grp.dbf );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
291 *name = cursor.dptr;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
292 return ( cursor.dptr != NULL );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
293 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
294
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
295 Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
296 Grp_nextGrp( const char **name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
297 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
298 void *oldDptr = cursor.dptr;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
299
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
300 ASSERT( grp.dbf );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
301 if ( cursor.dptr == NULL )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
302 return FALSE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
303 cursor = gdbm_nextkey( grp.dbf, cursor );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
304 free( oldDptr );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
305 *name = cursor.dptr;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
306 return ( cursor.dptr != NULL );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
307 }