in leapsectz/leapsectz.go [237:311]
func Write(f io.Writer, ver byte, ls []LeapSecond, name string) error {
if ver != 0 && ver != '2' {
return errUnsupportedVersion
}
var nameFormatted string
if name == "" {
nameFormatted = "UTC\x00"
} else {
nameFormatted = name + "\x00"
}
// prepare header which will be reused in case of version 2
hdr := prepareHeader(ver, len(ls), nameFormatted)
// Write prepared header
if _, err := f.Write(hdr); err != nil {
return err
}
// data before array of leap seconds
if err := writePreData(f, nameFormatted); err != nil {
return err
}
// array of leap seconds
for i := 0; i < len(ls); i++ {
l := []uint32{uint32(ls[i].Tleap), uint32(ls[i].Nleap)}
if err := binary.Write(f, binary.BigEndian, &l); err != nil {
return err
}
}
// write data after leap seconds array
if err := writePostData(f); err != nil {
return err
}
if ver != '2' {
return nil
}
// now we have to write version 2 part of file
// prepared header could be reused
if _, err := f.Write(hdr); err != nil {
return err
}
// data before array of leap seconds
if err := writePreData(f, nameFormatted); err != nil {
return err
}
// array of leap seconds version 2
for i := 0; i < len(ls); i++ {
l := ls[i]
if err := binary.Write(f, binary.BigEndian, &l); err != nil {
return err
}
}
// write data after leap seconds array
if err := writePostData(f); err != nil {
return err
}
// and now we have to write POSIZ TZ string along with new line separators
// usually it's the same string as in the header
posixTz := "\n" + name + "\n"
if _, err := io.WriteString(f, posixTz); err != nil {
return err
}
return nil
}