[Libvir] unnecessary "if-before-free" tests

Jim Meyering jim at meyering.net
Mon Jan 21 17:53:52 UTC 2008


Hi Dan,

I noticed a few new unnecessary "if-before-free" tests:

  src/storage_backend.c:2591: if (groups[j]) free(groups[j]);
  src/storage_backend_iscsi.c:    if (devpath) free(devpath);
  src/storage_backend_iscsi.c:    if (portal) free(portal);
  src/storage_backend_iscsi.c:    if (session) free(session);

FYI, this finds all the one-liners:

  git grep -E 'if \(([^)]+)\) free *\(\1\)'

I had to think harder to get the 2-line occurrences:

perl -0ne '/\b(if \(([^)]+)\)\s+free *\(\2\))/sgm and print "$ARGV:$.: $1\n"'\
  $(git ls-files)

or rather this, if you don't have a git repo handy:

perl -0ne '/\b(if \(([^)]+)\)\s+free *\(\2\))/sgm and print "$ARGV:$.: $1\n"'\
  {src,tests,qemud,proxy}/*.[ch]

If no one objects, I'm going to remove them
and add a build-time test to ensure they stay gone.

------------------
gnulib/lib/getaddrinfo.c:2257: if (cur->ai_canonname) free (cur->ai_canonname)
gnulib/lib/printf-parse.c:2277: if (a->arg)
    free (a->arg)
proxy/libvirt_proxy.c:2499: if (name)
                free(name)
qemud/qemud.c:2529: if (client->saslUsername) free(client->saslUsername)
src/buf.c:2549: if (buf->content)
            free(buf->content)
src/conf.c:2551: if (tmp->comment)
            free(tmp->comment)
src/hash.c:2559: if (iter->name)
                    free(iter->name)
src/iptables.c:2562: if (rule->rule)
        free(rule->rule)
src/libvirt.c:2566: if (ret->name) free (ret->name)
src/openvz_conf.c:2570: if (prop)
        free(prop)
src/qemu_conf.c:2578: if (prop)
        free(prop)
src/qemu_driver.c:2580: if (base) free (base)
src/remote_internal.c:2584: if (name) free (name)
src/storage_backend.c:2591: if (groups[j]) free(groups[j])
src/storage_backend_iscsi.c:2597: if (devpath) free(devpath)
src/storage_conf.c:2605: if (def->name)
        free(def->name)
src/storage_driver.c:2607: if (base) free (base)
src/test.c:2609: if (name)
        free(name)
src/virsh.c:2615: if (ctl->name)
        free(ctl->name)
src/xen_internal.c:2617: if (new)
            free(new)
src/xend_internal.c:2621: if (drvName)
                free(drvName)
src/xm_internal.c:2623: if (vif)
                    free(vif)
src/xml.c:2625: if (str)
        free(str)
src/xmlrpc.c:2627: if (value)
        free(value)
tests/testutils.c:2739: if (ts)
        free(ts)
tests/xencapstest.c:2784: if (actualxml)
    free(actualxml)
tests/xmconfigtest.c:2804: if (gotxml)
        free(gotxml)




More information about the libvir-list mailing list