[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