aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs8
-rw-r--r--OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs10
-rw-r--r--OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveReader.cs48
3 files changed, 59 insertions, 7 deletions
diff --git a/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index eab4461..e15a232 100644
--- a/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -187,9 +187,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory.Archiver
187 new FileStream(loadPath, FileMode.Open), CompressionMode.Decompress)); 187 new FileStream(loadPath, FileMode.Open), CompressionMode.Decompress));
188 188
189 byte[] data; 189 byte[] data;
190 while ((data = archive.ReadEntry(out filePath)) != null) 190 TarArchiveReader.TarEntryType entryType;
191 while ((data = archive.ReadEntry(out filePath, out entryType)) != null)
191 { 192 {
192 if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) 193 if (entryType==TarArchiveReader.TarEntryType.TYPE_DIRECTORY) {
194 m_log.WarnFormat("[ARCHIVER]: Ignoring directory entry {0}",
195 filePath);
196 } else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH))
193 { 197 {
194 if (LoadAsset(filePath, data)) 198 if (LoadAsset(filePath, data))
195 successfulAssetRestores++; 199 successfulAssetRestores++;
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
index a5b5917..73fd916 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
@@ -88,12 +88,16 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
88 int failedAssetRestores = 0; 88 int failedAssetRestores = 0;
89 89
90 byte[] data; 90 byte[] data;
91 while ((data = archive.ReadEntry(out filePath)) != null) 91 TarArchiveReader.TarEntryType entryType;
92 while ((data = archive.ReadEntry(out filePath, out entryType)) != null)
92 { 93 {
93 //m_log.DebugFormat( 94 //m_log.DebugFormat(
94 // "[ARCHIVER]: Successfully read {0} ({1} bytes)}", filePath, data.Length); 95 // "[ARCHIVER]: Successfully read {0} ({1} bytes)}", filePath, data.Length);
95 96 if (entryType==TarArchiveReader.TarEntryType.TYPE_DIRECTORY) {
96 if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH)) 97 m_log.WarnFormat("[ARCHIVER]: Ignoring directory entry {0}",
98 filePath);
99 }
100 else if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH))
97 { 101 {
98 serialisedSceneObjects.Add(m_asciiEncoding.GetString(data)); 102 serialisedSceneObjects.Add(m_asciiEncoding.GetString(data));
99 } 103 }
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveReader.cs b/OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveReader.cs
index 4e000cc..5d308f0 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveReader.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveReader.cs
@@ -39,6 +39,18 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
39 public class TarArchiveReader 39 public class TarArchiveReader
40 { 40 {
41 //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 41 //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
42 public enum TarEntryType
43 {
44 TYPE_UNKNOWN = 0,
45 TYPE_NORMAL_FILE = 1,
46 TYPE_HARD_LINK = 2,
47 TYPE_SYMBOLIC_LINK = 3,
48 TYPE_CHAR_SPECIAL = 4,
49 TYPE_BLOCK_SPECIAL = 5,
50 TYPE_DIRECTORY = 6,
51 TYPE_FIFO = 7,
52 TYPE_CONTIGUOUS_FILE = 8,
53 }
42 54
43 protected static ASCIIEncoding m_asciiEncoding = new ASCIIEncoding(); 55 protected static ASCIIEncoding m_asciiEncoding = new ASCIIEncoding();
44 56
@@ -66,15 +78,16 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
66 /// </summary> 78 /// </summary>
67 /// <param name="filePath"></param> 79 /// <param name="filePath"></param>
68 /// <returns>the data for the entry. Returns null if there are no more entries</returns> 80 /// <returns>the data for the entry. Returns null if there are no more entries</returns>
69 public byte[] ReadEntry(out string filePath) 81 public byte[] ReadEntry(out string filePath, out TarEntryType entryType)
70 { 82 {
71 filePath = String.Empty; 83 filePath = String.Empty;
72 84 entryType = TarEntryType.TYPE_UNKNOWN;
73 TarHeader header = ReadHeader(); 85 TarHeader header = ReadHeader();
74 86
75 if (null == header) 87 if (null == header)
76 return null; 88 return null;
77 89
90 entryType = header.EntryType;
78 filePath = header.FilePath; 91 filePath = header.FilePath;
79 byte[] data = m_br.ReadBytes(header.FileSize); 92 byte[] data = m_br.ReadBytes(header.FileSize);
80 93
@@ -112,6 +125,36 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
112 tarHeader.FilePath = tarHeader.FilePath.Trim(m_nullCharArray); 125 tarHeader.FilePath = tarHeader.FilePath.Trim(m_nullCharArray);
113 tarHeader.FileSize = ConvertOctalBytesToDecimal(header, 124, 11); 126 tarHeader.FileSize = ConvertOctalBytesToDecimal(header, 124, 11);
114 127
128 switch (header[156])
129 {
130 case 0:
131 tarHeader.EntryType = TarEntryType.TYPE_NORMAL_FILE;
132 break;
133 case (byte)'0':
134 tarHeader.EntryType = TarEntryType.TYPE_NORMAL_FILE;
135 break;
136 case (byte)'1':
137 tarHeader.EntryType = TarEntryType.TYPE_HARD_LINK;
138 break;
139 case (byte)'2':
140 tarHeader.EntryType = TarEntryType.TYPE_SYMBOLIC_LINK;
141 break;
142 case (byte)'3':
143 tarHeader.EntryType = TarEntryType.TYPE_CHAR_SPECIAL;
144 break;
145 case (byte)'4':
146 tarHeader.EntryType = TarEntryType.TYPE_BLOCK_SPECIAL;
147 break;
148 case (byte)'5':
149 tarHeader.EntryType = TarEntryType.TYPE_DIRECTORY;
150 break;
151 case (byte)'6':
152 tarHeader.EntryType = TarEntryType.TYPE_FIFO;
153 break;
154 case (byte)'7':
155 tarHeader.EntryType = TarEntryType.TYPE_CONTIGUOUS_FILE;
156 break;
157 }
115 return tarHeader; 158 return tarHeader;
116 } 159 }
117 160
@@ -145,5 +188,6 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
145 { 188 {
146 public string FilePath; 189 public string FilePath;
147 public int FileSize; 190 public int FileSize;
191 public TarArchiveReader.TarEntryType EntryType;
148 } 192 }
149} 193}