From b9262d80ab7b6f30a1489b39f8e4ec3ab599fa9c Mon Sep 17 00:00:00 2001 From: Andrei Alexeyev <0x416b617269@gmail.com> Date: Tue, 31 Jul 2018 11:50:04 +0300 Subject: [PATCH] fix various issues discovered by scan-build --- src/boss.c | 7 ++++--- src/events.c | 2 +- src/objectpool.c | 2 +- src/plrmodes/youmu_b.c | 3 +-- src/resource/animation.c | 3 ++- src/resource/font.c | 12 ++++-------- src/util/kvparser.c | 4 ++-- 7 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/boss.c b/src/boss.c index ff573f92..f95c64f7 100644 --- a/src/boss.c +++ b/src/boss.c @@ -769,15 +769,16 @@ void process_boss(Boss **pboss) { log_debug("Current attack [%s] is over", boss->current->name); for(;;) { - boss->current++; - - if(boss->current - boss->attacks >= boss->acount) { + if(boss->current == boss->attacks + boss->acount - 1) { // no more attacks, die boss->current = NULL; boss_death(pboss); break; } + boss->current++; + assert(boss->current != NULL); + if(boss->current->type == AT_Immediate) { boss->current->starttime = global.frames; boss->current->rule(boss, EVENT_BIRTH); diff --git a/src/events.c b/src/events.c index 9a616c04..0bf15238 100644 --- a/src/events.c +++ b/src/events.c @@ -91,7 +91,7 @@ static EventPriority real_priority(EventPriority prio) { } static EventHandlerContainer* ehandler_wrap_container(EventHandler *handler) { - EventHandlerContainer *c = calloc(1, sizeof(ListContainer)); + EventHandlerContainer *c = calloc(1, sizeof(*c)); c->handler = handler; return c; } diff --git a/src/objectpool.c b/src/objectpool.c index 839d1f10..827087c0 100644 --- a/src/objectpool.c +++ b/src/objectpool.c @@ -60,7 +60,7 @@ ObjectPool *objpool_alloc(size_t obj_size, size_t max_objects, const char *tag) } static char *objpool_add_extent(ObjectPool *pool) { - pool->extents = realloc(pool->extents, (++pool->num_extents) * sizeof(pool->extents)); + pool->extents = realloc(pool->extents, (++pool->num_extents) * sizeof(*pool->extents)); char *extent = pool->extents[pool->num_extents - 1] = calloc(pool->max_objects, pool->size_of_object); objpool_register_objects(pool, extent); return extent; diff --git a/src/plrmodes/youmu_b.c b/src/plrmodes/youmu_b.c index ccf1f694..c6c3bdb7 100644 --- a/src/plrmodes/youmu_b.c +++ b/src/plrmodes/youmu_b.c @@ -246,8 +246,7 @@ static void youmu_particle_slice_draw(Projectile *p, int t) { r_mat_pop(); double slicelen = 500; - f = sqrt(f); - complex slicepos=p->pos-(tt>0.1)*slicelen*I*cexp(I*p->angle)*(5*pow(tt-0.1,1.1)-0.5); + complex slicepos = p->pos-(tt>0.1)*slicelen*I*cexp(I*p->angle)*(5*pow(tt-0.1,1.1)-0.5); draw_sprite_batched_p(creal(slicepos), cimag(slicepos), aniplayer_get_frame(&global.plr.ani)); } diff --git a/src/resource/animation.c b/src/resource/animation.c index f215df4c..85cdb90d 100644 --- a/src/resource/animation.c +++ b/src/resource/animation.c @@ -261,7 +261,7 @@ void* load_animation_end(void *opaque, const char *filename, uint flags) { log_warn("Animation frame '%s' not found but @sprite_count was %d",buf,ani->sprite_count); unload_animation(ani); ani = NULL; - break; + goto done; } ani->sprites[i] = res->data; @@ -274,6 +274,7 @@ void* load_animation_end(void *opaque, const char *filename, uint flags) { ani = NULL; } +done: free(data->basename); free(data); diff --git a/src/resource/font.c b/src/resource/font.c index 3073a3de..fe15923f 100644 --- a/src/resource/font.c +++ b/src/resource/font.c @@ -498,14 +498,10 @@ static Glyph* get_glyph(Font *fnt, charcode_t cp) { log_debug("Font has no glyph for charcode 0x%08lx", cp); glyph = get_glyph(fnt, UNICODE_UNKNOWN); ofs = glyph ? (ptrdiff_t)(glyph - fnt->glyphs) : -1; - } else { - if(ht_lookup(&fnt->ftindex_to_glyph_ofs, ft_index, &ofs)) { - glyph = fnt->glyphs + ofs; - } else { - glyph = load_glyph(fnt, ft_index, &fnt->spritesheets); - ofs = glyph ? (ptrdiff_t)(glyph - fnt->glyphs) : -1; - ht_set(&fnt->ftindex_to_glyph_ofs, ft_index, ofs); - } + } else if(!ht_lookup(&fnt->ftindex_to_glyph_ofs, ft_index, &ofs)) { + glyph = load_glyph(fnt, ft_index, &fnt->spritesheets); + ofs = glyph ? (ptrdiff_t)(glyph - fnt->glyphs) : -1; + ht_set(&fnt->ftindex_to_glyph_ofs, ft_index, ofs); } ht_set(&fnt->charcodes_to_glyph_ofs, cp, ofs); diff --git a/src/util/kvparser.c b/src/util/kvparser.c index 8dda9d2e..dc44a781 100644 --- a/src/util/kvparser.c +++ b/src/util/kvparser.c @@ -163,13 +163,13 @@ bool parse_bool(const char *str, bool fallback) { static const char *true_vals[] = { "on", "yes", "true", NULL }; static const char *false_vals[] = { "off", "no", "false", NULL }; - for(const char **v = true_vals; v; ++v) { + for(const char **v = true_vals; *v; ++v) { if(!SDL_strcasecmp(buf, *v)) { return true; } } - for(const char **v = false_vals; v; ++v) { + for(const char **v = false_vals; *v; ++v) { if(!SDL_strcasecmp(buf, *v)) { return false; }