Skip to content

Commit b3c35d7

Browse files
committed
refactor: create extended timestamp extra field type
1 parent d3b0de4 commit b3c35d7

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

main.go

+20-8
Original file line numberDiff line numberDiff line change
@@ -323,21 +323,33 @@ func (a *Archiver) constructHeader(file *File) error {
323323
// https://libzip.org/specifications/extrafld.txt
324324

325325
if !header.Modified.IsZero() {
326-
extraBuf := make([]byte, 0, 9) // 2*SizeOf(uint16) + SizeOf(uint) + SizeOf(uint32)
327-
328-
extraBuf = binary.LittleEndian.AppendUint16(extraBuf, extendedTimestampTag)
329-
extraBuf = binary.LittleEndian.AppendUint16(extraBuf, 5) // block size
330-
extraBuf = append(extraBuf, uint8(1)) // flags
331-
extraBuf = binary.LittleEndian.AppendUint32(extraBuf, uint32(header.Modified.Unix()))
332-
333-
header.Extra = append(header.Extra, extraBuf...)
326+
header.Extra = append(header.Extra, NewExtendedTimestampExtraField(header.Modified).Encode()...)
334327
}
335328

336329
file.Header = header
337330

338331
return nil
339332
}
340333

334+
type ExtendedTimestampExtraField struct {
335+
modified time.Time
336+
}
337+
338+
func NewExtendedTimestampExtraField(modified time.Time) *ExtendedTimestampExtraField {
339+
return &ExtendedTimestampExtraField{
340+
modified,
341+
}
342+
}
343+
344+
func (e *ExtendedTimestampExtraField) Encode() []byte {
345+
extraBuf := make([]byte, 0, 9) // 2*SizeOf(uint16) + SizeOf(uint) + SizeOf(uint32)
346+
extraBuf = binary.LittleEndian.AppendUint16(extraBuf, extendedTimestampTag)
347+
extraBuf = binary.LittleEndian.AppendUint16(extraBuf, 5) // block size
348+
extraBuf = append(extraBuf, uint8(1)) // flags
349+
extraBuf = binary.LittleEndian.AppendUint32(extraBuf, uint32(e.modified.Unix()))
350+
return extraBuf
351+
}
352+
341353
// https://cs.opensource.google/go/go/+/refs/tags/go1.21.0:src/archive/zip/writer.go
342354
func detectUTF8(s string) (valid, require bool) {
343355
for i := 0; i < len(s); {

0 commit comments

Comments
 (0)