[Bf-blender-cvs] [adbd9cb] id-remap: Better name handling in case we remap an ID adn cannot replace it totally.

Bastien Montagne noreply at git.blender.org
Tue May 24 14:44:01 CEST 2016


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);




More information about the Bf-blender-cvs mailing list