func readExtTimes(f *fileBlockHeader, b *readBuf) {
	if len(*b) < 2 {
		return // invalid, not enough data
	}
	flags := b.uint16()

	ts := []*time.Time{&f.ModificationTime, &f.CreationTime, &f.AccessTime}

	for i, t := range ts {
		n := flags >> uint((3-i)*4)
		if n&0x8 == 0 {
			continue
		}
		if i != 0 { // ModificationTime already read so skip
			if len(*b) < 4 {
				return // invalid, not enough data
			}
			*t = parseDosTime(b.uint32())
		}
		if n&0x4 > 0 {
			*t = t.Add(time.Second)
		}
		n &= 0x3
		if n == 0 {
			continue
		}
		if len(*b) < int(n) {
			return // invalid, not enough data
		}
		// add extra time data in 100's of nanoseconds
		d := time.Duration(0)
		for j := 3 - n; j < n; j++ {
			d |= time.Duration(b.byte()) << (j * 8)
		}
		d *= 100
		*t = t.Add(d)
	}
}
func readExtTimes(f *fileBlockHeader, b *readBuf) {
	if len(*b) < 2 {
		return 
	}
	flags := b.uint16()

	ts := []*time.Time{&f.ModificationTime, &f.CreationTime, &f.AccessTime}

	for i, t := range ts {
		n := flags >> uint((3-i)*4)
		if n&0x8 == 0 {
			continue
		}
		if i != 0 { 
			if len(*b) < 4 {
				return 
			}
			*t = parseDosTime(b.uint32())
		}
		if n&0x4 > 0 {
			*t = t.Add(time.Second)
		}
		n &= 0x3
		if n == 0 {
			continue
		}
		if len(*b) < int(n) {
			return 
		}
		
		d := time.Duration(0)
		for j := 3 - n; j < n; j++ {
			d |= time.Duration(b.byte()) << (j * 8)
		}
		d *= 100
		*t = t.Add(d)
	}
}
func readExtTimes ( f * fileBlockHeader , b * readBuf ) { if len ( * b ) < 2 { return // invalid, not enough data } flags := b . uint16 ( ) ts := [ ] * time . Time { & f . ModificationTime , & f . CreationTime , & f . AccessTime } for i , t := range ts { n := flags >> uint ( ( 3 - i ) * 4 ) if n & 0x8 == 0 { continue } if i != 0 { // ModificationTime already read so skip if len ( * b ) < 4 { return // invalid, not enough data } * t = parseDosTime ( b . uint32 ( ) ) } if n & 0x4 > 0 { * t = t . Add ( time . Second ) } n &= 0x3 if n == 0 { continue } if len ( * b ) < int ( n ) { return // invalid, not enough data } // add extra time data in 100's of nanoseconds d := time . Duration ( 0 ) for j := 3 - n ; j < n ; j ++ { d |= time . Duration ( b . byte ( ) ) << ( j * 8 ) } d *= 100 * t = t . Add ( d ) } }
// readExtTimes reads and parses the optional extra time field from the file header.
readExtTimes reads and parses the optional extra time field from the file header .