Skip to content

Commit

Permalink
Merge pull request #2107 from sashayakovtseva/public-get-devices
Browse files Browse the repository at this point in the history
Make get devices function public
  • Loading branch information
Mrunal Patel authored Aug 26, 2019
2 parents f061842 + afc2479 commit 68d73f0
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions libcontainer/devices/devices.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ import (
"path/filepath"

"github.com/opencontainers/runc/libcontainer/configs"

"golang.org/x/sys/unix"
)

var (
// ErrNotADevice denotes that a file is not a valid linux device.
ErrNotADevice = errors.New("not a device node")
)

Expand All @@ -21,7 +21,8 @@ var (
ioutilReadDir = ioutil.ReadDir
)

// Given the path to a device and its cgroup_permissions(which cannot be easily queried) look up the information about a linux device and return that information as a Device struct.
// Given the path to a device and its cgroup_permissions(which cannot be easily queried) look up the
// information about a linux device and return that information as a Device struct.
func DeviceFromPath(path, permissions string) (*configs.Device, error) {
var stat unix.Stat_t
err := unixLstat(path, &stat)
Expand Down Expand Up @@ -60,16 +61,19 @@ func DeviceFromPath(path, permissions string) (*configs.Device, error) {
}, nil
}

// HostDevices returns all devices that can be found under /dev directory.
func HostDevices() ([]*configs.Device, error) {
return getDevices("/dev")
return GetDevices("/dev")
}

func getDevices(path string) ([]*configs.Device, error) {
// GetDevices recursively traverses a directory specified by path
// and returns all devices found there.
func GetDevices(path string) ([]*configs.Device, error) {
files, err := ioutilReadDir(path)
if err != nil {
return nil, err
}
out := []*configs.Device{}
var out []*configs.Device
for _, f := range files {
switch {
case f.IsDir():
Expand All @@ -79,7 +83,7 @@ func getDevices(path string) ([]*configs.Device, error) {
case "pts", "shm", "fd", "mqueue", ".lxc", ".lxd-mounts", ".udev":
continue
default:
sub, err := getDevices(filepath.Join(path, f.Name()))
sub, err := GetDevices(filepath.Join(path, f.Name()))
if err != nil {
return nil, err
}
Expand Down

0 comments on commit 68d73f0

Please sign in to comment.