Commit: adbd9cb1de1fccf19d95e849d5087abf9c48b931
Author: Bastien Montagne
Date:   Tue May 24 14:10:28 2016 +0200
Branches: id-remap
https://developer.blender.org/rBadbd9cb1de1fccf19d95e849d5087abf9c48b931

Better name handling in case we remap an ID adn cannot replace it totally.

===================================================================

M       source/blender/windowmanager/intern/wm_files_link.c

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_files_link.c 
b/source/blender/windowmanager/intern/wm_files_link.c
index 03c1c27..82d45c1 100644
--- a/source/blender/windowmanager/intern/wm_files_link.c
+++ b/source/blender/windowmanager/intern/wm_files_link.c
@@ -610,18 +610,32 @@ static void lib_relocate_do(Main *bmain, WMLinkAppendData 
*lapp_data, ReportList
                }
 
                if (old_id->us > 0 && new_id && old_id->lib == new_id->lib) {
+                       /* Note that this *should* not happen - but better be 
safe than sorry in this area, at least until we are
+                        * 100% sure this cannot ever happen.
+                        * Also, we can safely assume names were unique so far, 
so just replacing '.' by '~' should work,
+                        * but this does not totally rules out the possibility 
of name collision. */
                        size_t len = strlen(old_id->name);
+                       size_t dot_pos;
+                       bool has_num = false;
 
-                       /* XXX TODO This is utterly weak!!! */
-                       if (len > MAX_ID_NAME - 3 && old_id->name[len - 4] == 
'.') {
-                               old_id->name[len - 6] = '.';
-                               old_id->name[len - 5] = 'P';
+                       for (dot_pos = len; dot_pos--;) {
+                               char c = old_id->name[dot_pos];
+                               if (c == '.') {
+                                       break;
+                               }
+                               else if (c < '0' || c > '9') {
+                                       has_num = false;
+                                       break;
+                               }
+                               has_num = true;
+                       }
+
+                       if (has_num) {
+                               old_id->name[dot_pos] = '~';
                        }
                        else {
-                               len = MIN2(len, MAX_ID_NAME - 3);
-                               old_id->name[len] = '.';
-                               old_id->name[len + 1] = 'P';
-                               old_id->name[len + 2] = '\0';
+                               len = MIN2(len, MAX_ID_NAME - 7);
+                               BLI_strncpy(&old_id->name[len], "~000", 7);
                        }
 
                        id_sort_by_name(which_libbase(bmain, GS(old_id->name)), 
old_id);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to