fix remaining getstrtoken uses without null-check.

Conflicts:
	src/economy.c
	src/items.c
	src/kernel/config.c
	src/laws.c
This commit is contained in:
Enno Rehling 2014-09-21 16:43:17 +02:00
parent c5be92a7fc
commit b4f6e3c21d
7 changed files with 96 additions and 77 deletions

View File

@ -22,8 +22,8 @@ exit $2 # otherwise
function build() { function build() {
assert_dir $SOURCE assert_dir $SOURCE
cd $SOURCE cd $SOURCE
git pull || abort "failed to update source. do you have local changes?"
[ -z $1 ] || git checkout $1 [ -z $1 ] || git checkout $1
git pull || abort "failed to update source. do you have local changes?"
s/build || abort "build failed." s/build || abort "build failed."
} }

View File

@ -1823,7 +1823,8 @@ int make_cmd(unit * u, struct order *ord)
cmistake(u, ord, 275, MSG_PRODUCE); cmistake(u, ord, 275, MSG_PRODUCE);
} }
else { else {
direction_t d = get_direction(getstrtoken(), u->faction->locale); const char * s = getstrtoken();
direction_t d = s ? get_direction(s, u->faction->locale) : NODIRECTION;
if (d != NODIRECTION) { if (d != NODIRECTION) {
build_road(r, u, m, d); build_road(r, u, m, d);
} }
@ -2060,6 +2061,8 @@ static void buy(unit * u, request ** buyorders, struct order *ord)
attrib *a; attrib *a;
const item_type *itype = NULL; const item_type *itype = NULL;
const luxury_type *ltype = NULL; const luxury_type *ltype = NULL;
const char *s;
if (u->ship && is_guarded(r, u, GUARD_CREWS)) { if (u->ship && is_guarded(r, u, GUARD_CREWS)) {
cmistake(u, ord, 69, MSG_INCOME); cmistake(u, ord, 69, MSG_INCOME);
return; return;
@ -2134,7 +2137,8 @@ static void buy(unit * u, request ** buyorders, struct order *ord)
/* die Menge der verkauften Güter merken */ /* die Menge der verkauften Güter merken */
a->data.i += n; a->data.i += n;
itype = finditemtype(getstrtoken(), u->faction->locale); s = getstrtoken();
itype = s ? finditemtype(s, u->faction->locale) : 0;
if (itype != NULL) { if (itype != NULL) {
ltype = resource2luxury(itype->rtype); ltype = resource2luxury(itype->rtype);
if (ltype == NULL) { if (ltype == NULL) {

View File

@ -32,39 +32,48 @@
#define MAXGAIN 15 #define MAXGAIN 15
static int static int
use_studypotion(struct unit *u, const struct item_type *itype, int amount, use_studypotion(struct unit *u, const struct item_type *itype, int amount,
struct order *ord) struct order *ord)
{ {
if (getkeyword(u->thisorder) == K_STUDY) { if (getkeyword(u->thisorder) == K_STUDY) {
skill_t sk; skill_t sk = NOSKILL;
skill *sv; skill *sv = 0;
const char * s = getstrtoken();
init_tokens(u->thisorder); attrib *a;
skip_token(); teaching_info *teach;
sk = get_skill(getstrtoken(), u->faction->locale);
sv = unit_skill(u, sk); init_tokens(u->thisorder);
skip_token();
if (sv && sv->level > 2) { if (s) {
/* TODO: message */ sk = get_skill(s, u->faction->locale);
} else if (study_cost(u, sk) > 0) { sv = unit_skill(u, sk);
/* TODO: message */ }
} else { if (sv) {
attrib *a = a_find(u->attribs, &at_learning); if (sv->level > 2) {
teaching_info *teach; /* TODO: message */
if (a == NULL) { return EUNUSABLE;
a = a_add(&u->attribs, a_new(&at_learning)); } else if (study_cost(u, sk) > 0) {
} /* TODO: message */
teach = (teaching_info *) a->data.v; return EUNUSABLE;
if (amount > MAXGAIN) }
amount = MAXGAIN; }
teach->value += amount * 30;
if (teach->value > MAXGAIN * 30) { a = a_find(u->attribs, &at_learning);
teach->value = MAXGAIN * 30; if (a == NULL) {
} a = a_add(&u->attribs, a_new(&at_learning));
i_change(&u->items, itype, -amount); }
return 0;
teach = (teaching_info *) a->data.v;
if (amount > MAXGAIN) {
amount = MAXGAIN;
}
teach->value += amount * 30;
if (teach->value > MAXGAIN * 30) {
teach->value = MAXGAIN * 30;
}
i_change(&u->items, itype, -amount);
return 0;
} }
} return EUNUSABLE;
return EUNUSABLE;
} }
/* END studypotion */ /* END studypotion */

View File

@ -90,47 +90,49 @@ ship *getship(const struct region * r)
static void destroy_road(unit * u, int nmax, struct order *ord) static void destroy_road(unit * u, int nmax, struct order *ord)
{ {
direction_t d = get_direction(getstrtoken(), u->faction->locale); const char *s = getstrtoken();
unit *u2; direction_t d = s ? get_direction(s, u->faction->locale) : NODIRECTION;
region *r = u->region; if (d == NODIRECTION) {
short n = (short)nmax; /* Die Richtung wurde nicht erkannt */
cmistake(u, ord, 71, MSG_PRODUCE);
} else {
unit *u2;
region *r = u->region;
short road, n = (short)nmax;
if (nmax > SHRT_MAX) {
n = SHRT_MAX;
} else if (nmax < 0) {
n = 0;
}
if (nmax > SHRT_MAX) for (u2 = r->units; u2; u2 = u2->next) {
n = SHRT_MAX; if (u2->faction != u->faction && is_guard(u2, GUARD_TAX)
else if (nmax < 0) && cansee(u2->faction, u->region, u, 0)
n = 0; && !alliedunit(u, u2->faction, HELP_GUARD)) {
cmistake(u, ord, 70, MSG_EVENT);
return;
}
}
for (u2 = r->units; u2; u2 = u2->next) { road = rroad(r, d);
if (u2->faction != u->faction && is_guard(u2, GUARD_TAX) n = _min(n, road);
&& cansee(u2->faction, u->region, u, 0) if (n != 0) {
&& !alliedunit(u, u2->faction, HELP_GUARD)) { region *r2 = rconnect(r, d);
cmistake(u, ord, 70, MSG_EVENT); int willdo = eff_skill(u, SK_ROAD_BUILDING, r) * u->number;
return; willdo = _min(willdo, n);
if (willdo == 0) {
/* TODO: error message */
}
if (willdo > SHRT_MAX)
road = 0;
else
road = road - (short)willdo;
rsetroad(r, d, road);
ADDMSG(&u->faction->msgs, msg_message("destroy_road",
"unit from to", u, r, r2));
}
} }
}
if (d == NODIRECTION) {
/* Die Richtung wurde nicht erkannt */
cmistake(u, ord, 71, MSG_PRODUCE);
} else {
short road = rroad(r, d);
n = _min(n, road);
if (n != 0) {
region *r2 = rconnect(r, d);
int willdo = eff_skill(u, SK_ROAD_BUILDING, r) * u->number;
willdo = _min(willdo, n);
if (willdo == 0) {
/* TODO: error message */
}
if (willdo > SHRT_MAX)
road = 0;
else
road = road - (short)willdo;
rsetroad(r, d, road);
ADDMSG(&u->faction->msgs, msg_message("destroy_road",
"unit from to", u, r, r2));
}
}
} }
int destroy_cmd(unit * u, struct order *ord) int destroy_cmd(unit * u, struct order *ord)

View File

@ -1142,7 +1142,8 @@ unsigned int getuint(void)
int getint(void) int getint(void)
{ {
return atoi((const char *)getstrtoken()); const char * s = getstrtoken();
return s ? atoi(s) : 0;
} }
const struct race *findrace(const char *s, const struct locale *lang) const struct race *findrace(const char *s, const struct locale *lang)
@ -1213,7 +1214,8 @@ bool isparam(const char *s, const struct locale * lang, param_t param)
param_t getparam(const struct locale * lang) param_t getparam(const struct locale * lang)
{ {
return findparam(getstrtoken(), lang); const char *s = getstrtoken();
return s ? findparam(s, lang) : NOPARAM;
} }
faction *findfaction(int n) faction *findfaction(int n)

View File

@ -2359,9 +2359,10 @@ int banner_cmd(unit * u, struct order *ord)
{ {
init_tokens(ord); init_tokens(ord);
skip_token(); skip_token();
const char * s = getstrtoken();
free(u->faction->banner); free(u->faction->banner);
u->faction->banner = _strdup(getstrtoken()); u->faction->banner = s ? _strdup(s) : 0;
add_message(&u->faction->msgs, msg_message("changebanner", "value", add_message(&u->faction->msgs, msg_message("changebanner", "value",
u->faction->banner)); u->faction->banner));

View File

@ -59,7 +59,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
static skill_t getskill(const struct locale *lang) static skill_t getskill(const struct locale *lang)
{ {
return get_skill(getstrtoken(), lang); const char * s = getstrtoken();
return s ? get_skill(s, lang) : NOSKILL;
} }
magic_t getmagicskill(const struct locale * lang) magic_t getmagicskill(const struct locale * lang)