GetData() private method

Get the tagged data for a tag.
private GetData ( short tag ) : ITaggedData
tag short The tag to search for.
return ITaggedData
Exemplo n.º 1
0
        private DateTime GetDateTime(ZipExtraData extraData)
        {
            // Check for NT timestamp
            // NOTE: Disable by default to match behavior of InfoZIP
#if RESPECT_NT_TIMESTAMP
            NTTaggedData ntData = extraData.GetData <NTTaggedData>();
            if (ntData != null)
            {
                return(ntData.LastModificationTime);
            }
#endif

            // Check for Unix timestamp
            ExtendedUnixData unixData = extraData.GetData <ExtendedUnixData>();
            if (unixData != null &&
                // Only apply modification time, but require all other values to be present
                // This is done to match InfoZIP's behaviour
                ((unixData.Include & ExtendedUnixData.Flags.ModificationTime) != 0) &&
                ((unixData.Include & ExtendedUnixData.Flags.AccessTime) != 0) &&
                ((unixData.Include & ExtendedUnixData.Flags.CreateTime) != 0))
            {
                return(unixData.ModificationTime);
            }

            // Fall back to DOS time
            uint sec  = Math.Min(59, 2 * (dosTime & 0x1f));
            uint min  = Math.Min(59, (dosTime >> 5) & 0x3f);
            uint hrs  = Math.Min(23, (dosTime >> 11) & 0x1f);
            uint mon  = Math.Max(1, Math.Min(12, ((dosTime >> 21) & 0xf)));
            uint year = ((dosTime >> 25) & 0x7f) + 1980;
            int  day  = Math.Max(1, Math.Min(DateTime.DaysInMonth((int)year, (int)mon), (int)((dosTime >> 16) & 0x1f)));
            return(new DateTime((int)year, (int)mon, day, (int)hrs, (int)min, (int)sec, DateTimeKind.Utc));
        }
Exemplo n.º 2
0
        private static DateTime?GetDateTime(ZipExtraData extraData)
        {
            // Check for NT timestamp
            // NOTE: Disable by default to match behavior of InfoZIP
#if RESPECT_NT_TIMESTAMP
            NTTaggedData ntData = extraData.GetData <NTTaggedData>();
            if (ntData != null)
            {
                return(ntData.LastModificationTime);
            }
#endif

            // Check for Unix timestamp
            ExtendedUnixData unixData = extraData.GetData <ExtendedUnixData>();
            if (unixData != null && unixData.Include.HasFlag(ExtendedUnixData.Flags.ModificationTime))
            {
                return(unixData.ModificationTime);
            }

            return(null);
        }
Exemplo n.º 3
0
        private DateTime GetDateTime(ZipExtraData extraData)
        {
            ExtendedUnixData data = extraData.GetData <ExtendedUnixData>();

            if (data != null && (byte)(data.Include & ExtendedUnixData.Flags.ModificationTime) != 0 && (byte)(data.Include & ExtendedUnixData.Flags.AccessTime) != 0 && (byte)(data.Include & ExtendedUnixData.Flags.CreateTime) != 0)
            {
                return(data.ModificationTime);
            }
            uint second = Math.Min(59u, 2u * (this.dosTime & 31u));
            uint minute = Math.Min(59u, this.dosTime >> 5 & 63u);
            uint hour   = Math.Min(23u, this.dosTime >> 11 & 31u);
            uint month  = Math.Max(1u, Math.Min(12u, this.dosTime >> 21 & 15u));
            uint year   = (this.dosTime >> 25 & 127u) + 1980u;
            int  day    = Math.Max(1, Math.Min(DateTime.DaysInMonth((int)year, (int)month), (int)(this.dosTime >> 16 & 31u)));

            return(new DateTime((int)year, (int)month, day, (int)hour, (int)minute, (int)second, DateTimeKind.Utc));
        }
Exemplo n.º 4
0
        private DateTime GetDateTime(ZipExtraData extraData)
        {
            ExtendedUnixData data = extraData.GetData <ExtendedUnixData>();

            if (data != null && (data.Include & ExtendedUnixData.Flags.ModificationTime) != 0 && (data.Include & ExtendedUnixData.Flags.AccessTime) != 0 && (data.Include & ExtendedUnixData.Flags.CreateTime) != 0)
            {
                return(data.ModificationTime);
            }
            uint second = Math.Min(59u, 2 * (dosTime & 0x1F));
            uint minute = Math.Min(59u, (dosTime >> 5) & 0x3F);
            uint hour   = Math.Min(23u, (dosTime >> 11) & 0x1F);
            uint month  = Math.Max(1u, Math.Min(12u, (dosTime >> 21) & 0xF));
            uint year   = ((dosTime >> 25) & 0x7F) + 1980;
            int  day    = Math.Max(1, Math.Min(DateTime.DaysInMonth((int)year, (int)month), (int)((dosTime >> 16) & 0x1F)));

            return(new DateTime((int)year, (int)month, day, (int)hour, (int)minute, (int)second, DateTimeKind.Utc));
        }
Exemplo n.º 5
0
        private DateTime GetDateTime(ZipExtraData extraData)
        {
            // Check for NT timestamp
            // NOTE: Disable by default to match behavior of InfoZIP
            #if RESPECT_NT_TIMESTAMP
            NTTaggedData ntData = extraData.GetData<NTTaggedData>();
            if (ntData != null)
                return ntData.LastModificationTime;
            #endif

            // Check for Unix timestamp
            ExtendedUnixData unixData = extraData.GetData<ExtendedUnixData>();
            if (unixData != null &&
                // Only apply modification time, but require all other values to be present
                // This is done to match InfoZIP's behaviour
                ((unixData.Include & ExtendedUnixData.Flags.ModificationTime) != 0) &&
                ((unixData.Include & ExtendedUnixData.Flags.AccessTime) != 0) &&
                ((unixData.Include & ExtendedUnixData.Flags.CreateTime) != 0))
                return unixData.ModificationTime;

            // Fall back to DOS time
            uint sec = Math.Min(59, 2 * (dosTime & 0x1f));
            uint min = Math.Min(59, (dosTime >> 5) & 0x3f);
            uint hrs = Math.Min(23, (dosTime >> 11) & 0x1f);
            uint mon = Math.Max(1, Math.Min(12, ((dosTime >> 21) & 0xf)));
            uint year = ((dosTime >> 25) & 0x7f) + 1980;
            int day = Math.Max(1, Math.Min(DateTime.DaysInMonth((int)year, (int)mon), (int)((dosTime >> 16) & 0x1f)));
            return new DateTime((int)year, (int)mon, day, (int)hrs, (int)min, (int)sec, DateTimeKind.Utc);
        }