subs: Factor lnd_insque() out of lnd_sel(), ask_olist(), ...
... get_dlist(), att_reacting_units(). This loses malloc() error checking in ask_olist() and get_dlist(). No great loss, because we don't check in so many other places, including att_reacting_units(). We should use a wrapper that terminates on error, though. Left for another day. ask_olist(), get_dlist() and att_reacting_units() zero the struct ulist with memset(). lnd_insque() doesn't, so these functions need to zero any members not otherwise initialized explicitly now. Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
parent
e62af86066
commit
62b9399cdf
3 changed files with 26 additions and 35 deletions
|
@ -30,7 +30,7 @@
|
||||||
* Thomas Ruschak, 1992
|
* Thomas Ruschak, 1992
|
||||||
* Ken Stevens, 1995
|
* Ken Stevens, 1995
|
||||||
* Steve McClure, 1998
|
* Steve McClure, 1998
|
||||||
* Markus Armbruster, 2004-2013
|
* Markus Armbruster, 2004-2014
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LAND_H
|
#ifndef LAND_H
|
||||||
|
@ -170,6 +170,7 @@ extern double lnd_fire_range(struct lndstr *);
|
||||||
extern void lnd_sweep(struct emp_qelem *, int, int, natid);
|
extern void lnd_sweep(struct emp_qelem *, int, int, natid);
|
||||||
extern int lnd_interdict(struct emp_qelem *, coord, coord, natid);
|
extern int lnd_interdict(struct emp_qelem *, coord, coord, natid);
|
||||||
extern void lnd_sel(struct nstr_item *, struct emp_qelem *);
|
extern void lnd_sel(struct nstr_item *, struct emp_qelem *);
|
||||||
|
extern struct ulist *lnd_insque(struct lndstr *, struct emp_qelem *);
|
||||||
extern int lnd_check_mines(struct emp_qelem *);
|
extern int lnd_check_mines(struct emp_qelem *);
|
||||||
extern double lnd_pathcost(struct lndstr *, double);
|
extern double lnd_pathcost(struct lndstr *, double);
|
||||||
extern int lnd_mobtype(struct lndstr *);
|
extern int lnd_mobtype(struct lndstr *);
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
* Known contributors to this file:
|
* Known contributors to this file:
|
||||||
* Ken Stevens, 1995
|
* Ken Stevens, 1995
|
||||||
* Steve McClure, 1996-2000
|
* Steve McClure, 1996-2000
|
||||||
* Markus Armbruster, 2006-2013
|
* Markus Armbruster, 2006-2014
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
@ -1068,19 +1068,11 @@ ask_olist(int combat_mode, struct combat *off, struct combat *def,
|
||||||
land_answer[(int)land.lnd_army] != 'Y')
|
land_answer[(int)land.lnd_army] != 'Y')
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!(llp = malloc(sizeof(struct ulist)))) {
|
llp = lnd_insque(&land, olist);
|
||||||
logerror("Malloc failed in attack!\n");
|
|
||||||
abort_attack();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
memset(llp, 0, sizeof(struct ulist));
|
|
||||||
emp_insque(&llp->queue, olist);
|
|
||||||
llp->supplied = 1;
|
llp->supplied = 1;
|
||||||
llp->mobil = mobcost;
|
llp->mobil = mobcost;
|
||||||
llp->unit.land = land;
|
|
||||||
llp->x = llp->unit.land.lnd_x;
|
llp->x = llp->unit.land.lnd_x;
|
||||||
llp->y = llp->unit.land.lnd_y;
|
llp->y = llp->unit.land.lnd_y;
|
||||||
llp->chrp = (struct empobj_chr *)&lchr[(int)llp->unit.land.lnd_type];
|
|
||||||
llp->eff = llp->unit.land.lnd_effic;
|
llp->eff = llp->unit.land.lnd_effic;
|
||||||
if (lnd_spyval(&land) > *a_spyp)
|
if (lnd_spyval(&land) > *a_spyp)
|
||||||
*a_spyp = lnd_spyval(&land);
|
*a_spyp = lnd_spyval(&land);
|
||||||
|
@ -1199,18 +1191,11 @@ get_dlist(struct combat *def, struct emp_qelem *list, int a_spy,
|
||||||
continue;
|
continue;
|
||||||
intelligence_report(player->cnum, &land, a_spy,
|
intelligence_report(player->cnum, &land, a_spy,
|
||||||
"Scouts report defending unit:");
|
"Scouts report defending unit:");
|
||||||
if (!(llp = malloc(sizeof(struct ulist)))) {
|
llp = lnd_insque(&land, list);
|
||||||
logerror("Malloc failed in attack!\n");
|
|
||||||
abort_attack();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
memset(llp, 0, sizeof(struct ulist));
|
|
||||||
emp_insque(&llp->queue, list);
|
|
||||||
llp->supplied = lnd_supply_all(&land);
|
llp->supplied = lnd_supply_all(&land);
|
||||||
llp->unit.land = land;
|
llp->mobil = 0.0;
|
||||||
llp->x = llp->unit.land.lnd_x;
|
llp->x = llp->unit.land.lnd_x;
|
||||||
llp->y = llp->unit.land.lnd_y;
|
llp->y = llp->unit.land.lnd_y;
|
||||||
llp->chrp = (struct empobj_chr *)&lchr[(int)llp->unit.land.lnd_type];
|
|
||||||
llp->eff = llp->unit.land.lnd_effic;
|
llp->eff = llp->unit.land.lnd_effic;
|
||||||
if (lnd_spyval(&land) > *d_spyp)
|
if (lnd_spyval(&land) > *d_spyp)
|
||||||
*d_spyp = lnd_spyval(&land);
|
*d_spyp = lnd_spyval(&land);
|
||||||
|
@ -1508,16 +1493,12 @@ att_reacting_units(struct combat *def, struct emp_qelem *list, int a_spy,
|
||||||
wu(0, land.lnd_own, "%s reacts to %s.\n",
|
wu(0, land.lnd_own, "%s reacts to %s.\n",
|
||||||
prland(&land), xyas(land.lnd_x, land.lnd_y, land.lnd_own));
|
prland(&land), xyas(land.lnd_x, land.lnd_y, land.lnd_own));
|
||||||
|
|
||||||
llp = malloc(sizeof(struct ulist));
|
llp = lnd_insque(&land, list);
|
||||||
|
|
||||||
memset(llp, 0, sizeof(struct ulist));
|
|
||||||
llp->supplied = 1;
|
llp->supplied = 1;
|
||||||
|
llp->mobil = 0.0;
|
||||||
llp->x = origx;
|
llp->x = origx;
|
||||||
llp->y = origy;
|
llp->y = origy;
|
||||||
llp->chrp = (struct empobj_chr *)&lchr[(int)land.lnd_type];
|
|
||||||
llp->unit.land = land;
|
|
||||||
llp->eff = land.lnd_effic;
|
llp->eff = land.lnd_effic;
|
||||||
emp_insque(&llp->queue, list);
|
|
||||||
if (lnd_spyval(&land) > *d_spyp)
|
if (lnd_spyval(&land) > *d_spyp)
|
||||||
*d_spyp = lnd_spyval(&land);
|
*d_spyp = lnd_spyval(&land);
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
* Known contributors to this file:
|
* Known contributors to this file:
|
||||||
* Ken Stevens, 1995
|
* Ken Stevens, 1995
|
||||||
* Steve McClure, 1998-2000
|
* Steve McClure, 1998-2000
|
||||||
* Markus Armbruster, 2004-2012
|
* Markus Armbruster, 2004-2014
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
@ -396,8 +396,6 @@ void
|
||||||
lnd_sel(struct nstr_item *ni, struct emp_qelem *list)
|
lnd_sel(struct nstr_item *ni, struct emp_qelem *list)
|
||||||
{
|
{
|
||||||
struct lndstr land;
|
struct lndstr land;
|
||||||
struct lchrstr *lcp;
|
|
||||||
struct ulist *llp;
|
|
||||||
int this_mot;
|
int this_mot;
|
||||||
int mobtype = MOB_MOVE; /* indeterminate */
|
int mobtype = MOB_MOVE; /* indeterminate */
|
||||||
|
|
||||||
|
@ -436,20 +434,31 @@ lnd_sel(struct nstr_item *ni, struct emp_qelem *list)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lcp = &lchr[(int)land.lnd_type];
|
|
||||||
land.lnd_mission = 0;
|
land.lnd_mission = 0;
|
||||||
land.lnd_rflags = 0;
|
land.lnd_rflags = 0;
|
||||||
land.lnd_harden = 0;
|
land.lnd_harden = 0;
|
||||||
memset(land.lnd_rpath, 0, sizeof(land.lnd_rpath));
|
memset(land.lnd_rpath, 0, sizeof(land.lnd_rpath));
|
||||||
putland(land.lnd_uid, &land);
|
putland(land.lnd_uid, &land);
|
||||||
llp = malloc(sizeof(struct ulist));
|
lnd_insque(&land, list);
|
||||||
llp->chrp = (struct empobj_chr *)lcp;
|
|
||||||
llp->unit.land = land;
|
|
||||||
llp->mobil = land.lnd_mobil;
|
|
||||||
emp_insque(&llp->queue, list);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Append LP to LIST.
|
||||||
|
* Return the new list link.
|
||||||
|
*/
|
||||||
|
struct ulist *
|
||||||
|
lnd_insque(struct lndstr *lp, struct emp_qelem *list)
|
||||||
|
{
|
||||||
|
struct ulist *mlp = malloc(sizeof(struct ulist));
|
||||||
|
|
||||||
|
mlp->chrp = (struct empobj_chr *)&lchr[lp->lnd_type];
|
||||||
|
mlp->unit.land = *lp;
|
||||||
|
mlp->mobil = lp->lnd_mobil;
|
||||||
|
emp_insque(&mlp->queue, list);
|
||||||
|
return mlp;
|
||||||
|
}
|
||||||
|
|
||||||
/* This function assumes that the list was created by lnd_sel */
|
/* This function assumes that the list was created by lnd_sel */
|
||||||
void
|
void
|
||||||
lnd_mar(struct emp_qelem *list, double *minmobp, double *maxmobp,
|
lnd_mar(struct emp_qelem *list, double *minmobp, double *maxmobp,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue