Skip to content

Commit 57c3cd2

Browse files
committed
Fix ParseUintList docker deprecation
Signed-off-by: apostasie <[email protected]>
1 parent 66a7a75 commit 57c3cd2

File tree

1 file changed

+50
-3
lines changed

1 file changed

+50
-3
lines changed

pkg/sysinfo/sysinfo.go

+50-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@
2424
// Package sysinfo stores information about which features a kernel supports.
2525
package sysinfo // import "github.com/docker/docker/"
2626

27-
import "github.com/docker/docker/pkg/parsers"
27+
import (
28+
"fmt"
29+
"strconv"
30+
"strings"
31+
)
2832

2933
// Opt for New().
3034
type Opt func(info *SysInfo)
@@ -168,7 +172,7 @@ func (c cgroupCpusetInfo) IsCpusetMemsAvailable(provided string) (bool, error) {
168172
}
169173

170174
func isCpusetListAvailable(provided, available string) (bool, error) {
171-
parsedAvailable, err := parsers.ParseUintList(available)
175+
parsedAvailable, err := parseUintList(available, 0)
172176
if err != nil {
173177
return false, err
174178
}
@@ -180,7 +184,7 @@ func isCpusetListAvailable(provided, available string) (bool, error) {
180184
maxCPUs = m
181185
}
182186
}
183-
parsedProvided, err := parsers.ParseUintListMaximum(provided, maxCPUs)
187+
parsedProvided, err := parseUintList(provided, maxCPUs)
184188
if err != nil {
185189
return false, err
186190
}
@@ -191,3 +195,46 @@ func isCpusetListAvailable(provided, available string) (bool, error) {
191195
}
192196
return true, nil
193197
}
198+
199+
func parseUintList(val string, maximum int) (map[int]bool, error) {
200+
if val == "" {
201+
return map[int]bool{}, nil
202+
}
203+
204+
availableInts := make(map[int]bool)
205+
split := strings.Split(val, ",")
206+
errInvalidFormat := fmt.Errorf("invalid format: %s", val)
207+
208+
for _, r := range split {
209+
if !strings.Contains(r, "-") {
210+
v, err := strconv.Atoi(r)
211+
if err != nil {
212+
return nil, errInvalidFormat
213+
}
214+
if maximum != 0 && v > maximum {
215+
return nil, fmt.Errorf("value of out range, maximum is %d", maximum)
216+
}
217+
availableInts[v] = true
218+
} else {
219+
minS, maxS, _ := strings.Cut(r, "-")
220+
minI, err := strconv.Atoi(minS)
221+
if err != nil {
222+
return nil, errInvalidFormat
223+
}
224+
maxI, err := strconv.Atoi(maxS)
225+
if err != nil {
226+
return nil, errInvalidFormat
227+
}
228+
if maxI < minI {
229+
return nil, errInvalidFormat
230+
}
231+
if maximum != 0 && maxI > maximum {
232+
return nil, fmt.Errorf("value of out range, maximum is %d", maximum)
233+
}
234+
for i := minI; i <= maxI; i++ {
235+
availableInts[i] = true
236+
}
237+
}
238+
}
239+
return availableInts, nil
240+
}

0 commit comments

Comments
 (0)