Merge pull request #782 from ennorehling/develop

crash fix
This commit is contained in:
Enno Rehling 2018-05-20 17:27:19 +02:00 committed by GitHub
commit f1d76808d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 172 additions and 142 deletions

2
clibs

@ -1 +1 @@
Subproject commit 147584ad70b220abf6a4e97ca76e785729b9ac32
Subproject commit f9842e07a442c5453c270badf25ab72633b4edf5

View File

@ -17,9 +17,7 @@ msgstr "Rostiges Kettenhemd"
msgctxt "spellinfo"
msgid "destroy_magic"
msgstr ""
"Dieser Zauber ermöglicht dem Magier, Verzauberungen "
"einer Einheit, eines Schiffes, Gebäudes oder auch "
"der Region aufzulösen."
"Dieser Zauber ermöglicht dem Magier, Verzauberungen einer Einheit, eines Schiffes, Gebäudes oder auch der Region aufzulösen."
msgctxt "spell"
msgid "shadowknights"
@ -168,9 +166,6 @@ msgstr "TRÄNKE"
msgid "northwest"
msgstr "Nordwesten"
msgid "spinx09"
msgstr "Das Schiff mit dem Stern im Wappen liegt neben dem der einen Mandelkern hat"
msgctxt "iteminfo"
msgid "cookie"
msgstr "Kleines trockenes Dauergebäck, m od. s; - u. -es, - u. -e"

View File

@ -486,3 +486,13 @@ function test_rising_undead()
assert_equal(2, u.number)
assert_equal(u.number, u:get_item('rustysword'))
end
function test_dwarf_mining()
local f = faction.create('dwarf')
local r = region.create(0, 0, 'plain')
local u = unit.create(f, r)
u.name = 'Xolgrim'
u:set_skill('mining', 2)
assert_equal(2, u:get_skill('mining'))
assert_equal(4, u:eff_skill('mining'))
end

View File

@ -85,13 +85,15 @@ static void test_steal_okay(CuTest * tc) {
struct steal env;
race *rc;
struct terrain_type *ter;
message *msg;
test_setup();
ter = test_create_terrain("plain", LAND_REGION);
rc = test_create_race("human");
rc->flags = 0;
setup_steal(&env, ter, rc);
CuAssertPtrEquals(tc, 0, steal_message(env.u, 0));
CuAssertPtrEquals(tc, NULL, msg = steal_message(env.u, 0));
assert(!msg);
test_teardown();
}
@ -739,6 +741,7 @@ static void test_expand_production(CuTest *tc) {
CuAssertPtrEquals(tc, u, results[0]->unit);
CuAssertPtrEquals(tc, u, results[1]->unit);
CuAssertIntEquals(tc, 0, u->n);
free(results);
test_teardown();
}

View File

@ -40,12 +40,15 @@ static void setup_give(struct give *env) {
env->r = test_create_region(0, 0, ter);
env->src = test_create_unit(env->f1, env->r);
env->dst = env->f2 ? test_create_unit(env->f2, env->r) : 0;
env->itype = it_get_or_create(rt_get_or_create("money"));
env->itype->flags |= ITF_HERB;
if (env->f1 && env->f2) {
if (env->f2) {
ally * al = ally_add(&env->f2->allies, env->f1);
al->status = HELP_GIVE;
env->dst = test_create_unit(env->f2, env->r);
}
else {
env->dst = NULL;
}
if (env->lang) {
locale_setstring(env->lang, env->itype->rtype->_name, "SILBER");
@ -139,10 +142,12 @@ static void test_give_unit_to_ocean(CuTest * tc) {
static void test_give_men(CuTest * tc) {
struct give env = { 0 };
message * msg;
test_setup_ex(tc);
env.f2 = env.f1 = test_create_faction(NULL);
setup_give(&env);
CuAssertPtrEquals(tc, 0, give_men(1, env.src, env.dst, NULL));
CuAssertPtrEquals(tc, NULL, msg = give_men(1, env.src, env.dst, NULL));
assert(!msg);
CuAssertIntEquals(tc, 2, env.dst->number);
CuAssertIntEquals(tc, 0, env.src->number);
test_teardown();
@ -222,10 +227,13 @@ static void test_give_men_in_ocean(CuTest * tc) {
static void test_give_men_too_many(CuTest * tc) {
struct give env = { 0 };
message * msg;
test_setup_ex(tc);
env.f2 = env.f1 = test_create_faction(NULL);
setup_give(&env);
CuAssertPtrEquals(tc, 0, give_men(2, env.src, env.dst, NULL));
CuAssertPtrEquals(tc, NULL, msg = give_men(2, env.src, env.dst, NULL));
assert(!msg);
CuAssertIntEquals(tc, 2, env.dst->number);
CuAssertIntEquals(tc, 0, env.src->number);
test_teardown();

View File

@ -7,6 +7,8 @@
#include <CuTest.h>
#include <tests.h>
#include <assert.h>
void test_missing_message(CuTest *tc) {
message *msg;
@ -78,6 +80,7 @@ static void test_merge_split(CuTest *tc) {
static void test_noerror(CuTest *tc) {
unit *u;
struct locale *lang;
message *msg;
test_setup();
lang = test_create_locale();
@ -85,8 +88,10 @@ static void test_noerror(CuTest *tc) {
u->thisorder = parse_order("!@move", lang);
CuAssertIntEquals(tc, K_MOVE | CMD_QUIET | CMD_PERSIST, u->thisorder->command);
CuAssertTrue(tc, !is_persistent(u->thisorder));
CuAssertPtrEquals(tc, NULL, msg_error(u, u->thisorder, 100));
CuAssertPtrEquals(tc, NULL, msg_feedback(u, u->thisorder, "error_unit_not_found", NULL));
CuAssertPtrEquals(tc, NULL, msg = msg_error(u, u->thisorder, 100));
assert(!msg);
CuAssertPtrEquals(tc, NULL, msg = msg_feedback(u, u->thisorder, "error_unit_not_found", NULL));
assert(!msg);
test_teardown();
}

View File

@ -239,6 +239,7 @@ static void test_is_persistent(CuTest *tc) {
ord = parse_order("@invalid", lang);
CuAssertPtrEquals(tc, NULL, ord);
free_order(ord);
ord = parse_order("give", lang);
CuAssertIntEquals(tc, K_GIVE, ord->command);
@ -290,6 +291,7 @@ static void test_is_silent(CuTest *tc) {
ord = parse_order("@invalid", lang);
CuAssertPtrEquals(tc, NULL, ord);
free_order(ord);
ord = parse_order("// comment", lang);
CuAssertTrue(tc, is_persistent(ord));

View File

@ -723,8 +723,9 @@ rp_messages(struct stream *out, message_list * msgs, faction * viewer, int inden
int k = 0;
struct mlist *m = msgs->begin;
while (m) {
/* messagetype * mt = m->type; */
if (!categorized || strcmp(m->msg->type->section, section) == 0) {
/* categorized messages need a section: */
assert(!categorized || (m->msg->type->section != NULL));
if (!categorized || m->msg->type->section == section) {
char lbuf[8192];
if (!k && categorized) {
@ -1037,6 +1038,9 @@ void report_region(struct stream *out, const region * r, faction * f)
if (wrptr(&bufp, &size, bytes) != 0)
WARN_STATIC_BUFFER();
if (is_mourning(r, turn + 1)) {
bytes = (int)str_strlcpy(bufp, " ", size);
if (wrptr(&bufp, &size, bytes) != 0)
WARN_STATIC_BUFFER();
bytes = (int)str_strlcpy(bufp, LOC(f->locale, "nr_mourning"), size);
if (wrptr(&bufp, &size, bytes) != 0)
WARN_STATIC_BUFFER();
@ -1877,6 +1881,9 @@ nr_building(struct stream *out, const region *r, const building *b, const factio
}
if (!building_finished(b)) {
bytes = (int)str_strlcpy(bufp, " ", size);
if (wrptr(&bufp, &size, bytes) != 0)
WARN_STATIC_BUFFER();
bytes = (int)str_strlcpy(bufp, LOC(lang, "nr_building_inprogress"), size);
if (wrptr(&bufp, &size, bytes) != 0)
WARN_STATIC_BUFFER();
@ -2306,11 +2313,11 @@ report_plaintext(const char *filename, report_context * ctx,
message_list *mlist = r_getmessages(r, f);
if (mlist) {
struct mlist **split = merge_messages(mlist, r->msgs);
rp_messages(out, mlist, f, 0, true);
rp_messages(out, mlist, f, 0, false);
split_messages(mlist, split);
}
else {
rp_messages(out, r->msgs, f, 0, true);
rp_messages(out, r->msgs, f, 0, false);
}
}

View File

@ -111,7 +111,8 @@ size_t str_slprintf(char * dst, size_t size, const char * format, ...)
return (size_t)result;
}
void str_replace(char *buffer, size_t size, const char *tmpl, const char *var, const char *value)
void str_replace(char *buffer, size_t size, const char *tmpl, const char *var,
const char *value)
{
size_t val_len = strlen(value);
size_t var_len = strlen(var);
@ -154,8 +155,7 @@ int str_hash(const char *s)
return key & 0x7FFFFFFF;
}
const char *str_escape(const char *str, char *buffer,
size_t len)
const char *str_escape(const char *str, char *buffer, size_t len)
{
const char *handle_start = strchr(str, '\"');
if (!handle_start) handle_start = strchr(str, '\\');