• J
    Avoid unnecessary "if-before-free" tests. · 8e0f7003
    Jim Meyering 提交于
    This change removes all obvious useless if-before-free tests.
    E.g., it replaces code like this:
    
            if (some_expression)
                    free (some_expression);
    
    with the now-equivalent:
    
            free (some_expression);
    
    It is equivalent not just because POSIX has required free(NULL)
    to work for a long time, but simply because it has worked for
    so long that no reasonable porting target fails the test.
    Here's some evidence from nearly 1.5 years ago:
    
        http://www.winehq.org/pipermail/wine-patches/2006-October/031544.html
    
    FYI, the change below was prepared by running the following:
    
      git ls-files -z | xargs -0 \
      perl -0x3b -pi -e \
        's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*NULL)?\s*\)\s+(free\s*\(\s*\1\s*\))/$2/s'
    
    Note however, that it doesn't handle brace-enclosed blocks like
    "if (x) { free (x); }".  But that's ok, since there were none like
    that in git sources.
    
    Beware: if you do use the above snippet, note that it can
    produce syntactically invalid C code.  That happens when the
    affected "if"-statement has a matching "else".
    E.g., it would transform this
    
      if (x)
        free (x);
      else
        foo ();
    
    into this:
    
      free (x);
      else
        foo ();
    
    There were none of those here, either.
    
    If you're interested in automating detection of the useless
    tests, you might like the useless-if-before-free script in gnulib:
    [it *does* detect brace-enclosed free statements, and has a --name=S
     option to make it detect free-like functions with different names]
    
      http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob;f=build-aux/useless-if-before-free
    
    Addendum:
      Remove one more (in imap-send.c), spotted by Jean-Luc Herren <jlh@gmx.ch>.
    Signed-off-by: NJim Meyering <meyering@redhat.com>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    8e0f7003
builtin-branch.c 16.0 KB