func Write()

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
}