From a46d60aa97b846163c78ca0fd091d40deb8010d4 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 12 May 2015 14:28:25 -0700 Subject: [PATCH 1/8] enable -Wconversion on gcc/clang builds fix some of the warnings coming out of that for battle.c --- src/CMakeLists.txt | 4 ++-- src/battle.c | 42 ++++++++++++++++++++++-------------------- src/battle.h | 2 +- src/spells.c | 2 +- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9e1a7bfca..ea2c8d0e7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,10 +13,10 @@ include_directories (${BSON_INCLUDE_DIR}) include_directories (${INIPARSER_INCLUDE_DIR}) IF(CMAKE_COMPILER_IS_GNUCC) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic -Wall -Werror -Wno-unknown-pragmas -Wstrict-prototypes -Wpointer-arith -Wno-char-subscripts -Wno-long-long") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic -Wall -Wconversion -Werror -Wno-unknown-pragmas -Wstrict-prototypes -Wpointer-arith -Wno-char-subscripts -Wno-long-long") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -DHAVE__BOOL") elseif(MSVC) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4 /WX /MP") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Wall /WX /MP") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrt.lib") set(CMAKE_EXE_LINKER_FLAGS_RELEASE diff --git a/src/battle.c b/src/battle.c index 1484ccfa3..803124b4d 100644 --- a/src/battle.c +++ b/src/battle.c @@ -307,7 +307,7 @@ fighter *select_corpse(battle * b, fighter * af) maxcasualties += s->casualties; } } - di = rng_int() % maxcasualties; + di = (int)(rng_int() % maxcasualties); for (s = b->sides; s != b->sides + b->nsides; ++s) { for (df = s->fighters; df; df = df->next) { /* Geflohene haben auch 0 hp, dürfen hier aber nicht ausgewählt @@ -487,7 +487,7 @@ contest_classic(int skilldiff, const armor_type * ar, const armor_type * sh) vw = (int)(100 - ((100 - vw) * mod)); do { - p = rng_int() % 100; + p = (int)(rng_int() % 100); vw -= p; } while (vw >= 0 && p >= 90); return (vw <= 0); @@ -1019,7 +1019,8 @@ static int natural_armor(unit * du) static int *bonus = 0; int an = u_race(du)->armor; if (bonus == 0) { - bonus = calloc(sizeof(int), num_races); + assert(num_races > 0); + bonus = calloc((size_t)num_races, sizeof(int)); } if (bonus[u_race(du)->index] == 0) { bonus[u_race(du)->index] = @@ -1506,7 +1507,7 @@ troop select_enemy(fighter * af, int minrow, int maxrow, int select) if (enemies <= 0) return no_troop; - selected = rng_int() % enemies; + selected = (int)(rng_int() % enemies); for (si = 0; as->enemies[si]; ++si) { side *ds = as->enemies[si]; fighter *df; @@ -1866,9 +1867,9 @@ static void do_extra_spell(troop at, const att * a) log_error("spell '%s' has no function.\n", sp->sname); } else { - int level = a->level; + float force = (float)(a->level * MagicPower()); assert(a->level > 0); - cast_combatspell(at, sp, level, level * MagicPower()); + cast_combatspell(at, sp, a->level, force); } } @@ -2468,7 +2469,7 @@ troop select_ally(fighter * af, int minrow, int maxrow, int allytype) if (!allies) { return no_troop; } - allies = rng_int() % allies; + allies = (int)(rng_int() % allies); for (ds = b->sides; ds != b->sides + b->nsides; ++ds) { if ((allytype == ALLY_ANY && helping(as, ds)) || (allytype == ALLY_SELF @@ -2503,7 +2504,7 @@ static int loot_quota(const unit * src, const unit * dst, assert(divisor == 0 || divisor >= 1); } if (divisor >= 1) { - double r = n / divisor; + double r = (float)n / divisor; int x = (int)r; r = r - x; @@ -2527,8 +2528,8 @@ static void loot_items(fighter * corpse) return; while (itm) { - float lootfactor = dead / (float)u->number; /* only loot the dead! */ - int maxloot = (int)(itm->number * lootfactor); + float lootfactor = (float)dead / (float)u->number; /* only loot the dead! */ + int maxloot = (int)((float)itm->number * lootfactor); if (maxloot > 0) { int i = _min(10, maxloot); for (; i != 0; --i) { @@ -2863,7 +2864,7 @@ static void aftermath(battle * b) float dmg = get_param_flt(global.parameters, "rules.ship.damage.battleround", 0.05F); - damage_ship(sh, dmg * n); + damage_ship(sh, dmg * (float)n); freset(sh, SF_DAMAGED); } } @@ -3176,7 +3177,7 @@ side * get_side(battle * b, const struct unit * u) return 0; } -side * find_side(battle * b, const faction * f, const group * g, int flags, const faction * stealthfaction) +side * find_side(battle * b, const faction * f, const group * g, unsigned int flags, const faction * stealthfaction) { side * s; static int rule_anon_battle = -1; @@ -3186,8 +3187,8 @@ side * find_side(battle * b, const faction * f, const group * g, int flags, cons } for (s = b->sides; s != b->sides + b->nsides; ++s) { if (s->faction == f && s->group == g) { - int s1flags = flags | SIDE_HASGUARDS; - int s2flags = s->flags | SIDE_HASGUARDS; + unsigned int s1flags = flags | SIDE_HASGUARDS; + unsigned int s2flags = s->flags | SIDE_HASGUARDS; if (rule_anon_battle && s->stealthfaction != stealthfaction) { continue; } @@ -3205,7 +3206,6 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack) weapon weapons[WMAX]; int owp[WMAX]; int dwp[WMAX]; - int w = 0; region *r = b->region; item *itm; fighter *fig = NULL; @@ -3271,7 +3271,8 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack) fig->catmsg = -1; /* Freigeben nicht vergessen! */ - fig->person = (struct person*)calloc(fig->alive, sizeof(struct person)); + assert(fig->alive > 0); + fig->person = (struct person*)calloc((size_t)fig->alive, sizeof(struct person)); h = u->hp / u->number; assert(h); @@ -3330,7 +3331,7 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack) /* Für alle Waffengattungen wird bestimmt, wie viele der Personen mit * ihr kämpfen könnten, und was ihr Wert darin ist. */ if (u_race(u)->battle_flags & BF_EQUIPMENT) { - int oi = 0, di = 0; + int oi = 0, di = 0, w = 0; for (itm = u->items; itm && w != WMAX; itm = itm->next) { const weapon_type *wtype = resource2weapon(itm->type->rtype); if (wtype == NULL || itm->number == 0) @@ -3345,8 +3346,9 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack) } assert(w != WMAX); } - fig->weapons = (weapon *)calloc(sizeof(weapon), w + 1); - memcpy(fig->weapons, weapons, w * sizeof(weapon)); + assert(w >= 0); + fig->weapons = (weapon *)calloc(sizeof(weapon), (size_t)(w + 1)); + memcpy(fig->weapons, weapons, (size_t)(w * sizeof(weapon))); for (i = 0; i != w; ++i) { int j, o = 0, d = 0; @@ -3485,7 +3487,7 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack) int rnd; do { - rnd = rng_int() % 100; + rnd = (int)(rng_int() % 100); if (rnd >= 40 && rnd <= 69) p_bonus += 1; else if (rnd <= 89) diff --git a/src/battle.h b/src/battle.h index d144da30d..9bf500ed9 100644 --- a/src/battle.h +++ b/src/battle.h @@ -227,7 +227,7 @@ extern "C" { /* BEGIN battle interface */ void battle_init(battle * b); void battle_free(battle * b); - side * find_side(battle * b, const struct faction * f, const struct group * g, int flags, const struct faction * stealthfaction); + side * find_side(battle * b, const struct faction * f, const struct group * g, unsigned int flags, const struct faction * stealthfaction); side * get_side(battle * b, const struct unit * u); fighter * get_fighter(battle * b, const struct unit * u); /* END battle interface */ diff --git a/src/spells.c b/src/spells.c index 734858745..86154bd2e 100644 --- a/src/spells.c +++ b/src/spells.c @@ -908,7 +908,7 @@ static int sp_summonent(castorder * co) return 0; } - ents = (int)_min(power * power, rtrees(r, 2)); + ents = _min((int)(power * power), rtrees(r, 2)); u = create_unit(r, mage->faction, ents, get_race(RC_TREEMAN), 0, NULL, mage); From fe29e29c317a47958b0e4a4ec8e0820b1c2b48c2 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 15 May 2015 06:43:47 +0200 Subject: [PATCH 2/8] fix -Wconversion for move.c --- src/move.c | 25 ++++++++++++++----------- src/move.h | 2 +- src/util/bsdstring.c | 2 +- src/util/bsdstring.h | 2 +- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/move.c b/src/move.c index 54864b89e..0812ae794 100644 --- a/src/move.c +++ b/src/move.c @@ -984,7 +984,7 @@ static bool is_guardian_r(const unit * guard) return true; } -bool is_guard(const struct unit * u, int mask) +bool is_guard(const struct unit * u, unsigned int mask) { return is_guardian_r(u) && (getguard(u) & mask) != 0; } @@ -1140,7 +1140,8 @@ static const char *shortdirections[MAXDIRECTIONS] = { static void cycle_route(order * ord, unit * u, int gereist) { - int bytes, cm = 0; + size_t bytes; + int cm = 0; char tail[1024], *bufp = tail; char neworder[2048]; char token[128]; @@ -1180,11 +1181,11 @@ static void cycle_route(order * ord, unit * u, int gereist) if (!pause) { const char *loc = LOC(lang, shortdirections[d]); if (bufp != tail) { - bytes = (int)strlcpy(bufp, " ", size); + bytes = strlcpy(bufp, " ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } - bytes = (int)strlcpy(bufp, loc, size); + bytes = strlcpy(bufp, loc, size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -1193,10 +1194,10 @@ static void cycle_route(order * ord, unit * u, int gereist) break; else if (cm == gereist && !paused && pause) { const char *loc = LOC(lang, parameters[P_PAUSE]); - bytes = (int)strlcpy(bufp, " ", size); + bytes = strlcpy(bufp, " ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, loc, size); + bytes = strlcpy(bufp, loc, size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); paused = true; @@ -1565,8 +1566,9 @@ static arg_regions *var_copy_regions(const region_list * begin, int size) if (size > 0) { int i = 0; + assert(size>0); arg_regions *dst = - (arg_regions *)malloc(sizeof(arg_regions) + sizeof(region *) * size); + (arg_regions *)malloc(sizeof(arg_regions) + sizeof(region *) * (size_t)size); dst->nregions = size; dst->regions = (region **)(dst + 1); for (rsrc = begin; i != size; rsrc = rsrc->next) { @@ -2536,7 +2538,8 @@ static direction_t hunted_dir(attrib * at, int id) static int hunt(unit * u, order * ord) { region *rc = u->region; - int bytes, moves, id, speed; + size_t bytes; + int moves, id, speed; char command[256], *bufp = command; size_t size = sizeof(command); direction_t dir; @@ -2581,7 +2584,7 @@ static int hunt(unit * u, order * ord) moves = 1; - speed = getuint(); + speed = (int)getuint(); if (speed == 0) { speed = shipspeed(u->ship, u); } @@ -2592,10 +2595,10 @@ static int hunt(unit * u, order * ord) } rc = rconnect(rc, dir); while (moves < speed && (dir = hunted_dir(rc->attribs, id)) != NODIRECTION) { - bytes = (int)strlcpy(bufp, " ", size); + bytes = strlcpy(bufp, " ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, LOC(u->faction->locale, directions[dir]), size); + bytes = strlcpy(bufp, LOC(u->faction->locale, directions[dir]), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); moves++; diff --git a/src/move.h b/src/move.h index 11e6b3954..f1c20d622 100644 --- a/src/move.h +++ b/src/move.h @@ -60,7 +60,7 @@ extern "C" { void movement(void); void run_to(struct unit *u, struct region *to); struct unit *is_guarded(struct region *r, struct unit *u, unsigned int mask); - bool is_guard(const struct unit *u, int mask); + bool is_guard(const struct unit *u, unsigned int mask); int enoughsailors(const struct ship *sh, const struct region *r); bool canswim(struct unit *u); bool canfly(struct unit *u); diff --git a/src/util/bsdstring.c b/src/util/bsdstring.c index f1694eed6..2cbf630d6 100644 --- a/src/util/bsdstring.c +++ b/src/util/bsdstring.c @@ -7,7 +7,7 @@ #include "bsdstring.h" -int wrptr(char **ptr, size_t * size, int bytes) +int wrptr(char **ptr, size_t * size, size_t bytes) { if (bytes == 0) { return 0; diff --git a/src/util/bsdstring.h b/src/util/bsdstring.h index 91b89465d..200ca30a6 100644 --- a/src/util/bsdstring.h +++ b/src/util/bsdstring.h @@ -2,7 +2,7 @@ #define UTIL_BSDSTRING_H #include -extern int wrptr(char **ptr, size_t * size, int bytes); +extern int wrptr(char **ptr, size_t * size, size_t bytes); #ifndef HAVE_STRLCPY extern size_t strlcpy(char *dst, const char *src, size_t siz); From d2af6a2f88bad2151c0db5d43707de5e67dcc2c1 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 15 May 2015 07:07:21 +0200 Subject: [PATCH 3/8] fix -Wconversion in spells.c --- src/spells.c | 36 +++++++++++++++++++----------------- src/util/rng.h | 3 ++- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/spells.c b/src/spells.c index 86154bd2e..5905d4119 100644 --- a/src/spells.c +++ b/src/spells.c @@ -490,7 +490,7 @@ static const race *select_familiar(const race * magerace, magic_t magiegebiet) unsigned int maxlen = listlen(familiarraces); if (maxlen > 0) { race_list *rclist = familiarraces; - int index = rng_int() % maxlen; + unsigned int index = rng_uint() % maxlen; while (index-- > 0) { rclist = rclist->next; } @@ -536,7 +536,8 @@ static int sp_summon_familiar(castorder * co) int cast_level = co->level; const race *rc; int sk; - int dh, dh1, bytes; + int dh, dh1; + size_t bytes; message *msg; char zText[2048], *bufp = zText; size_t size = sizeof(zText) - 1; @@ -597,17 +598,17 @@ static int sp_summon_familiar(castorder * co) else { if (dh == 0) { bytes = - (int)strlcpy(bufp, (const char *)LOC(mage->faction->locale, + strlcpy(bufp, (const char *)LOC(mage->faction->locale, "list_and"), size); } else { - bytes = (int)strlcpy(bufp, (const char *)", ", size); + bytes = strlcpy(bufp, (const char *)", ", size); } if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } bytes = - (int)strlcpy(bufp, (const char *)skillname((skill_t)sk, mage->faction->locale), + strlcpy(bufp, (const char *)skillname((skill_t)sk, mage->faction->locale), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -1299,16 +1300,17 @@ static int sp_rosthauch(castorder * co) for (; iweapon != NULL; iweapon = iweapon->next) { item **ip = i_find(&u->items, iweapon->type); if (*ip) { - int i = _min((*ip)->number, force); + float chance = (float)_min((*ip)->number, force); if (iweapon->chance < 1.0) { - i = (int)(i * iweapon->chance); + chance *= iweapon->chance; } - if (i > 0) { - force -= i; - ironweapon += i; - i_change(ip, iweapon->type, -i); + if (chance > 0) { + int ichange = (int)chance; + force -= ichange; + ironweapon += ichange; + i_change(ip, iweapon->type, -ichange); if (iweapon->rusty) { - i_change(&u->items, iweapon->rusty, i); + i_change(&u->items, iweapon->rusty, ichange); } } } @@ -4004,7 +4006,7 @@ static int sp_recruit(castorder * co) * Bauer, nur die Kosten steigen. */ n = (pow(force, 1.6) * 100) / f->race->recruitcost; if (rc->recruit_multi != 0) { - double multp = maxp / rc->recruit_multi; + double multp = (double)maxp / rc->recruit_multi; n = _min(multp, n); n = _max(n, 1); rsetpeasants(r, maxp - (int)(n * rc->recruit_multi)); @@ -4054,7 +4056,7 @@ static int sp_bigrecruit(castorder * co) /* Fuer vergleichbare Erfolge bei unterschiedlichen Rassen die * Rekrutierungskosten mit einfliessen lassen. */ - n = (int)force + lovar((force * force * 1000) / f->race->recruitcost); + n = (int)force + lovar((force * force * 1000) / (float)f->race->recruitcost); if (f->race == get_race(RC_ORC)) { n = _min(2 * maxp, n); n = _max(n, 1); @@ -4197,7 +4199,7 @@ static int sp_seduce(castorder * co) loot += rng_int() % 2; } if (loot > 0) { - loot = (int)_min(loot, force * 5); + loot = _min(loot, (int)(force * 5)); } } if (loot > 0) { @@ -4314,7 +4316,7 @@ static int sp_headache(castorder * co) } if (smax != NULL) { /* wirkt auf maximal 10 Personen */ - int change = _min(10, target->number) * (rng_int() % 2 + 1) / target->number; + unsigned int change = _min(10, target->number) * (rng_uint() % 2 + 1) / target->number; reduce_skill(target, smax, change); } set_order(&target->thisorder, NULL); @@ -4358,7 +4360,7 @@ static int sp_raisepeasants(castorder * co) "error_nopeasants", "")); return 0; } - bauern = (int)_min(rpeasants(r), power * 250); + bauern = _min(rpeasants(r), (int)(power * 250)); rsetpeasants(r, rpeasants(r) - bauern); u2 = diff --git a/src/util/rng.h b/src/util/rng.h index 2e8e5affb..1cc95d094 100644 --- a/src/util/rng.h +++ b/src/util/rng.h @@ -29,7 +29,8 @@ extern "C" { long genrand_int31(void); # define rng_init(seed) init_genrand(seed) -# define rng_int genrand_int31 +# define rng_int (int)genrand_int31 +# define rng_uint (unsigned int)genrand_int32 # define rng_double genrand_real2 # define RNG_RAND_MAX 0x7fffffff #else From ca585de3320a439ef979dcdd91df7783d7d510fe Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 15 May 2015 08:02:54 +0200 Subject: [PATCH 4/8] fix -Wconversion in battle.c --- src/battle.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/battle.c b/src/battle.c index 803124b4d..feebe80d4 100644 --- a/src/battle.c +++ b/src/battle.c @@ -1867,7 +1867,7 @@ static void do_extra_spell(troop at, const att * a) log_error("spell '%s' has no function.\n", sp->sname); } else { - float force = (float)(a->level * MagicPower()); + float force = (float)a->level * MagicPower(); assert(a->level > 0); cast_combatspell(at, sp, a->level, force); } @@ -2965,19 +2965,19 @@ static void print_header(battle * b) side *s; char *bufp = zText; size_t size = sizeof(zText) - 1; - int bytes; + size_t bytes; for (s = b->sides; s != b->sides + b->nsides; ++s) { fighter *df; for (df = s->fighters; df; df = df->next) { if (is_attacker(df)) { if (first) { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } if (lastf) { - bytes = (int)strlcpy(bufp, (const char *)lastf, size); + bytes = strlcpy(bufp, (const char *)lastf, size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); first = true; @@ -2991,18 +2991,18 @@ static void print_header(battle * b) } } if (first) { - bytes = (int)strlcpy(bufp, " ", size); + bytes = strlcpy(bufp, " ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, (const char *)LOC(f->locale, "and"), size); + bytes = strlcpy(bufp, (const char *)LOC(f->locale, "and"), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, " ", size); + bytes = strlcpy(bufp, " ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } if (lastf) { - bytes = (int)strlcpy(bufp, (const char *)lastf, size); + bytes = strlcpy(bufp, (const char *)lastf, size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -3348,7 +3348,7 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack) } assert(w >= 0); fig->weapons = (weapon *)calloc(sizeof(weapon), (size_t)(w + 1)); - memcpy(fig->weapons, weapons, (size_t)(w * sizeof(weapon))); + memcpy(fig->weapons, weapons, (size_t)w * sizeof(weapon)); for (i = 0; i != w; ++i) { int j, o = 0, d = 0; @@ -3717,7 +3717,7 @@ static int battle_report(battle * b) faction *fac = bf->faction; char buf[32 * MAXSIDES]; char *bufp = buf; - int bytes; + size_t bytes; size_t size = sizeof(buf) - 1; message *m; @@ -3740,32 +3740,32 @@ static int battle_report(battle * b) char buffer[32]; if (komma) { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } slprintf(buffer, sizeof(buffer), "%s %2d(%s): ", loc_army, army_index(s), abbrev); - bytes = (int)strlcpy(bufp, buffer, size); + bytes = strlcpy(bufp, buffer, size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); for (r = FIGHT_ROW; r != NUMROWS; ++r) { if (alive[r]) { if (l != FIGHT_ROW) { - bytes = (int)strlcpy(bufp, "+", size); + bytes = strlcpy(bufp, "+", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } while (k--) { - bytes = (int)strlcpy(bufp, "0+", size); + bytes = strlcpy(bufp, "0+", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } sprintf(buffer, "%d", alive[r]); - bytes = (int)strlcpy(bufp, buffer, size); + bytes = strlcpy(bufp, buffer, size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); From c5a6f5bd0394cf2fed26bdbb6f4ff4b1641b4db6 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 15 May 2015 11:19:26 +0200 Subject: [PATCH 5/8] fix -Wconversion in reports.c, json.c --- src/json.c | 4 +- src/kernel/skills.h | 6 +- src/reports.c | 162 ++++++++++++++++++++++---------------------- src/reports.h | 8 +-- 4 files changed, 90 insertions(+), 90 deletions(-) diff --git a/src/json.c b/src/json.c index 47a7a02cf..1fb2adb27 100644 --- a/src/json.c +++ b/src/json.c @@ -33,11 +33,11 @@ int json_import(struct stream * out) { cJSON *j; for (j = child->child; j; j = j->next) { cJSON *attr; - unsigned int id = 0; + int id = 0; int x = 0, y = 0; region * r; - id = (unsigned int)atol(j->string); + id = atoi(j->string); if ((attr = cJSON_GetObjectItem(j, "x")) != 0 && attr->type == cJSON_Number) x = attr->valueint; if ((attr = cJSON_GetObjectItem(j, "y")) != 0 && attr->type == cJSON_Number) y = attr->valueint; r = new_region(x, y, 0, id); diff --git a/src/kernel/skills.h b/src/kernel/skills.h index a7f4e99f9..192030dcf 100644 --- a/src/kernel/skills.h +++ b/src/kernel/skills.h @@ -32,9 +32,9 @@ extern "C" { unsigned int old:8; #else int id; - unsigned int level; - unsigned int weeks; - unsigned int old; + int level; + int weeks; + int old; #endif } skill; diff --git a/src/reports.c b/src/reports.c index c5b542135..7ba388adc 100644 --- a/src/reports.c +++ b/src/reports.c @@ -216,19 +216,19 @@ const char **name, const char **basename, int *number, bool singular) static size_t buforder(char *bufp, size_t size, const order * ord, int mode) { size_t tsize = 0; - int bytes; + size_t bytes; - bytes = (int)strlcpy(bufp, ", \"", size); + bytes = strlcpy(bufp, ", \"", size); tsize += bytes; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (mode < ORDERS_IN_NR) { char cmd[ORDERSIZE]; get_command(ord, cmd, sizeof(cmd)); - bytes = (int)strlcpy(bufp, cmd, size); + bytes = strlcpy(bufp, cmd, size); } else { - bytes = (int)strlcpy(bufp, "...", size); + bytes = strlcpy(bufp, "...", size); } tsize += bytes; if (wrptr(&bufp, &size, bytes) != 0) @@ -436,7 +436,7 @@ const faction * viewer) } int -bufunit(const faction * f, const unit * u, int indent, int mode, char *buf, +bufunit(const faction * f, const unit * u, unsigned int indent, int mode, char *buf, size_t size) { int i, dh; @@ -452,7 +452,7 @@ size_t size) char *bufp = buf; bool itemcloak = false; const curse_type *itemcloak_ct = 0; - int bytes; + size_t bytes; item result[MAX_INVENTORY]; itemcloak_ct = ct_find("itemcloak"); @@ -460,7 +460,7 @@ size_t size) itemcloak = curse_active(get_curse(u->attribs, itemcloak_ct)); } - bytes = (int)strlcpy(bufp, unitname(u), size); + bytes = strlcpy(bufp, unitname(u), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -471,29 +471,29 @@ size_t size) attrib *a = a_find(u->attribs, &at_group); if (a) { group *g = (group *)a->data.v; - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, groupid(g, f), size); + bytes = strlcpy(bufp, groupid(g, f), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } } if (getarnt) { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, LOC(f->locale, "anonymous"), size); + bytes = strlcpy(bufp, LOC(f->locale, "anonymous"), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } else if (a_otherfaction) { faction *otherfaction = get_otherfaction(a_otherfaction); if (otherfaction) { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, factionname(otherfaction), size); + bytes = strlcpy(bufp, factionname(otherfaction), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -501,10 +501,10 @@ size_t size) } else { if (getarnt) { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, LOC(f->locale, "anonymous"), size); + bytes = strlcpy(bufp, LOC(f->locale, "anonymous"), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -512,16 +512,16 @@ size_t size) if (a_otherfaction && alliedunit(u, f, HELP_FSTEALTH)) { faction *f = get_otherfaction(a_otherfaction); bytes = - _snprintf(bufp, size, ", %s (%s)", factionname(f), + (size_t)_snprintf(bufp, size, ", %s (%s)", factionname(f), factionname(u->faction)); if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } else { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, factionname(fv), size); + bytes = strlcpy(bufp, factionname(fv), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -529,30 +529,30 @@ size_t size) } } - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (u->faction != f && a_fshidden && a_fshidden->data.ca[0] == 1 && effskill(u, SK_STEALTH) >= 6) { - bytes = (int)strlcpy(bufp, "? ", size); + bytes = strlcpy(bufp, "? ", size); } else { - bytes = _snprintf(bufp, size, "%d ", u->number); + bytes = (size_t)_snprintf(bufp, size, "%d ", u->number); } if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); pzTmp = get_racename(u->attribs); if (pzTmp) { - bytes = (int)strlcpy(bufp, pzTmp, size); + bytes = strlcpy(bufp, pzTmp, size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (u->faction == f && fval(u_race(u), RCF_SHAPESHIFTANY)) { - bytes = (int)strlcpy(bufp, " (", size); + bytes = strlcpy(bufp, " (", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, racename(f->locale, u, u_race(u)), size); + bytes = strlcpy(bufp, racename(f->locale, u, u_race(u)), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (size > 1) { @@ -563,14 +563,14 @@ size_t size) } else { const race *irace = u_irace(u); - bytes = (int)strlcpy(bufp, racename(f->locale, u, irace), size); + bytes = strlcpy(bufp, racename(f->locale, u, irace), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (u->faction == f && irace != u_race(u)) { - bytes = (int)strlcpy(bufp, " (", size); + bytes = strlcpy(bufp, " (", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, racename(f->locale, u, u_race(u)), size); + bytes = strlcpy(bufp, racename(f->locale, u, u_race(u)), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (size > 1) { @@ -581,10 +581,10 @@ size_t size) } if (fval(u, UFL_HERO) && (u->faction == f || omniscient(f))) { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, LOC(f->locale, "hero"), size); + bytes = strlcpy(bufp, LOC(f->locale, "hero"), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -593,28 +593,28 @@ size_t size) if (u->number && (u->faction == f || telepath_see || isbattle)) { const char *c = hp_status(u); c = c ? LOC(f->locale, c) : 0; - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, report_kampfstatus(u, f->locale), size); + bytes = strlcpy(bufp, report_kampfstatus(u, f->locale), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (c || fval(u, UFL_HUNGER)) { - bytes = (int)strlcpy(bufp, " (", size); + bytes = strlcpy(bufp, " (", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (c) { - bytes = (int)strlcpy(bufp, c, size); + bytes = strlcpy(bufp, c, size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } if (fval(u, UFL_HUNGER)) { if (c) { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } - bytes = (int)strlcpy(bufp, LOC(f->locale, "unit_hungers"), size); + bytes = strlcpy(bufp, LOC(f->locale, "unit_hungers"), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -625,19 +625,19 @@ size_t size) } } if (is_guard(u, GUARD_ALL) != 0) { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, LOC(f->locale, "unit_guards"), size); + bytes = strlcpy(bufp, LOC(f->locale, "unit_guards"), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } if ((b = usiege(u)) != NULL) { - bytes = (int)strlcpy(bufp, ", belagert ", size); + bytes = strlcpy(bufp, ", belagert ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, buildingname(b), size); + bytes = strlcpy(bufp, buildingname(b), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -646,7 +646,7 @@ size_t size) if (u->faction == f || telepath_see) { skill *sv; for (sv = u->skills; sv != u->skills + u->skill_size; ++sv) { - bytes = (int)spskill(bufp, size, f->locale, u, sv, &dh, 1); + bytes = spskill(bufp, size, f->locale, u, sv, &dh, 1); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -670,25 +670,26 @@ size_t size) } for (itm = show; itm; itm = itm->next) { const char *ic; - int in, bytes; + int in; + size_t bytes; report_item(u, itm, f, &ic, NULL, &in, false); if (in == 0 || ic == NULL) continue; - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (!dh) { - bytes = _snprintf(bufp, size, "%s: ", LOC(f->locale, "nr_inventory")); + bytes = (size_t)_snprintf(bufp, size, "%s: ", LOC(f->locale, "nr_inventory")); if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); dh = 1; } if (in == 1) { - bytes = (int)strlcpy(bufp, ic, size); + bytes = strlcpy(bufp, ic, size); } else { - bytes = _snprintf(bufp, size, "%d %s", in, ic); + bytes = (size_t)_snprintf(bufp, size, "%d %s", in, ic); } if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -700,7 +701,7 @@ size_t size) if (book) { quicklist *ql = book->spells; int qi, header, maxlevel = effskill(u, SK_MAGIC); - int bytes = _snprintf(bufp, size, ". Aura %d/%d", get_spellpoints(u), max_spellpoints(u->region, u)); + size_t bytes = (size_t)_snprintf(bufp, size, ". Aura %d/%d", get_spellpoints(u), max_spellpoints(u->region, u)); if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0) { WARN_STATIC_BUFFER(); } @@ -709,16 +710,16 @@ size_t size) spellbook_entry * sbe = (spellbook_entry *)ql_get(ql, qi); if (sbe->level <= maxlevel) { if (!header) { - bytes = _snprintf(bufp, size, ", %s: ", LOC(f->locale, "nr_spells")); + bytes = (size_t)_snprintf(bufp, size, ", %s: ", LOC(f->locale, "nr_spells")); header = 1; } else { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); } if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0) { WARN_STATIC_BUFFER(); } - bytes = (int)strlcpy(bufp, spell_name(sbe->sp, f->locale), size); + bytes = strlcpy(bufp, spell_name(sbe->sp, f->locale), size); if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0) { WARN_STATIC_BUFFER(); } @@ -731,7 +732,7 @@ size_t size) } if (i != MAXCOMBATSPELLS) { bytes = - _snprintf(bufp, size, ", %s: ", LOC(f->locale, "nr_combatspells")); + (size_t)_snprintf(bufp, size, ", %s: ", LOC(f->locale, "nr_combatspells")); if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -742,7 +743,7 @@ size_t size) dh = 1; } else { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); if (bytes && wrptr(&bufp, &size, bytes) != 0) { WARN_STATIC_BUFFER(); } @@ -750,20 +751,19 @@ size_t size) sp = get_combatspell(u, i); if (sp) { int sl = get_combatspelllevel(u, i); - bytes = - (int)strlcpy(bufp, spell_name(sp, u->faction->locale), size); + bytes = strlcpy(bufp, spell_name(sp, u->faction->locale), size); if (bytes && wrptr(&bufp, &size, bytes) != 0) { WARN_STATIC_BUFFER(); } if (sl > 0) { - bytes = _snprintf(bufp, size, " (%d)", sl); + bytes = (size_t)_snprintf(bufp, size, " (%d)", sl); if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } } else { - bytes = (int)strlcpy(bufp, LOC(f->locale, "nr_nospells"), size); + bytes = strlcpy(bufp, LOC(f->locale, "nr_nospells"), size); if (bytes && wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -776,7 +776,7 @@ size_t size) for (ord = u->old_orders; ord; ord = ord->next) { if (is_repeated(ord)) { if (printed < ORDERS_IN_NR) { - bytes = (int)buforder(bufp, size, ord, printed++); + bytes = buforder(bufp, size, ord, printed++); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -788,7 +788,7 @@ size_t size) for (ord = u->orders; ord; ord = ord->next) { if (is_repeated(ord)) { if (printed < ORDERS_IN_NR) { - bytes = (int)buforder(bufp, size, ord, printed++); + bytes = buforder(bufp, size, ord, printed++); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -802,11 +802,11 @@ size_t size) str = u_description(u, f->locale); if (str) { - bytes = (int)strlcpy(bufp, "; ", size); + bytes = strlcpy(bufp, "; ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, str, size); + bytes = strlcpy(bufp, str, size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -820,13 +820,13 @@ size_t size) } pzTmp = uprivate(u); if (u->faction == f && pzTmp) { - bytes = (int)strlcpy(bufp, " (Bem: ", size); + bytes = strlcpy(bufp, " (Bem: ", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, pzTmp, size); + bytes = strlcpy(bufp, pzTmp, size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, ")", size); + bytes = strlcpy(bufp, ")", size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -854,7 +854,7 @@ const struct unit * u, struct skill * sv, int *dh, int days) { char *bufp = buffer; int i, effsk; - int bytes; + size_t bytes; size_t tsize = 0; if (!u->number) @@ -865,30 +865,30 @@ const struct unit * u, struct skill * sv, int *dh, int days) } } - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); tsize += bytes; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (!*dh) { - bytes = (int)strlcpy(bufp, LOC(lang, "nr_skills"), size); + bytes = strlcpy(bufp, LOC(lang, "nr_skills"), size); tsize += bytes; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, ": ", size); + bytes = strlcpy(bufp, ": ", size); tsize += bytes; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); *dh = 1; } - bytes = (int)strlcpy(bufp, skillname(sv->id, lang), size); + bytes = strlcpy(bufp, skillname(sv->id, lang), size); tsize += bytes; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, " ", size); + bytes = strlcpy(bufp, " ", size); tsize += bytes; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -897,13 +897,13 @@ const struct unit * u, struct skill * sv, int *dh, int days) sc_mage *mage = get_mage(u); if (mage && mage->magietyp != M_GRAY) { bytes = - (int)strlcpy(bufp, LOC(lang, mkname("school", + strlcpy(bufp, LOC(lang, mkname("school", magic_school[mage->magietyp])), size); tsize += bytes; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)strlcpy(bufp, " ", size); + bytes = strlcpy(bufp, " ", size); tsize += bytes; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -947,7 +947,7 @@ const struct unit * u, struct skill * sv, int *dh, int days) return tsize; } -void lparagraph(struct strlist **SP, char *s, int indent, char mark) +void lparagraph(struct strlist **SP, char *s, unsigned int indent, char mark) { /* Die Liste SP wird mit dem String s aufgefuellt, mit indent und einer @@ -967,7 +967,7 @@ void lparagraph(struct strlist **SP, char *s, int indent, char mark) } void -spunit(struct strlist **SP, const struct faction *f, const unit * u, int indent, +spunit(struct strlist **SP, const struct faction *f, const unit * u, unsigned int indent, int mode) { char buf[DISPLAYSIZE]; @@ -1705,7 +1705,7 @@ static seen_region **prepare_report(faction * f) int write_reports(faction * f, time_t ltime) { - int backup = 1, maxbackup = 128 * 1000; + unsigned int backup = 1, maxbackup = 128 * 1000; bool gotit = false; struct report_context ctx; const char *encoding = "UTF-8"; @@ -2279,7 +2279,7 @@ static void eval_resources(struct opstack **stack, const void *userdata) while (res != NULL && size > 4) { const char *rname = resourcename(res->type, (res->number != 1) ? NMF_PLURAL : 0); - int bytes = _snprintf(bufp, size, "%d %s", res->number, LOC(lang, rname)); + size_t bytes = (size_t)_snprintf(bufp, size, "%d %s", res->number, LOC(lang, rname)); if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0 || size < sizeof(buf) / 2) { WARN_STATIC_BUFFER(); break; @@ -2293,7 +2293,7 @@ static void eval_resources(struct opstack **stack, const void *userdata) } } *bufp = 0; - var.v = strcpy(balloc(bufp - buf + 1), buf); + var.v = strcpy(balloc((size_t)(bufp - buf + 1)), buf); opush(stack, var); } @@ -2319,7 +2319,7 @@ static void eval_regions(struct opstack **stack, const void *userdata) } for (i = begin; i < end; ++i) { const char *rname = (const char *)regionname(regions->regions[i], report); - int bytes = (int)strlcpy(bufp, rname, size); + size_t bytes = strlcpy(bufp, rname, size); if (bytes && wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -2330,7 +2330,7 @@ static void eval_regions(struct opstack **stack, const void *userdata) } } *bufp = 0; - var.v = strcpy(balloc(bufp - buf + 1), buf); + var.v = strcpy(balloc((size_t)(bufp - buf + 1)), buf); opush(stack, var); } @@ -2355,15 +2355,15 @@ static void eval_trail(struct opstack **stack, const void *userdata) region *r = regions->regions[i]; const char *trail = trailinto(r, lang); const char *rn = f_regionid_s(r, report); - int bytes = _snprintf(bufp, size, trail, rn); + size_t bytes = (size_t)_snprintf(bufp, size, trail, rn); if (bytes < 0 || wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (i + 2 < end) { - bytes = (int)strlcpy(bufp, ", ", size); + bytes = strlcpy(bufp, ", ", size); } else if (i + 1 < end) { - bytes = (int)strlcpy(bufp, LOC(lang, "list_and"), size); + bytes = strlcpy(bufp, LOC(lang, "list_and"), size); } else bytes = 0; @@ -2373,7 +2373,7 @@ static void eval_trail(struct opstack **stack, const void *userdata) } } *bufp = 0; - var.v = strcpy(balloc(bufp - buf + 1), buf); + var.v = strcpy(balloc((size_t)(bufp - buf +1)), buf); opush(stack, var); #ifdef _SECURECRT_ERRCODE_VALUES_DEFINED if (errno == ERANGE) { diff --git a/src/reports.h b/src/reports.h index 9b0f468ad..2a33d47bd 100644 --- a/src/reports.h +++ b/src/reports.h @@ -47,12 +47,12 @@ extern "C" { struct unit *can_find(struct faction *, struct faction *); /* funktionen zum schreiben eines reports */ - void sparagraph(struct strlist **SP, const char *s, int indent, char mark); - void lparagraph(struct strlist **SP, char *s, int indent, char mark); + void sparagraph(struct strlist **SP, const char *s, unsigned int indent, char mark); + void lparagraph(struct strlist **SP, char *s, unsigned int indent, char mark); const char *hp_status(const struct unit *u); size_t spskill(char *pbuf, size_t siz, const struct locale *lang, const struct unit *u, struct skill *sv, int *dh, int days); /* mapper */ void spunit(struct strlist **SP, const struct faction *f, - const struct unit *u, int indent, int mode); + const struct unit *u, unsigned int indent, int mode); int reports(void); int write_reports(struct faction *f, time_t ltime); @@ -105,7 +105,7 @@ extern "C" { void register_reporttype(const char *extension, report_fun write, int flag); - int bufunit(const struct faction *f, const struct unit *u, int indent, + int bufunit(const struct faction *f, const struct unit *u, unsigned int indent, int mode, char *buf, size_t size); const char *trailinto(const struct region *r, From 94f373e43a1c09a87734085fe86f8efbb1acd9de Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 15 May 2015 11:20:37 +0200 Subject: [PATCH 6/8] fix -Wconversion in creport.c --- src/creport.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/creport.c b/src/creport.c index 845adf864..97a9ca064 100644 --- a/src/creport.c +++ b/src/creport.c @@ -1222,7 +1222,7 @@ cr_output_resources(FILE * F, report_context * ctx, seen_region * sr) } static void -cr_region_header(FILE * F, int plid, int nx, int ny, unsigned int uid) +cr_region_header(FILE * F, int plid, int nx, int ny, int uid) { if (plid == 0) { fprintf(F, "REGION %d %d\n", nx, ny); From eac4ef7ddcd3609d168b1f2cc1421f81a37dfc8e Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 15 May 2015 13:32:22 +0200 Subject: [PATCH 7/8] reduce conversion warning to float only --- src/CMakeLists.txt | 2 +- src/economy.c | 40 +++++++++++++++++++++++----------------- src/kernel/messages.c | 8 ++++++++ src/kernel/messages.h | 1 + src/kernel/race.h | 6 +++--- src/report.c | 2 +- 6 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ea2c8d0e7..5c856bc17 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,7 +13,7 @@ include_directories (${BSON_INCLUDE_DIR}) include_directories (${INIPARSER_INCLUDE_DIR}) IF(CMAKE_COMPILER_IS_GNUCC) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic -Wall -Wconversion -Werror -Wno-unknown-pragmas -Wstrict-prototypes -Wpointer-arith -Wno-char-subscripts -Wno-long-long") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic -Wall -Wfloat-conversion -Werror -Wno-unknown-pragmas -Wstrict-prototypes -Wpointer-arith -Wno-char-subscripts -Wno-long-long") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -DHAVE__BOOL") elseif(MSVC) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Wall /WX /MP") diff --git a/src/economy.c b/src/economy.c index fd548b1ae..643ff1f0e 100644 --- a/src/economy.c +++ b/src/economy.c @@ -79,7 +79,7 @@ typedef struct request { struct request *next; struct unit *unit; struct order *ord; - int qty; + unsigned int qty; int no; union { bool goblin; /* stealing */ @@ -91,9 +91,9 @@ static int working; static request entertainers[1024]; static request *nextentertainer; -static int entertaining; +static unsigned int entertaining; -static int norders; +static unsigned int norders; static request *oa; #define RECRUIT_MERGE 1 @@ -123,13 +123,13 @@ int income(const unit * u) } } -static void scramble(void *data, int n, size_t width) +static void scramble(void *data, unsigned int n, size_t width) { - int j; + unsigned int j; char temp[64]; assert(width <= sizeof(temp)); for (j = 0; j != n; ++j) { - int k = rng_int() % n; + unsigned int k = rng_uint() % n; if (k == j) continue; memcpy(temp, (char *)data + j * width, width); @@ -162,7 +162,7 @@ static void expandorders(region * r, request * requests) oa = (request *)calloc(norders, sizeof(request)); for (o = requests; o; o = o->next) { if (o->qty > 0) { - int j; + unsigned int j; for (j = o->qty; j; j--) { oa[i] = *o; oa[i].unit->n = 0; @@ -297,7 +297,7 @@ static int horse_recruiters(const struct race *rc, int qty) if (rc->ec_flags & ECF_REC_ETHEREAL) return -1; if (rc->ec_flags & ECF_REC_HORSES) - return (int)(qty * 2 * rc->recruit_multi); + return (int)(qty * 2.0 * rc->recruit_multi); return -1; } @@ -354,7 +354,7 @@ static int do_recruiting(recruitment * recruits, int available) unit *u = req->unit; const race *rc = u_race(u); /* race is set in recruit() */ int number, dec; - float multi = 2.0F * rc->recruit_multi; + double multi = 2.0 * rc->recruit_multi; number = _min(req->qty, (int)(get / multi)); if (rc->recruitcost) { @@ -463,7 +463,6 @@ static int recruit_cost(const faction * f, const race * rc) static void recruit(unit * u, struct order *ord, request ** recruitorders) { - int n; region *r = u->region; plane *pl; request *o; @@ -471,9 +470,14 @@ static void recruit(unit * u, struct order *ord, request ** recruitorders) const faction *f = u->faction; const struct race *rc = u_race(u); const char *str; + int n; init_order(ord); - n = getuint(); + n = getint(); + if (n<=0) { + syntax_error(u, ord); + return; + } if (u->number == 0) { char token[128]; @@ -1784,8 +1788,8 @@ static void buy(unit * u, request ** buyorders, struct order *ord) kwd = init_order(ord); assert(kwd == K_BUY); - n = getuint(); - if (!n) { + n = getint(); + if (n<=0) { cmistake(u, ord, 26, MSG_COMMERCE); return; } @@ -2997,10 +3001,11 @@ void tax_cmd(unit * u, struct order *ord, request ** taxorders) return; } - max = getuint(); + max = getint(); - if (max == 0) + if (max <= 0) { max = INT_MAX; + } if (!playerrace(u_race(u))) { u->wants = _min(income(u), max); } @@ -3070,10 +3075,11 @@ void loot_cmd(unit * u, struct order *ord, request ** lootorders) return; } - max = getuint(); + max = getint(); - if (max == 0) + if (max <= 0) { max = INT_MAX; + } if (!playerrace(u_race(u))) { u->wants = _min(income(u), max); } diff --git a/src/kernel/messages.c b/src/kernel/messages.c index 9291592b1..49542ce4a 100644 --- a/src/kernel/messages.c +++ b/src/kernel/messages.c @@ -282,6 +282,14 @@ message * cmistake(const unit * u, struct order *ord, int mno, int mtype) return result; } +void syntax_error(const struct unit *u, struct order *ord) +{ + message * result; + result = msg_error(u, ord, 10); + ADDMSG(&u->faction->msgs, result); + msg_release(result); +} + extern unsigned int new_hashstring(const char *s); void free_messagelist(message_list * msgs) diff --git a/src/kernel/messages.h b/src/kernel/messages.h index c03dca1b7..4ce412bcd 100644 --- a/src/kernel/messages.h +++ b/src/kernel/messages.h @@ -56,6 +56,7 @@ extern "C" { #define ADDMSG(msgs, mcreate) { message * m = mcreate; if (m) { assert(m->refcount>=1); add_message(msgs, m); msg_release(m); } } + void syntax_error(const struct unit *u, struct order *ord); struct message * cmistake(const struct unit *u, struct order *ord, int mno, int mtype); struct message * msg_error(const struct unit * u, struct order *ord, int mno); #ifdef __cplusplus diff --git a/src/kernel/race.h b/src/kernel/race.h index a81853915..47fe149e5 100644 --- a/src/kernel/race.h +++ b/src/kernel/race.h @@ -123,9 +123,9 @@ extern "C" { struct param *parameters; char *_name; float magres; - float maxaura; /* Faktor auf Maximale Aura */ - float regaura; /* Faktor auf Regeneration */ - float recruit_multi; /* Faktor für Bauernverbrauch */ + double maxaura; /* Faktor auf Maximale Aura */ + double regaura; /* Faktor auf Regeneration */ + double recruit_multi; /* Faktor für Bauernverbrauch */ int index; int recruitcost; int maintenance; diff --git a/src/report.c b/src/report.c index 649eae934..a644e216f 100644 --- a/src/report.c +++ b/src/report.c @@ -509,7 +509,7 @@ static void nr_spell(FILE * F, spellbook_entry * sbe, const struct locale *lang) rnl(F); } -void sparagraph(strlist ** SP, const char *s, int indent, char mark) +void sparagraph(strlist ** SP, const char *s, unsigned int indent, char mark) { /* Die Liste SP wird mit dem String s aufgefuellt, mit indent und einer From 062237b0d13f4e47bd3535346aa084685b6cef3e Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 15 May 2015 17:15:54 +0200 Subject: [PATCH 8/8] let CMake test for gcc 4.9 before enabling -Wfloat-conversion --- src/CMakeLists.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5c856bc17..79bb02531 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,8 +12,15 @@ include_directories (${LUA_INCLUDE_DIR}) include_directories (${BSON_INCLUDE_DIR}) include_directories (${INIPARSER_INCLUDE_DIR}) -IF(CMAKE_COMPILER_IS_GNUCC) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic -Wall -Wfloat-conversion -Werror -Wno-unknown-pragmas -Wstrict-prototypes -Wpointer-arith -Wno-char-subscripts -Wno-long-long") +if (CMAKE_COMPILER_IS_GNUCC) + execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion + OUTPUT_VARIABLE GCC_VERSION) + if (GCC_VERSION VERSION_GREATER 4.9) + message(STATUS "Version ${GCC_VERSION} >= 4.9") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wfloat-conversion") + endif() + + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic -Wall -Werror -Wno-unknown-pragmas -Wstrict-prototypes -Wpointer-arith -Wno-char-subscripts -Wno-long-long") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -DHAVE__BOOL") elseif(MSVC) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Wall /WX /MP")