4f40f6cb73
Add a coccinelle rule to remove "struct strbuf" initialization followed by calling "strbuf_release()" function, without any uses of the strbuf in the same function. See the tests in contrib/coccinelle/tests/unused.{c,res} for what it's intended to find and replace. The inclusion of "contrib/scalar/scalar.c" is because "spatch" was manually run on it (we don't usually run spatch on contrib). Per the "buggy code" comment we also match a strbuf_init() before the xmalloc(), but we're not seeking to be so strict as to make checks that the compiler will catch for us redundant. Saying we'll match either "init" or "xmalloc" lines makes the rule simpler. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
56 lines
1.2 KiB
C
56 lines
1.2 KiB
C
void test_strbuf(void)
|
|
{
|
|
struct strbuf sb1 = STRBUF_INIT;
|
|
struct strbuf sb2 = STRBUF_INIT;
|
|
struct strbuf sb3 = STRBUF_INIT;
|
|
struct strbuf sb4 = STRBUF_INIT;
|
|
struct strbuf sb5;
|
|
struct strbuf sb6 = { 0 };
|
|
struct strbuf sb7 = STRBUF_INIT;
|
|
struct strbuf sb8 = STRBUF_INIT;
|
|
struct strbuf *sp1;
|
|
struct strbuf *sp2;
|
|
struct strbuf *sp3;
|
|
struct strbuf *sp4 = xmalloc(sizeof(struct strbuf));
|
|
struct strbuf *sp5 = xmalloc(sizeof(struct strbuf));
|
|
struct strbuf *sp6 = xmalloc(sizeof(struct strbuf));
|
|
struct strbuf *sp7;
|
|
|
|
strbuf_init(&sb5, 0);
|
|
strbuf_init(sp1, 0);
|
|
strbuf_init(sp2, 0);
|
|
strbuf_init(sp3, 0);
|
|
strbuf_init(sp4, 0);
|
|
strbuf_init(sp5, 0);
|
|
strbuf_init(sp6, 0);
|
|
strbuf_init(sp7, 0);
|
|
sp7 = xmalloc(sizeof(struct strbuf));
|
|
|
|
use_before(&sb3);
|
|
use_as_str("%s", sb7.buf);
|
|
use_as_str("%s", sp1->buf);
|
|
use_as_str("%s", sp6->buf);
|
|
pass_pp(&sp3);
|
|
|
|
strbuf_release(&sb1);
|
|
strbuf_reset(&sb2);
|
|
strbuf_release(&sb3);
|
|
strbuf_release(&sb4);
|
|
strbuf_release(&sb5);
|
|
strbuf_release(&sb6);
|
|
strbuf_release(&sb7);
|
|
strbuf_release(sp1);
|
|
strbuf_release(sp2);
|
|
strbuf_release(sp3);
|
|
strbuf_release(sp4);
|
|
strbuf_release(sp5);
|
|
strbuf_release(sp6);
|
|
strbuf_release(sp7);
|
|
|
|
use_after(&sb4);
|
|
|
|
if (when_strict())
|
|
return;
|
|
strbuf_release(&sb8);
|
|
}
|