diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-11-07 12:33:10 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-11-07 12:33:10 +0300 |
commit | ed61900e5e5ccb972a5bf63c9301d0669f1e8941 (patch) | |
tree | 06f9b302bdb5b370d60db61abffbb85303b153c0 /source/blender/blenlib | |
parent | 20b16e4074eb0b015a94bd5738c76dafaca250db (diff) |
- avoid loop within loop for unique naming function (even though it wasnt likely to run often).
- off by 1 error with outliner naming length. was 1 too short.
Diffstat (limited to 'source/blender/blenlib')
-rw-r--r-- | source/blender/blenlib/intern/path_util.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c index fffc74e822a..a496e6c50e9 100644 --- a/source/blender/blenlib/intern/path_util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -205,10 +205,12 @@ int BLI_uniquename_cb(int (*unique_check)(void *, const char *), void *arg, cons char left[UNIQUE_NAME_MAX]; int number; int len= BLI_split_name_num(left, &number, name, delim); - do { /* nested while loop looks bad but likely it wont run most times */ - while(BLI_snprintf(tempname, name_len, "%s%c%03d", left, delim, number) >= name_len) { - if(len > 0) left[--len]= '\0'; /* word too long */ - else number= 0; /* reset, must be a massive number */ + do { + int newlen= BLI_snprintf(tempname, name_len, "%s%c%03d", left, delim, number); + if(newlen >= name_len) { + len -= ((newlen + 1) - name_len); + if(len < 0) len= number= 0; + left[len]= '\0'; } } while(number++, unique_check(arg, tempname)); |