• Show log

    Commit

  • Hash : 94af9155
    Author : Patrick Steinhardt
    Date : 2017-03-20T09:01:18

    map: remove `*map_free` macros
    
    The `map_free` functions were not implemented as functions but instead
    as macros which also set the map to NULL. While this is most certainly
    sensible in most cases, we should prefer the more obvious behavior,
    namingly leaving the map pointer intact.
    
    Furthermore, this macro has been refactored incorrectly during the
    map-refactorings: the two statements are not actually grouped together
    by a `do { ... } while (0)` block, as it is required for macros to
    match the behavior of functions more closely. This has led to at least
    one subtle nesting error in `pack-objects.c`. The following code block
    
    ```
        if (pb->object_ix)
            git_oidmap_free(pb->object_ix);
    ```
    
    would be expanded to
    
    ```
        if (pb->object_ix)
            git_oidmap__free(pb->object_ix); pb->object_ix = NULL;
    ```
    
    which is not what one woudl expect. While it is not a bug here as it
    would simply become a no-op, the wrong implementation could lead to bugs
    in other occasions.
    
    Fix this by simply removing the macro altogether and replacing it with
    real function calls. This leaves the burden of setting the pointer to
    NULL afterwards to the caller, but this is actually expected and behaves
    like other `free` functions.