@@ -323,21 +323,33 @@ func (a *Archiver) constructHeader(file *File) error {
323
323
// https://libzip.org/specifications/extrafld.txt
324
324
325
325
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 ()... )
334
327
}
335
328
336
329
file .Header = header
337
330
338
331
return nil
339
332
}
340
333
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
+
341
353
// https://cs.opensource.google/go/go/+/refs/tags/go1.21.0:src/archive/zip/writer.go
342
354
func detectUTF8 (s string ) (valid , require bool ) {
343
355
for i := 0 ; i < len (s ); {
0 commit comments