private GetData ( short tag ) : ITaggedData | ||
tag | short | The tag to search for. |
return | ITaggedData |
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)); }
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); }
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)); }
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)); }
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); }