From daa4feaaeae4312eb23f66b948b668a7e9dc1959 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 07:19:41 +0000 Subject: bugfix [#24477] Can easily create bones with duplicate names - fixed this error 7 different functions (deform groups, uv layers & similar). - support for numbers over 999. - renamed splitIDname() to BLI_split_name_num(), moved to BLI_path_utils --- source/blender/blenkernel/intern/nla.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) (limited to 'source/blender/blenkernel/intern/nla.c') diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 67c3e746a63..6c8eb69703f 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -1260,27 +1260,21 @@ void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip) * - in an extreme case, it might not be able to find a name, but then everything else in Blender would fail too :) */ if (BLI_ghash_haskey(gh, strip->name)) { - char tempname[128]; - int number = 1; - char *dot; - - /* Strip off the suffix */ - dot = strrchr(strip->name, '.'); - if (dot) *dot=0; - - /* Try different possibilities */ - for (number = 1; number <= 999; number++) { - /* assemble alternative name */ - BLI_snprintf(tempname, 128, "%s.%03d", strip->name, number); - - /* if hash doesn't have this, set it */ - if (BLI_ghash_haskey(gh, tempname) == 0) { - BLI_strncpy(strip->name, tempname, sizeof(strip->name)); - break; + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(strip->name)]; + char left[sizeof(strip->name)]; + int number; + int len= BLI_split_name_num(left, &number, strip->name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } - } + } while(number++, BLI_ghash_haskey(gh, tempname)); + BLI_strncpy(strip->name, tempname, sizeof(strip->name)); + } + /* free the hash... */ BLI_ghash_free(gh, NULL, NULL); } -- cgit v1.2.3