ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/init.C
(Generate patch)

Comparing deliantra/server/common/init.C (file contents):
Revision 1.9 by root, Sat Sep 9 23:49:06 2006 UTC vs.
Revision 1.10 by root, Sun Sep 10 16:00:23 2006 UTC

1
1/* 2/*
2 * static char *rcsid_init_c = 3 * static char *rcsid_init_c =
3 * "$Id: init.C,v 1.9 2006/09/09 23:49:06 root Exp $"; 4 * "$Id: init.C,v 1.10 2006/09/10 16:00:23 root Exp $";
4 */ 5 */
5 6
6/* 7/*
7 CrossFire, A Multiplayer game for X-windows 8 CrossFire, A Multiplayer game for X-windows
8 9
24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 26
26 The authors can be reached via e-mail at crossfire-devel@real-time.com 27 The authors can be reached via e-mail at crossfire-devel@real-time.com
27*/ 28*/
28 29
29#define EXTERN // horrible hack 30#define EXTERN // horrible hack
30 31
31#include <global.h> 32#include <global.h>
32#include <object.h> 33#include <object.h>
33 34
34extern const char* const attacktype_desc[NROFATTACKS] = { 35extern const char *const attacktype_desc[NROFATTACKS] = {
35# define def(uc, lc, name, plus, change) # name, 36#define def(uc, lc, name, plus, change) # name,
36# include "attackinc.h" 37#include "attackinc.h"
37# undef def 38#undef def
38}; 39};
39 40
40extern const keyword resist_save[NROFATTACKS] = { 41extern const keyword resist_save[NROFATTACKS] = {
41# define def(uc, lc, name, plus, change) KW_resist_ ## lc, 42#define def(uc, lc, name, plus, change) KW_resist_ ## lc,
42# include "attackinc.h" 43#include "attackinc.h"
43# undef def 44#undef def
44}; 45};
45 46
46extern const char* const resist_plus[NROFATTACKS] = { 47extern const char *const resist_plus[NROFATTACKS] = {
47# define def(uc, lc, name, plus, change) # plus, 48#define def(uc, lc, name, plus, change) # plus,
48# include "attackinc.h" 49#include "attackinc.h"
49# undef def 50#undef def
50}; 51};
51 52
52extern const char* const change_resist_msg[NROFATTACKS] = { 53extern const char *const change_resist_msg[NROFATTACKS] = {
53# define def(uc, lc, name, plus, change) # change, 54#define def(uc, lc, name, plus, change) # change,
54# include "attackinc.h" 55#include "attackinc.h"
55# undef def 56#undef def
56}; 57};
57 58
58int resist_table[NROFATTACKS] = { 59int resist_table[NROFATTACKS] = {
59# define def(uc, lc, name, plus, change) ATNR_ ## uc, 60#define def(uc, lc, name, plus, change) ATNR_ ## uc,
60# include "attackinc.h" 61#include "attackinc.h"
61# undef def 62#undef def
62}; 63};
63 64
64/* You unforunately need to looking in include/global.h to see what these 65/* You unforunately need to looking in include/global.h to see what these
65 * correspond to. 66 * correspond to.
66 */ 67 */
67struct Settings settings = { 68struct Settings settings = {
68LOGFILE, /* Logfile */ 69 LOGFILE, /* Logfile */
69CSPORT, /* Client/server port */ 70 CSPORT, /* Client/server port */
70 71
71/* Debug level */ 72/* Debug level */
72#ifdef DEBUG 73#ifdef DEBUG
73 llevDebug, 74 llevDebug,
74#else 75#else
75 llevInfo, 76 llevInfo,
76#endif 77#endif
77 78
780, NULL, 0, /* dumpvalues, dumparg, daemonmode */ 79 0, NULL, 0, /* dumpvalues, dumparg, daemonmode */
790, /* argc */ 80 0, /* argc */
80NULL, /* argv */ 81 NULL, /* argv */
81CONFDIR, 82 CONFDIR,
82DATADIR, 83 DATADIR,
83LOCALDIR, 84 LOCALDIR,
84PLAYERDIR, MAPDIR, ARCHETYPES,REGIONS,TREASURES, 85 PLAYERDIR, MAPDIR, ARCHETYPES, REGIONS, TREASURES,
85UNIQUE_DIR, TEMPLATE_DIR, 86 UNIQUE_DIR, TEMPLATE_DIR,
86TMPDIR, 87 TMPDIR,
87STAT_LOSS_ON_DEATH, 88 STAT_LOSS_ON_DEATH,
88PK_LUCK_PENALTY, 89 PK_LUCK_PENALTY,
89PERMANENT_EXPERIENCE_RATIO, 90 PERMANENT_EXPERIENCE_RATIO,
90DEATH_PENALTY_RATIO, 91 DEATH_PENALTY_RATIO,
91DEATH_PENALTY_LEVEL, 92 DEATH_PENALTY_LEVEL,
92BALANCED_STAT_LOSS, 93 BALANCED_STAT_LOSS,
93NOT_PERMADETH, 94 NOT_PERMADETH,
94SIMPLE_EXP, 95 SIMPLE_EXP,
95RESET_LOCATION_TIME, 96 RESET_LOCATION_TIME,
96SET_TITLE, 97 SET_TITLE,
97RESURRECTION, 98 RESURRECTION,
98SEARCH_ITEMS, 99 SEARCH_ITEMS,
99SPELL_ENCUMBRANCE, 100 SPELL_ENCUMBRANCE,
100SPELL_FAILURE_EFFECTS, 101 SPELL_FAILURE_EFFECTS,
101CASTING_TIME, 102 CASTING_TIME,
102REAL_WIZ, 103 REAL_WIZ,
103RECYCLE_TMP_MAPS, 104 RECYCLE_TMP_MAPS,
104EXPLORE_MODE, 105 EXPLORE_MODE,
105SPELLPOINT_LEVEL_DEPEND, 106 SPELLPOINT_LEVEL_DEPEND,
106SET_FRIENDLY_FIRE, 107 SET_FRIENDLY_FIRE,
107"", /* Who format specifier */ 108 "", /* Who format specifier */
108"", /* who wiz format specifier */ 109 "", /* who wiz format specifier */
109MOTD, 110 MOTD,
110"rules", 111 "rules",
111"news", 112 "news",
112"", /* DM_MAIL */ 113 "", /* DM_MAIL */
1130, /* This and the next 3 values are metaserver values */ 114 0, /* This and the next 3 values are metaserver values */
114"", 115 "",
115"", 116 "",
1160, 117 0,
117"", 118 "",
1180,0,0,0,0,0,0,0, /* worldmap settings*/ 119 0, 0, 0, 0, 0, 0, 0, 0, /* worldmap settings */
119EMERGENCY_MAPPATH, EMERGENCY_X, EMERGENCY_Y, 120 EMERGENCY_MAPPATH, EMERGENCY_X, EMERGENCY_Y,
1200, 121 0,
1211.0, 122 1.0,
123
122/* Armor enchantment stuff */ 124/* Armor enchantment stuff */
123ARMOR_MAX_ENCHANT, 125 ARMOR_MAX_ENCHANT,
124ARMOR_WEIGHT_REDUCTION, 126 ARMOR_WEIGHT_REDUCTION,
125ARMOR_WEIGHT_LINEAR, 127 ARMOR_WEIGHT_LINEAR,
126ARMOR_SPEED_IMPROVEMENT, 128 ARMOR_SPEED_IMPROVEMENT,
127ARMOR_SPEED_LINEAR, 129 ARMOR_SPEED_LINEAR,
1281, /* no_player_stealing */ 130 1, /* no_player_stealing */
1291, /* create_home_portals */ 131 1, /* create_home_portals */
130}; 132};
131 133
132/* perhaps not the best place for this, but needs to be 134/* perhaps not the best place for this, but needs to be
133 * in some file in the common area so that standalone 135 * in some file in the common area so that standalone
134 * programs, like the random map generator, can be built. 136 * programs, like the random map generator, can be built.
135 */ 137 */
136const char* const spellpathnames[NRSPELLPATHS] = { 138const char *const spellpathnames[NRSPELLPATHS] = {
137 "Protection", 139 "Protection",
138 "Fire", 140 "Fire",
139 "Frost", 141 "Frost",
140 "Electricity", 142 "Electricity",
141 "Missiles", 143 "Missiles",
142 "Self", 144 "Self",
143 "Summoning", 145 "Summoning",
144 "Abjuration", 146 "Abjuration",
145 "Restoration", 147 "Restoration",
146 "Detonation", 148 "Detonation",
147 "Mind", 149 "Mind",
148 "Creation", 150 "Creation",
149 "Teleportation", 151 "Teleportation",
150 "Information", 152 "Information",
151 "Transmutation", 153 "Transmutation",
152 "Transferrence", 154 "Transferrence",
153 "Turning", 155 "Turning",
154 "Wounding", 156 "Wounding",
155 "Death", 157 "Death",
156 "Light" 158 "Light"
157}; 159};
158 160
159 161
160/* This loads the emergency map information from a 162/* This loads the emergency map information from a
161 * .emergency file in the map directory. Doing this makes 163 * .emergency file in the map directory. Doing this makes
162 * it easier to switch between map distributions (don't need 164 * it easier to switch between map distributions (don't need
163 * to recompile. Note that there is no reason I see that 165 * to recompile. Note that there is no reason I see that
164 * this could not be re-loaded during play, but it seems 166 * this could not be re-loaded during play, but it seems
165 * like there should be little reason to do that. 167 * like there should be little reason to do that.
166 */ 168 */
169static void
167static void init_emergency_mappath(void) 170init_emergency_mappath (void)
168{ 171{
169 char filename[MAX_BUF], tmpbuf[MAX_BUF]; 172 char filename[MAX_BUF], tmpbuf[MAX_BUF];
170 FILE *fp; 173 FILE *fp;
171 int online=0; 174 int online = 0;
172 175
173 /* If this file doesn't exist, not a big deal */ 176 /* If this file doesn't exist, not a big deal */
174 sprintf(filename,"%s/%s/.emergency",settings.datadir, settings.mapdir); 177 sprintf (filename, "%s/%s/.emergency", settings.datadir, settings.mapdir);
175 if ((fp = fopen(filename, "r"))!=NULL) { 178 if ((fp = fopen (filename, "r")) != NULL)
179 {
176 while (fgets(tmpbuf, MAX_BUF-1, fp)) { 180 while (fgets (tmpbuf, MAX_BUF - 1, fp))
177 if (tmpbuf[0] == '#') continue; /* ignore comments */ 181 {
182 if (tmpbuf[0] == '#')
183 continue; /* ignore comments */
184
185 if (online == 0)
178 186 {
179 if (online == 0) {
180 tmpbuf[strlen(tmpbuf)-1] = 0; /* kill newline */ 187 tmpbuf[strlen (tmpbuf) - 1] = 0; /* kill newline */
181 settings.emergency_mapname = strdup_local(tmpbuf); 188 settings.emergency_mapname = strdup_local (tmpbuf);
182 } 189 }
183 else if (online == 1) { 190 else if (online == 1)
191 {
184 settings.emergency_x = atoi(tmpbuf); 192 settings.emergency_x = atoi (tmpbuf);
185 } 193 }
186 194
187 else if (online == 2) { 195 else if (online == 2)
196 {
188 settings.emergency_y = atoi(tmpbuf); 197 settings.emergency_y = atoi (tmpbuf);
189 } 198 }
190 online++; 199 online++;
191 if (online>2) break; 200 if (online > 2)
201 break;
192 } 202 }
193 fclose(fp); 203 fclose (fp);
194 if (online<=2) 204 if (online <= 2)
195 LOG(llevError,"Online read partial data from %s\n", filename); 205 LOG (llevError, "Online read partial data from %s\n", filename);
196 LOG(llevDebug,"Emergency mappath reset to %s (%d, %d)\n", settings.emergency_mapname, 206 LOG (llevDebug, "Emergency mappath reset to %s (%d, %d)\n", settings.emergency_mapname, settings.emergency_x, settings.emergency_y);
197 settings.emergency_x, settings.emergency_y);
198 }
199}
200 207 }
208}
209
201 210
202/* 211/*
203 * It is vital that init_library() is called by any functions 212 * It is vital that init_library() is called by any functions
204 * using this library. 213 * using this library.
205 * If you want to lessen the size of the program using the library, 214 * If you want to lessen the size of the program using the library,
206 * you can replace the call to init_library() with init_globals() and 215 * you can replace the call to init_library() with init_globals() and
207 * init_function_pointers(). Good idea to also call init_vars and 216 * init_function_pointers(). Good idea to also call init_vars and
208 * init_hash_table if you are doing any object loading. 217 * init_hash_table if you are doing any object loading.
209 */ 218 */
210 219
220void
211void init_library(void) { 221init_library (void)
222{
212 init_environ(); 223 init_environ ();
213 init_globals(); 224 init_globals ();
214 init_objects(); 225 init_objects ();
215 init_vars(); 226 init_vars ();
216 init_block(); 227 init_block ();
217 ReadBmapNames (); 228 ReadBmapNames ();
218 ReadSmooth(); 229 ReadSmooth ();
219 init_anim(); /* Must be after we read in the bitmaps */ 230 init_anim (); /* Must be after we read in the bitmaps */
220 init_archetypes(); /* Reads all archetypes from file */ 231 init_archetypes (); /* Reads all archetypes from file */
221 init_dynamic (); 232 init_dynamic ();
222 init_attackmess(); 233 init_attackmess ();
223 init_clocks(); 234 init_clocks ();
224 init_emergency_mappath(); 235 init_emergency_mappath ();
225 init_experience(); 236 init_experience ();
226} 237}
227 238
228 239
229/* init_environ initializes values from the environmental variables. 240/* init_environ initializes values from the environmental variables.
230 * it needs to be called very early, since command line options should 241 * it needs to be called very early, since command line options should
231 * overwrite these if specified. 242 * overwrite these if specified.
232 */ 243 */
244void
233void init_environ(void) { 245init_environ (void)
246{
234 char *cp; 247 char *cp;
235 248
236 cp=getenv("CROSSFIRE_LIBDIR"); 249 cp = getenv ("CROSSFIRE_LIBDIR");
250 if (cp)
237 if (cp) settings.datadir=cp; 251 settings.datadir = cp;
238 cp=getenv("CROSSFIRE_LOCALDIR"); 252 cp = getenv ("CROSSFIRE_LOCALDIR");
253 if (cp)
239 if (cp) settings.localdir=cp; 254 settings.localdir = cp;
240 cp=getenv("CROSSFIRE_PLAYERDIR"); 255 cp = getenv ("CROSSFIRE_PLAYERDIR");
256 if (cp)
241 if (cp) settings.playerdir=cp; 257 settings.playerdir = cp;
242 cp=getenv("CROSSFIRE_MAPDIR"); 258 cp = getenv ("CROSSFIRE_MAPDIR");
259 if (cp)
243 if (cp) settings.mapdir=cp; 260 settings.mapdir = cp;
244 cp=getenv("CROSSFIRE_ARCHETYPES"); 261 cp = getenv ("CROSSFIRE_ARCHETYPES");
262 if (cp)
245 if (cp) settings.archetypes=cp; 263 settings.archetypes = cp;
246 cp=getenv("CROSSFIRE_TREASURES"); 264 cp = getenv ("CROSSFIRE_TREASURES");
265 if (cp)
247 if (cp) settings.treasures=cp; 266 settings.treasures = cp;
248 cp=getenv("CROSSFIRE_UNIQUEDIR"); 267 cp = getenv ("CROSSFIRE_UNIQUEDIR");
268 if (cp)
249 if (cp) settings.uniquedir=cp; 269 settings.uniquedir = cp;
250 cp=getenv("CROSSFIRE_TEMPLATEDIR"); 270 cp = getenv ("CROSSFIRE_TEMPLATEDIR");
271 if (cp)
251 if (cp) settings.templatedir=cp; 272 settings.templatedir = cp;
252 cp=getenv("CROSSFIRE_TMPDIR"); 273 cp = getenv ("CROSSFIRE_TMPDIR");
274 if (cp)
253 if (cp) settings.tmpdir=cp; 275 settings.tmpdir = cp;
254} 276}
255 277
256 278
257/* 279/*
258 * Initialises all global variables. 280 * Initialises all global variables.
259 * Might use environment-variables as default for some of them. 281 * Might use environment-variables as default for some of them.
260 */ 282 */
261 283
284void
262void init_globals(void) { 285init_globals (void)
286{
263 if (settings.logfilename[0] == 0) { 287 if (settings.logfilename[0] == 0)
288 {
264 logfile = stderr; 289 logfile = stderr;
265 } 290 }
266 else if ((logfile=fopen(settings.logfilename, "a"))==NULL) { 291 else if ((logfile = fopen (settings.logfilename, "a")) == NULL)
292 {
267 fprintf(stderr,"Unable to open %s as the logfile - will use stderr instead\n", 293 fprintf (stderr, "Unable to open %s as the logfile - will use stderr instead\n", settings.logfilename);
268 settings.logfilename);
269 logfile = stderr; 294 logfile = stderr;
295 }
296 else
270 } 297 {
271 else {
272 setvbuf(logfile, NULL, _IOLBF, 0); 298 setvbuf (logfile, NULL, _IOLBF, 0);
273 } 299 }
274 exiting = 0; 300 exiting = 0;
275 first_player=NULL; 301 first_player = NULL;
276 first_friendly_object=NULL; 302 first_friendly_object = NULL;
277 first_map=NULL; 303 first_map = NULL;
278 first_treasurelist=NULL; 304 first_treasurelist = NULL;
279 first_artifactlist=NULL; 305 first_artifactlist = NULL;
280 first_archetype=NULL; 306 first_archetype = NULL;
281 *first_map_ext_path=0; 307 *first_map_ext_path = 0;
282 warn_archetypes=0; 308 warn_archetypes = 0;
283 nroftreasures = 0; 309 nroftreasures = 0;
284 nrofartifacts = 0; 310 nrofartifacts = 0;
285 nrofallowedstr=0; 311 nrofallowedstr = 0;
286 ring_arch = NULL; 312 ring_arch = NULL;
287 amulet_arch = NULL; 313 amulet_arch = NULL;
288 staff_arch = NULL; 314 staff_arch = NULL;
289 trying_emergency_save = 0; 315 trying_emergency_save = 0;
290 num_animations=0; 316 num_animations = 0;
291 animations_allocated=0; 317 animations_allocated = 0;
292 init_defaults(); 318 init_defaults ();
293} 319}
294 320
295/* 321/*
296 * Sets up and initialises the linked list of free and used objects. 322 * Sets up and initialises the linked list of free and used objects.
297 * Allocates a certain chunk of objects and puts them on the free list. 323 * Allocates a certain chunk of objects and puts them on the free list.
298 * Called by init_library(); 324 * Called by init_library();
299 */ 325 */
300 326
301void 327void
302init_objects(void) 328init_objects (void)
303{ 329{
304 /* Initialize all objects: */ 330 /* Initialize all objects: */
305 objects = NULL; 331 objects = NULL;
306 active_objects = NULL; 332 active_objects = NULL;
307} 333}
309/* 335/*
310 * Initialises global variables which can be changed by options. 336 * Initialises global variables which can be changed by options.
311 * Called by init_library(). 337 * Called by init_library().
312 */ 338 */
313 339
340void
314void init_defaults(void) { 341init_defaults (void)
342{
315 editor=0; 343 editor = 0;
316 nroferrors=0; 344 nroferrors = 0;
317} 345}
318 346
319 347
348void
320void init_dynamic (void) { 349init_dynamic (void)
350{
321 archetype *at = first_archetype; 351 archetype *at = first_archetype;
352
322 while (at) { 353 while (at)
354 {
323 if (at->clone.type == MAP) { 355 if (at->clone.type == MAP)
356 {
324 if (at->clone.race) { 357 if (at->clone.race)
358 {
325 strcpy (first_map_ext_path, at->clone.race); 359 strcpy (first_map_ext_path, at->clone.race);
326 } 360 }
327 if (EXIT_PATH (&at->clone)) { 361 if (EXIT_PATH (&at->clone))
362 {
328 strcpy (first_map_path, EXIT_PATH (&at->clone)); 363 strcpy (first_map_path, EXIT_PATH (&at->clone));
329 return; 364 return;
330 } 365 }
331 } 366 }
332 at = at->next; 367 at = at->next;
333 } 368 }
334 LOG(llevDebug,"You Need a archetype called 'map' and it have to contain start map\n"); 369 LOG (llevDebug, "You Need a archetype called 'map' and it have to contain start map\n");
335 exit (-1); 370 exit (-1);
336} 371}
337 372
338unsigned long todtick; 373unsigned long todtick;
339 374
340/* 375/*
341 * Write out the current time to the file so time does not 376 * Write out the current time to the file so time does not
342 * reset every time the server reboots. 377 * reset every time the server reboots.
343 */ 378 */
344 379
380void
345void write_todclock(void) 381write_todclock (void)
346{ 382{
347 char filename[MAX_BUF]; 383 char filename[MAX_BUF];
348 FILE *fp; 384 FILE *fp;
349 385
350 sprintf(filename, "%s/clockdata", settings.localdir); 386 sprintf (filename, "%s/clockdata", settings.localdir);
351 if ((fp = fopen(filename, "w")) == NULL) { 387 if ((fp = fopen (filename, "w")) == NULL)
388 {
352 LOG(llevError, "Cannot open %s for writing\n", filename); 389 LOG (llevError, "Cannot open %s for writing\n", filename);
353 return; 390 return;
354 } 391 }
355 fprintf(fp, "%lu", todtick); 392 fprintf (fp, "%lu", todtick);
356 fclose(fp); 393 fclose (fp);
357} 394}
358 395
359/* 396/*
360 * Initializes the gametime and TOD counters 397 * Initializes the gametime and TOD counters
361 * Called by init_library(). 398 * Called by init_library().
362 */ 399 */
363 400
401void
364void init_clocks(void) 402init_clocks (void)
365{ 403{
366 char filename[MAX_BUF]; 404 char filename[MAX_BUF];
367 FILE *fp; 405 FILE *fp;
368 static int has_been_done=0; 406 static int has_been_done = 0;
369 407
370 if (has_been_done) 408 if (has_been_done)
371 return; 409 return;
372 else 410 else
373 has_been_done = 1; 411 has_been_done = 1;
374 412
375 sprintf(filename, "%s/clockdata", settings.localdir); 413 sprintf (filename, "%s/clockdata", settings.localdir);
376 LOG(llevDebug, "Reading clockdata from %s...", filename); 414 LOG (llevDebug, "Reading clockdata from %s...", filename);
377 if ((fp = fopen(filename, "r")) == NULL) { 415 if ((fp = fopen (filename, "r")) == NULL)
416 {
378 LOG(llevError, "Can't open %s.\n", filename); 417 LOG (llevError, "Can't open %s.\n", filename);
379 todtick = 0; 418 todtick = 0;
380 write_todclock(); 419 write_todclock ();
381 return; 420 return;
382 } 421 }
383 fscanf(fp, "%lu", &todtick); 422 fscanf (fp, "%lu", &todtick);
384 LOG(llevDebug, "todtick=%lu\n", todtick); 423 LOG (llevDebug, "todtick=%lu\n", todtick);
385 fclose(fp); 424 fclose (fp);
386} 425}
387 426
388/* 427/*
389 * Initializes the attack messages. 428 * Initializes the attack messages.
390 * Called by init_library(). 429 * Called by init_library().
391 */ 430 */
392 431
393//attackmess_t attack_mess[NROFATTACKMESS][MAXATTACKMESS]; 432//attackmess_t attack_mess[NROFATTACKMESS][MAXATTACKMESS];
394 433
434void
395void init_attackmess(void){ 435init_attackmess (void)
436{
396 char buf[MAX_BUF]; 437 char buf[MAX_BUF];
397 char filename[MAX_BUF]; 438 char filename[MAX_BUF];
398 char *cp, *p; 439 char *cp, *p;
399 FILE *fp; 440 FILE *fp;
400 static int has_been_done=0; 441 static int has_been_done = 0;
401 int mess, level, comp; 442 int mess, level, comp;
402 int mode=0, total=0; 443 int mode = 0, total = 0;
403 444
404 if (has_been_done) 445 if (has_been_done)
405 return; 446 return;
406 else 447 else
407 has_been_done = 1; 448 has_been_done = 1;
408 449
409 sprintf(filename, "%s/attackmess", settings.datadir); 450 sprintf (filename, "%s/attackmess", settings.datadir);
410 LOG(llevDebug, "Reading attack messages from %s...", filename); 451 LOG (llevDebug, "Reading attack messages from %s...", filename);
411 if ((fp = open_and_uncompress(filename, 0, &comp)) == NULL) { 452 if ((fp = open_and_uncompress (filename, 0, &comp)) == NULL)
453 {
412 LOG(llevError, "Can't open %s.\n", filename); 454 LOG (llevError, "Can't open %s.\n", filename);
413 return; 455 return;
414 } 456 }
415 457
416 level = 0; 458 level = 0;
417 while (fgets(buf, MAX_BUF, fp)!=NULL) { 459 while (fgets (buf, MAX_BUF, fp) != NULL)
418 if (*buf=='#') continue; 460 {
461 if (*buf == '#')
462 continue;
419 if((cp=strchr(buf,'\n'))!=NULL) 463 if ((cp = strchr (buf, '\n')) != NULL)
420 *cp='\0'; 464 *cp = '\0';
421 cp=buf; 465 cp = buf;
422 while(*cp==' ') /* Skip blanks */ 466 while (*cp == ' ') /* Skip blanks */
423 cp++; 467 cp++;
424 468
425 if (strncmp(cp, "TYPE:", 5)==0) { 469 if (strncmp (cp, "TYPE:", 5) == 0)
470 {
426 p = strtok(buf, ":"); 471 p = strtok (buf, ":");
427 p = strtok(NULL, ":"); 472 p = strtok (NULL, ":");
428 if (mode == 1) { 473 if (mode == 1)
474 {
429 attack_mess[mess][level].level = -1; 475 attack_mess[mess][level].level = -1;
430 attack_mess[mess][level].buf1 = NULL; 476 attack_mess[mess][level].buf1 = NULL;
431 attack_mess[mess][level].buf2 = NULL; 477 attack_mess[mess][level].buf2 = NULL;
432 attack_mess[mess][level].buf3 = NULL; 478 attack_mess[mess][level].buf3 = NULL;
433 } 479 }
434 level = 0; 480 level = 0;
435 mess = atoi(p); 481 mess = atoi (p);
436 mode = 1; 482 mode = 1;
437 continue; 483 continue;
438 } 484 }
439 if (mode==1) { 485 if (mode == 1)
486 {
440 p = strtok(buf, "="); 487 p = strtok (buf, "=");
441 attack_mess[mess][level].level = atoi(buf); 488 attack_mess[mess][level].level = atoi (buf);
442 p = strtok(NULL, "="); 489 p = strtok (NULL, "=");
443 if (p != NULL) 490 if (p != NULL)
444 attack_mess[mess][level].buf1 = strdup_local(p); 491 attack_mess[mess][level].buf1 = strdup_local (p);
445 else 492 else
446 attack_mess[mess][level].buf1 = strdup_local(""); 493 attack_mess[mess][level].buf1 = strdup_local ("");
447 mode = 2; 494 mode = 2;
448 continue; 495 continue;
449 } else if (mode==2) {
450 p = strtok(buf, "=");
451 attack_mess[mess][level].level = atoi(buf);
452 p = strtok(NULL, "=");
453 if (p != NULL)
454 attack_mess[mess][level].buf2 = strdup_local(p);
455 else
456 attack_mess[mess][level].buf2 = strdup_local("");
457 mode = 3;
458 continue;
459 } else if (mode==3) {
460 p = strtok(buf, "=");
461 attack_mess[mess][level].level = atoi(buf);
462 p = strtok(NULL, "=");
463 if (p != NULL)
464 attack_mess[mess][level].buf3 = strdup_local(p);
465 else
466 attack_mess[mess][level].buf3 = strdup_local("");
467 mode = 1;
468 level++;
469 total++;
470 continue;
471 } 496 }
497 else if (mode == 2)
498 {
499 p = strtok (buf, "=");
500 attack_mess[mess][level].level = atoi (buf);
501 p = strtok (NULL, "=");
502 if (p != NULL)
503 attack_mess[mess][level].buf2 = strdup_local (p);
504 else
505 attack_mess[mess][level].buf2 = strdup_local ("");
506 mode = 3;
507 continue;
508 }
509 else if (mode == 3)
510 {
511 p = strtok (buf, "=");
512 attack_mess[mess][level].level = atoi (buf);
513 p = strtok (NULL, "=");
514 if (p != NULL)
515 attack_mess[mess][level].buf3 = strdup_local (p);
516 else
517 attack_mess[mess][level].buf3 = strdup_local ("");
518 mode = 1;
519 level++;
520 total++;
521 continue;
522 }
472 } 523 }
473 LOG(llevDebug, "got %d messages in %d categories.\n", total, mess+1); 524 LOG (llevDebug, "got %d messages in %d categories.\n", total, mess + 1);
474 close_and_delete(fp, comp); 525 close_and_delete (fp, comp);
475} 526}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines