Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenloader/intern/versioning_common.cc')
-rw-r--r--source/blender/blenloader/intern/versioning_common.cc37
1 files changed, 37 insertions, 0 deletions
diff --git a/source/blender/blenloader/intern/versioning_common.cc b/source/blender/blenloader/intern/versioning_common.cc
index f5083b8e259..208c02b60d1 100644
--- a/source/blender/blenloader/intern/versioning_common.cc
+++ b/source/blender/blenloader/intern/versioning_common.cc
@@ -20,9 +20,15 @@
/* allow readfile to use deprecated functionality */
#define DNA_DEPRECATED_ALLOW
+#include <cstring>
+
#include "DNA_screen_types.h"
#include "BLI_listbase.h"
+#include "BLI_string.h"
+
+#include "BKE_lib_id.h"
+#include "BKE_main.h"
#include "MEM_guardedalloc.h"
@@ -48,3 +54,34 @@ ARegion *do_versions_add_region_if_not_found(ListBase *regionbase,
BLI_insertlinkafter(regionbase, link_after_region, new_region);
return new_region;
}
+
+/**
+ * Rename if the ID doesn't exist.
+ *
+ * \return the ID (if found).
+ */
+ID *do_versions_rename_id(Main *bmain,
+ const short id_type,
+ const char *name_src,
+ const char *name_dst)
+{
+ /* We can ignore libraries */
+ ListBase *lb = which_libbase(bmain, id_type);
+ ID *id = nullptr;
+ LISTBASE_FOREACH (ID *, idtest, lb) {
+ if (idtest->lib == nullptr) {
+ if (STREQ(idtest->name + 2, name_src)) {
+ id = idtest;
+ }
+ if (STREQ(idtest->name + 2, name_dst)) {
+ return nullptr;
+ }
+ }
+ }
+ if (id != nullptr) {
+ BLI_strncpy(id->name + 2, name_dst, sizeof(id->name) - 2);
+ /* We know it's unique, this just sorts. */
+ BLI_libblock_ensure_unique_name(bmain, id->name);
+ }
+ return id;
+}