diff --git a/OpenSim/Framework/Serialization/ArchiveConstants.cs b/OpenSim/Framework/Serialization/ArchiveConstants.cs index 245bc0bf28..01cb369e7b 100644 --- a/OpenSim/Framework/Serialization/ArchiveConstants.cs +++ b/OpenSim/Framework/Serialization/ArchiveConstants.cs @@ -191,21 +191,16 @@ namespace OpenSim.Framework.Serialization /// public static string ExtractPlainPathFromIarPath(string iarPath) { - List plainDirs = new(); + string[] iarDirs = iarPath.Split('/', StringSplitOptions.RemoveEmptyEntries); - string[] iarDirs = iarPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); - - foreach (string iarDir in iarDirs) + for(int i = 0 ; i < iarDirs.Length; i++) { - if (!iarDir.Contains(ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR)) - plainDirs.Add(iarDir); - - int i = iarDir.LastIndexOf(ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR); - - plainDirs.Add(iarDir.Remove(i)); + int sep = iarDirs[i].LastIndexOf(ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR); + if (sep >= 0) + iarDirs[i] = iarDirs[i][..sep]; } - return string.Join("/", plainDirs.ToArray()); + return string.Join('/', iarDirs); } } } diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index c599ad7221..2bac0e5421 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs @@ -323,11 +323,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver { // m_log.DebugFormat("[INVENTORY ARCHIVER]: Trying to resolve destination folder {0}", archivePath); - if (resolvedFolders.ContainsKey(archivePath)) + if (resolvedFolders.TryGetValue(archivePath, out InventoryFolderBase resolved)) { // m_log.DebugFormat( // "[INVENTORY ARCHIVER]: Found previously created folder from archive path {0}", archivePath); - return resolvedFolders[archivePath]; + return resolved; } else { @@ -401,12 +401,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver { // m_log.DebugFormat("[INVENTORY ARCHIVER]: Creating folder {0} from IAR", rawDirsToCreate[i]); - if (!rawDirsToCreate[i].Contains(ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR)) - continue; - int identicalNameIdentifierIndex = rawDirsToCreate[i].LastIndexOf( ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR); + if(identicalNameIdentifierIndex < 0) + continue; string newFolderName = rawDirsToCreate[i].Remove(identicalNameIdentifierIndex);