forked from github/server
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:
parent
c5be92a7fc
commit
b4f6e3c21d
|
@ -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."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
73
src/items.c
73
src/items.c
|
@ -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 */
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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));
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue