shared/idmap/idmapset_linux.go
func (m *IdmapSet) AddSafe(i IdmapEntry) error {
	result := []IdmapEntry{}
	added := false
	for _, e := range m.Idmap {
		if !e.Intersects(i) {
			result = append(result, e)
			continue
		}

		if e.HostidsIntersect(i) {
			return ErrHostIdIsSubId
		}

		added = true

		lower := IdmapEntry{
			Isuid:    e.Isuid,
			Isgid:    e.Isgid,
			Hostid:   e.Hostid,
			Nsid:     e.Nsid,
			Maprange: i.Nsid - e.Nsid,
		}

		upper := IdmapEntry{
			Isuid:    e.Isuid,
			Isgid:    e.Isgid,
			Hostid:   e.Hostid + lower.Maprange + i.Maprange,
			Nsid:     i.Nsid + i.Maprange,
			Maprange: e.Maprange - i.Maprange - lower.Maprange,
		}

		if lower.Maprange > 0 {
			result = append(result, lower)
		}
		result = append(result, i)
		if upper.Maprange > 0 {
			result = append(result, upper)
		}
	}

	if !added {
		result = append(result, i)
	}

	m.Idmap = result
	return nil
}
func (m *IdmapSet) AddSafe(i IdmapEntry) error {
	result := []IdmapEntry{}
	added := false
	for _, e := range m.Idmap {
		if !e.Intersects(i) {
			result = append(result, e)
			continue
		}

		if e.HostidsIntersect(i) {
			return ErrHostIdIsSubId
		}

		added = true

		lower := IdmapEntry{
			Isuid:    e.Isuid,
			Isgid:    e.Isgid,
			Hostid:   e.Hostid,
			Nsid:     e.Nsid,
			Maprange: i.Nsid - e.Nsid,
		}

		upper := IdmapEntry{
			Isuid:    e.Isuid,
			Isgid:    e.Isgid,
			Hostid:   e.Hostid + lower.Maprange + i.Maprange,
			Nsid:     i.Nsid + i.Maprange,
			Maprange: e.Maprange - i.Maprange - lower.Maprange,
		}

		if lower.Maprange > 0 {
			result = append(result, lower)
		}
		result = append(result, i)
		if upper.Maprange > 0 {
			result = append(result, upper)
		}
	}

	if !added {
		result = append(result, i)
	}

	m.Idmap = result
	return nil
}
func ( m * IdmapSet ) AddSafe ( i IdmapEntry ) error { result := [ ] IdmapEntry { } added := false for _ , e := range m . Idmap { if ! e . Intersects ( i ) { result = append ( result , e ) continue } if e . HostidsIntersect ( i ) { return ErrHostIdIsSubId } added = true lower := IdmapEntry { Isuid : e . Isuid , Isgid : e . Isgid , Hostid : e . Hostid , Nsid : e . Nsid , Maprange : i . Nsid - e . Nsid , } upper := IdmapEntry { Isuid : e . Isuid , Isgid : e . Isgid , Hostid : e . Hostid + lower . Maprange + i . Maprange , Nsid : i . Nsid + i . Maprange , Maprange : e . Maprange - i . Maprange - lower . Maprange , } if lower . Maprange > 0 { result = append ( result , lower ) } result = append ( result , i ) if upper . Maprange > 0 { result = append ( result , upper ) } } if ! added { result = append ( result , i ) } m . Idmap = result return nil }
/* AddSafe adds an entry to the idmap set, breaking apart any ranges that the
 * new idmap intersects with in the process.
 */
/ * AddSafe adds an entry to the idmap set breaking apart any ranges that the new idmap intersects with in the process .