Cleanup: Use guarded allocator for data-block names returned from file reading

Direcly using the C library allocator functions is usually avoided in favor of
our guarded allocator. It's more useful when debugging.
This commit is contained in:
2020-12-08 12:56:11 +01:00
parent 296bc35638
commit 2a4fe88c13
5 changed files with 11 additions and 9 deletions

View File

@@ -148,7 +148,7 @@ bool BLO_main_validate_libraries(Main *bmain, ReportList *reports)
} }
} }
BLI_linklist_free(names, free); BLI_linklist_free(names, MEM_freeN);
} }
BLO_blendhandle_close(bh); BLO_blendhandle_close(bh);

View File

@@ -134,7 +134,7 @@ void BLO_blendhandle_print_sizes(BlendHandle *bh, void *fp)
* \param bh: The blendhandle to access. * \param bh: The blendhandle to access.
* \param ofblocktype: The type of names to get. * \param ofblocktype: The type of names to get.
* \param tot_names: The length of the returned list. * \param tot_names: The length of the returned list.
* \return A BLI_linklist of strings. The string links should be freed with malloc. * \return A BLI_linklist of strings. The string links should be freed with #MEM_freeN().
*/ */
LinkNode *BLO_blendhandle_get_datablock_names(BlendHandle *bh, int ofblocktype, int *tot_names) LinkNode *BLO_blendhandle_get_datablock_names(BlendHandle *bh, int ofblocktype, int *tot_names)
{ {
@@ -147,7 +147,7 @@ LinkNode *BLO_blendhandle_get_datablock_names(BlendHandle *bh, int ofblocktype,
if (bhead->code == ofblocktype) { if (bhead->code == ofblocktype) {
const char *idname = blo_bhead_id_name(fd, bhead); const char *idname = blo_bhead_id_name(fd, bhead);
BLI_linklist_prepend(&names, strdup(idname + 2)); BLI_linklist_prepend(&names, BLI_strdup(idname + 2));
tot++; tot++;
} }
else if (bhead->code == ENDB) { else if (bhead->code == ENDB) {
@@ -254,7 +254,7 @@ LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *to
* (e.g. "Scene", "Mesh", "Light", etc.). * (e.g. "Scene", "Mesh", "Light", etc.).
* *
* \param bh: The blendhandle to access. * \param bh: The blendhandle to access.
* \return A BLI_linklist of strings. The string links should be freed with malloc. * \return A BLI_linklist of strings. The string links should be freed with #MEM_freeN().
*/ */
LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh) LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh)
{ {
@@ -272,7 +272,7 @@ LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh)
const char *str = BKE_idtype_idcode_to_name(bhead->code); const char *str = BKE_idtype_idcode_to_name(bhead->code);
if (BLI_gset_add(gathered, (void *)str)) { if (BLI_gset_add(gathered, (void *)str)) {
BLI_linklist_prepend(&names, strdup(str)); BLI_linklist_prepend(&names, BLI_strdup(str));
} }
} }
} }

View File

@@ -2620,7 +2620,7 @@ static int filelist_readjob_list_lib(const char *root, ListBase *entries, const
nbr_entries++; nbr_entries++;
} }
BLI_linklist_free(names, free); BLI_linklist_free(names, MEM_freeN);
return nbr_entries; return nbr_entries;
} }

View File

@@ -68,7 +68,7 @@ ImBuf *IMB_thumb_load_blend(const char *blen_path, const char *blen_group, const
printf("%s: error, found %d items, %d previews\n", __func__, nnames, nprevs); printf("%s: error, found %d items, %d previews\n", __func__, nnames, nprevs);
} }
BLI_linklist_free(previews, BKE_previewimg_freefunc); BLI_linklist_free(previews, BKE_previewimg_freefunc);
BLI_linklist_free(names, free); BLI_linklist_free(names, MEM_freeN);
return ima; return ima;
} }
@@ -93,7 +93,7 @@ ImBuf *IMB_thumb_load_blend(const char *blen_path, const char *blen_group, const
} }
BLI_linklist_free(previews, BKE_previewimg_freefunc); BLI_linklist_free(previews, BKE_previewimg_freefunc);
BLI_linklist_free(names, free); BLI_linklist_free(names, MEM_freeN);
} }
else { else {
BlendThumbnail *data; BlendThumbnail *data;

View File

@@ -44,6 +44,8 @@
#include "BLO_readfile.h" #include "BLO_readfile.h"
#include "MEM_guardedalloc.h"
#include "bpy_capi_utils.h" #include "bpy_capi_utils.h"
#include "bpy_library.h" #include "bpy_library.h"
@@ -225,7 +227,7 @@ static PyObject *_bpy_names(BPy_Library *self, int blocktype)
PyList_SET_ITEM(list, counter, PyUnicode_FromString((char *)l->link)); PyList_SET_ITEM(list, counter, PyUnicode_FromString((char *)l->link));
counter++; counter++;
} }
BLI_linklist_free(names, free); /* free linklist *and* each node's data */ BLI_linklist_free(names, MEM_freeN); /* free linklist *and* each node's data */
} }
return list; return list;