2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / ICSharpCode.SharpZipLib / ICSharpCode.SharpZipLib / Zip / ZipFile.cs
index fff7bdb6adcefb6c96b1a1591b31b3234d85077f..3e3b2a18ef5988f756df63ccc48de4fc3974a37f 100644 (file)
@@ -43,7 +43,8 @@ using System.Text;
 using ICSharpCode.SharpZipLib.Zip.Compression.Streams;\r
 using ICSharpCode.SharpZipLib.Zip.Compression;\r
 \r
-namespace ICSharpCode.SharpZipLib.Zip {\r
+namespace ICSharpCode.SharpZipLib.Zip \r
+{\r
        \r
        /// <summary>\r
        /// This class represents a Zip archive.  You can ask for the contained\r
@@ -68,13 +69,13 @@ namespace ICSharpCode.SharpZipLib.Zip {
        ///     static public void Main(string[] args)\r
        ///     {\r
        ///             ZipFile zFile = new ZipFile(args[0]);\r
-       ///             Console.WriteLine("Listing of : " + zFile.Name);\r
-       ///             Console.WriteLine("");\r
-       ///             Console.WriteLine("Raw Size    Size      Date     Time     Name");\r
-       ///             Console.WriteLine("--------  --------  --------  ------  ---------");\r
+       ///             //Console.WriteLine("Listing of : " + zFile.Name);\r
+       ///             //Console.WriteLine("");\r
+       ///             //Console.WriteLine("Raw Size    Size      Date     Time     Name");\r
+       ///             //Console.WriteLine("--------  --------  --------  ------  ---------");\r
        ///             foreach (ZipEntry e in zFile) {\r
        ///                     DateTime d = e.DateTime;\r
-       ///                     Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,\r
+       ///                     //Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,\r
        ///                                                                         d.ToString("dd-MM-yy"), d.ToString("t"),\r
        ///                                                                         e.Name);\r
        ///             }\r
@@ -84,6 +85,7 @@ namespace ICSharpCode.SharpZipLib.Zip {
        public class ZipFile : IEnumerable\r
        {\r
                string     name;\r
+               string     comment;\r
                Stream     baseStream;\r
                ZipEntry[] entries;\r
                \r
@@ -203,6 +205,12 @@ namespace ICSharpCode.SharpZipLib.Zip {
                        \r
                        int centralOffset = ReadLeInt();\r
                        \r
+                       // GET COMMENT SIZE (COMES AFTER CENTRALOFFSET) \r
+                       int commentSize = ReadLeShort(); \r
+                       byte[] zipComment = new byte[commentSize]; \r
+                       baseStream.Read(zipComment, 0, zipComment.Length); \r
+                       comment = ZipConstants.ConvertToString(zipComment); \r
+                       \r
                        entries = new ZipEntry[count];\r
                        baseStream.Seek(centralOffset, SeekOrigin.Begin);\r
                        for (int i = 0; i < count; i++) {\r
@@ -242,7 +250,7 @@ namespace ICSharpCode.SharpZipLib.Zip {
                                entry.Crc = crc & 0xffffffffL;\r
                                entry.Size = size & 0xffffffffL;\r
                                entry.CompressedSize = csize & 0xffffffffL;\r
-                               entry.DosTime = dostime;\r
+                               entry.DosTime = (uint)dostime;\r
                                if (extraLen > 0) {\r
                                        byte[] extra = new byte[extraLen];\r
                                        baseStream.Read(extra, 0, extraLen);\r
@@ -252,8 +260,8 @@ namespace ICSharpCode.SharpZipLib.Zip {
                                        baseStream.Read(buffer, 0, commentLen);\r
                                        entry.Comment = ZipConstants.ConvertToString(buffer);\r
                                }\r
-                               entry.zipFileIndex = i;\r
-                               entry.offset = offset;\r
+                               entry.ZipFileIndex = i;\r
+                               entry.Offset = offset;\r
                                entries[i] = entry;\r
                        }\r
                }\r
@@ -293,7 +301,7 @@ namespace ICSharpCode.SharpZipLib.Zip {
                                        return i;\r
                                }\r
                        }\r
-                       return -1;\r
+                       return -1; // ok\r
                }\r
                \r
                /// <summary>\r
@@ -330,7 +338,7 @@ namespace ICSharpCode.SharpZipLib.Zip {
                long CheckLocalHeader(ZipEntry entry)\r
                {\r
                        lock(baseStream) {\r
-                               baseStream.Seek(entry.offset, SeekOrigin.Begin);\r
+                               baseStream.Seek(entry.Offset, SeekOrigin.Begin);\r
                                if (ReadLeInt() != ZipConstants.LOCSIG) {\r
                                        throw new ZipException("Wrong Local header signature");\r
                                }\r
@@ -359,7 +367,7 @@ namespace ICSharpCode.SharpZipLib.Zip {
                                }\r
                                \r
                                int extraLen = entry.Name.Length + ReadLeShort();\r
-                               return entry.offset + ZipConstants.LOCHDR + extraLen;\r
+                               return entry.Offset + ZipConstants.LOCHDR + extraLen;\r
                        }\r
                }\r
                \r
@@ -383,7 +391,7 @@ namespace ICSharpCode.SharpZipLib.Zip {
                                throw new InvalidOperationException("ZipFile has closed");\r
                        }\r
                        \r
-                       int index = entry.zipFileIndex;\r
+                       int index = entry.ZipFileIndex;\r
                        if (index < 0 || index >= entries.Length || entries[index].Name != entry.Name) {\r
                                index = GetEntryIndex(entry.Name);\r
                                if (index < 0) {\r
@@ -404,6 +412,15 @@ namespace ICSharpCode.SharpZipLib.Zip {
                        }\r
                }\r
                \r
+               /// <summary>\r
+               /// The comment for the whole zip file.\r
+               /// </summary>\r
+               public string ZipFileComment {\r
+                       get {\r
+                               return comment;\r
+                       }\r
+               }\r
+               \r
                /// <summary>\r
                /// Returns the name of this zip file.\r
                /// </summary>\r
@@ -465,7 +482,8 @@ namespace ICSharpCode.SharpZipLib.Zip {
                                end = start + len;\r
                        }\r
                        \r
-                       public override int Available {\r
+                       public override int Available \r
+                       {\r
                                get {\r
                                        long amount = end - filepos;\r
                                        if (amount > Int32.MaxValue) {\r
@@ -479,8 +497,9 @@ namespace ICSharpCode.SharpZipLib.Zip {
                        public override int ReadByte()\r
                        {\r
                                if (filepos == end) {\r
-                                       return -1;\r
+                                       return -1; //ok\r
                                }\r
+                               \r
                                lock(baseStream) {\r
                                        baseStream.Seek(filepos++, SeekOrigin.Begin);\r
                                        return baseStream.ReadByte();\r
@@ -492,7 +511,7 @@ namespace ICSharpCode.SharpZipLib.Zip {
                                if (len > end - filepos) {\r
                                        len = (int) (end - filepos);\r
                                        if (len == 0) {\r
-                                               return -1;\r
+                                               return 0;\r
                                        }\r
                                }\r
                                lock(baseStream) {\r