Merge pull request #888 from ennorehling/develop

fix tree growth crash, cew CR version
This commit is contained in:
Enno Rehling 2020-01-19 13:56:10 +01:00 committed by GitHub
commit 356bb54bf3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 54 deletions

View File

@ -2933,7 +2933,7 @@ static void print_stats(battle * b)
header = LOC(f->locale, "battle_helpers"); header = LOC(f->locale, "battle_helpers");
for (s2 = b->sides; s2 != b->sides + b->nsides; ++s2) { for (s2 = b->sides; s2 != b->sides + b->nsides; ++s2) {
if (friendly(s2, s)) { if (s2 != s && friendly(s2, s)) {
const char *abbrev = seematrix(f, s2) ? sideabkz(s2, false) : "-?-"; const char *abbrev = seematrix(f, s2) ? sideabkz(s2, false) : "-?-";
rsize = slprintf(bufp, size, "%s %s %d(%s)", rsize = slprintf(bufp, size, "%s %s %d(%s)",
komma++ ? "," : (const char *)header, loc_army, army_index(s2), komma++ ? "," : (const char *)header, loc_army, army_index(s2),

View File

@ -84,7 +84,7 @@ static char g_bigbuf[BUFFERSIZE];
bool opt_cr_absolute_coords = false; bool opt_cr_absolute_coords = false;
/* globals */ /* globals */
#define C_REPORT_VERSION 67 #define C_REPORT_VERSION 68
struct locale *crtag_locale(void) { struct locale *crtag_locale(void) {
static struct locale * lang; static struct locale * lang;
@ -495,38 +495,6 @@ static int cr_curse(variant var, char *buffer, const void *userdata)
/*static int msgno; */ /*static int msgno; */
#define MTMAXHASH 1021
static struct known_mtype {
const struct message_type *mtype;
struct known_mtype *nexthash;
} *mtypehash[MTMAXHASH];
static void report_crtypes(FILE * F, const struct locale *lang)
{
int i;
for (i = 0; i != MTMAXHASH; ++i) {
struct known_mtype *kmt;
for (kmt = mtypehash[i]; kmt; kmt = kmt->nexthash) {
char buffer[DISPLAYSIZE];
int hash = (int)kmt->mtype->key;
assert(hash > 0);
fprintf(F, "MESSAGETYPE %d\n", hash);
fputc('\"', F);
fputs(crescape(nrt_string(kmt->mtype, lang), buffer, sizeof(buffer)), F);
fputs("\";text\n", F);
if (kmt->mtype->section) {
fprintf(F, "\"%s\";section\n", kmt->mtype->section);
}
}
while (mtypehash[i]) {
kmt = mtypehash[i];
mtypehash[i] = mtypehash[i]->nexthash;
free(kmt);
}
}
}
static int message_id(const struct message *msg) static int message_id(const struct message *msg)
{ {
variant var; variant var;
@ -594,19 +562,6 @@ static void render_messages(FILE * F, faction * f, message_list * msgs)
else { else {
log_error("could not render cr-message %p: %s\n", m->msg, m->msg->type->name); log_error("could not render cr-message %p: %s\n", m->msg, m->msg->type->name);
} }
if (printed) {
unsigned int ihash = hash % MTMAXHASH;
struct known_mtype *kmt = mtypehash[ihash];
while (kmt && kmt->mtype != mtype)
kmt = kmt->nexthash;
if (kmt == NULL) {
kmt = (struct known_mtype *)malloc(sizeof(struct known_mtype));
if (!kmt) abort();
kmt->nexthash = mtypehash[ihash];
kmt->mtype = mtype;
mtypehash[ihash] = kmt;
}
}
m = m->next; m = m->next;
} }
} }
@ -1714,7 +1669,6 @@ report_computer(const char *filename, report_context * ctx, const char *bom)
cr_output_region(F, ctx, r); cr_output_region(F, ctx, r);
} }
} }
report_crtypes(F, f->locale);
if (f->locale != crtag_locale()) { if (f->locale != crtag_locale()) {
report_translations(F); report_translations(F);
} }

View File

@ -591,11 +591,11 @@ growing_trees_e3(region * r, const int current_season,
} }
} }
static short cap_short(int i) { static int cap_int(int i, int imin, int imax) {
if (i > SHRT_MIN) { if (i > imin) {
return ((i < SHRT_MAX) ? (short)i : SHRT_MAX); return ((i < imax) ? i : imax);
} }
return SHRT_MIN; return imin;
} }
static void static void
@ -681,8 +681,12 @@ growing_trees(region * r, const season_t current_season, const season_t last_wee
a = a_find(r->attribs, &at_germs); a = a_find(r->attribs, &at_germs);
if (!a) { if (!a) {
a = a_add(&r->attribs, a_new(&at_germs)); a = a_add(&r->attribs, a_new(&at_germs));
a->data.sa[0] = cap_short(rtrees(r, 0)); a->data.sa[0] = (short)cap_int(rtrees(r, 0), 0, SHRT_MAX);
a->data.sa[1] = cap_short(rtrees(r, 1)); a->data.sa[1] = (short)cap_int(rtrees(r, 1), 0, SHRT_MAX);
}
else if (a->data.sa[0] < 0 || a->data.sa[1] << 0) {
a->data.sa[0] = (short)cap_int(a->data.sa[0], 0, SHRT_MAX);
a->data.sa[1] = (short)cap_int(a->data.sa[1], 0, SHRT_MAX);
} }
/* Baumwachstum */ /* Baumwachstum */