diff options
author | Bastien Montagne <bastien@blender.org> | 2021-11-19 18:10:28 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2021-11-19 18:10:28 +0300 |
commit | ec71054a9b7bf0d2218fa230855fc9af2e71bcc2 (patch) | |
tree | 742c6c9c97b95936f7d6b9897f9ce350dbdabb8c /source/blender/blenlib/intern | |
parent | 330290d2a80d6b78f323cd1df9f3ea333d1cdb53 (diff) | |
parent | 33c5e7bcd5e5b790ee95caaa0c4d917996341266 (diff) |
Merge branch 'blender-v3.0-release'
Conflicts:
source/blender/blenkernel/BKE_blender_version.h
source/blender/blenloader/intern/versioning_300.c
Diffstat (limited to 'source/blender/blenlib/intern')
-rw-r--r-- | source/blender/blenlib/intern/listbase.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c index 1b16f6b0aee..443bef42cc2 100644 --- a/source/blender/blenlib/intern/listbase.c +++ b/source/blender/blenlib/intern/listbase.c @@ -826,6 +826,37 @@ void *BLI_listbase_bytes_rfind(const ListBase *listbase, } /** + * Find the first item in the list that matches the given string, or the given index as fallback. + * + * \note The string is only used is non-NULL and non-empty. + * + * \return The found item, or NULL. + */ +void *BLI_listbase_string_or_index_find(const ListBase *listbase, + const char *string, + const size_t string_offset, + const int index) +{ + Link *link = NULL; + Link *link_at_index = NULL; + + int index_iter; + for (link = listbase->first, index_iter = 0; link; link = link->next, index_iter++) { + if (string != NULL && string[0] != '\0') { + const char *string_iter = ((const char *)link) + string_offset; + + if (string[0] == string_iter[0] && STREQ(string, string_iter)) { + return link; + } + } + if (index_iter == index) { + link_at_index = link; + } + } + return link_at_index; +} + +/** * Returns the 0-based index of the first element of listbase which contains the specified * null-terminated string at the specified offset, or -1 if not found. */ |