shared/idmap/idmapset_linux.go
func getFromProc(fname string) ([][]int64, error) {
	entries := [][]int64{}

	f, err := os.Open(fname)
	if err != nil {
		return nil, err
	}
	defer f.Close()

	scanner := bufio.NewScanner(f)
	for scanner.Scan() {
		// Skip comments
		s := strings.Split(scanner.Text(), "#")
		if len(s[0]) == 0 {
			continue
		}

		// Validate format
		s = strings.Fields(s[0])
		if len(s) < 3 {
			return nil, fmt.Errorf("Unexpected values in %q: %q", fname, s)
		}

		// Get range start
		entryStart, err := strconv.ParseUint(s[0], 10, 32)
		if err != nil {
			continue
		}

		// Get range size
		entryHost, err := strconv.ParseUint(s[1], 10, 32)
		if err != nil {
			continue
		}

		// Get range size
		entrySize, err := strconv.ParseUint(s[2], 10, 32)
		if err != nil {
			continue
		}

		entries = append(entries, []int64{int64(entryStart), int64(entryHost), int64(entrySize)})
	}

	if len(entries) == 0 {
		return nil, fmt.Errorf("Namespace doesn't have any map set")
	}

	return entries, nil
}
func getFromProc(fname string) ([][]int64, error) {
	entries := [][]int64{}

	f, err := os.Open(fname)
	if err != nil {
		return nil, err
	}
	defer f.Close()

	scanner := bufio.NewScanner(f)
	for scanner.Scan() {
		// Skip comments
		s := strings.Split(scanner.Text(), "#")
		if len(s[0]) == 0 {
			continue
		}

		// Validate format
		s = strings.Fields(s[0])
		if len(s) < 3 {
			return nil, fmt.Errorf("Unexpected values in %q: %q", fname, s)
		}

		// Get range start
		entryStart, err := strconv.ParseUint(s[0], 10, 32)
		if err != nil {
			continue
		}

		// Get range size
		entryHost, err := strconv.ParseUint(s[1], 10, 32)
		if err != nil {
			continue
		}

		// Get range size
		entrySize, err := strconv.ParseUint(s[2], 10, 32)
		if err != nil {
			continue
		}

		entries = append(entries, []int64{int64(entryStart), int64(entryHost), int64(entrySize)})
	}

	if len(entries) == 0 {
		return nil, fmt.Errorf("Namespace doesn't have any map set")
	}

	return entries, nil
}
func getFromProc ( fname string ) ( [ ] [ ] int64 , error ) { entries := [ ] [ ] int64 { } f , err := os . Open ( fname ) if err != nil { return nil , err } defer f . Close ( ) scanner := bufio . NewScanner ( f ) for scanner . Scan ( ) { // Skip comments s := strings . Split ( scanner . Text ( ) , " " ) if len ( s [ 0 ] ) == 0 { continue } // Validate format s = strings . Fields ( s [ 0 ] ) if len ( s ) < 3 { return nil , fmt . Errorf ( " " , fname , s ) } // Get range start entryStart , err := strconv . ParseUint ( s [ 0 ] , 10 , 32 ) if err != nil { continue } // Get range size entryHost , err := strconv . ParseUint ( s [ 1 ] , 10 , 32 ) if err != nil { continue } // Get range size entrySize , err := strconv . ParseUint ( s [ 2 ] , 10 , 32 ) if err != nil { continue } entries = append ( entries , [ ] int64 { int64 ( entryStart ) , int64 ( entryHost ) , int64 ( entrySize ) } ) } if len ( entries ) == 0 { return nil , fmt . Errorf ( " " ) } return entries , nil }
/*
 * get a uid or gid mapping from /proc/self/{g,u}id_map
 */
/ * get a uid or gid mapping from / proc / self / { g u } id_map