aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveReader.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveReader.cs')
-rw-r--r--OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveReader.cs48
1 files changed, 46 insertions, 2 deletions
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}