summaryrefslogtreecommitdiff
path: root/src/idxmap.h
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2017-03-20 09:01:18 +0100
committerPatrick Steinhardt <ps@pks.im>2017-03-20 09:01:18 +0100
commit94af9155cf908f402e07408d900177280c2e90bb (patch)
tree492d150ff5713cb967b3d1ebdde1404a359516aa /src/idxmap.h
parent77c8ee74ff0f0ef4462fd6e963bc993c7a9721b3 (diff)
downloadlibgit2-94af9155cf908f402e07408d900177280c2e90bb.tar.gz
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.
Diffstat (limited to 'src/idxmap.h')
-rw-r--r--src/idxmap.h3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/idxmap.h b/src/idxmap.h
index e4e9ec4cd..dc702c36e 100644
--- a/src/idxmap.h
+++ b/src/idxmap.h
@@ -39,8 +39,7 @@ int git_idxmap_has_data(git_idxmap *map, size_t idx);
void git_idxmap_resize(git_idxmap *map, size_t size);
void git_idxmap_icase_resize(git_idxmap_icase *map, size_t size);
-#define git_idxmap_free(h) git_idxmap__free(h); (h) = NULL
-void git_idxmap__free(git_idxmap *map);
+void git_idxmap_free(git_idxmap *map);
void git_idxmap_clear(git_idxmap *map);
void git_idxmap_delete_at(git_idxmap *map, size_t idx);