Andrew Rynhard ee226dddac
chore: enforce commit and license policies (#304)
Signed-off-by: Andrew Rynhard <andrew@andrewrynhard.com>
2019-01-13 16:10:49 -08:00

41 lines
1.4 KiB
Go

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package util
import (
"strings"
"github.com/pkg/errors"
)
// PartNo returns the partition number.
func PartNo(partname string) (partno string, err error) {
partname = strings.TrimPrefix(partname, "/dev/")
if strings.HasPrefix(partname, "nvme") {
idx := strings.Index(partname, "p")
return partname[idx+1:], nil
} else if strings.HasPrefix(partname, "sd") || strings.HasPrefix(partname, "hd") || strings.HasPrefix(partname, "vd") {
return strings.TrimLeft(partname, "/abcdefghijklmnopqrstuvwxyz"), nil
}
return "", errors.New("could not determine partition number from partition name")
}
// DevnameFromPartname returns the device name from a partition name.
func DevnameFromPartname(partname string) (devname string, err error) {
partname = strings.TrimPrefix(partname, "/dev/")
var partno string
if partno, err = PartNo(partname); err != nil {
return "", err
}
if strings.HasPrefix(partname, "nvme") {
return strings.TrimRight(partname, "p"+partno), nil
} else if strings.HasPrefix(partname, "sd") || strings.HasPrefix(partname, "hd") || strings.HasPrefix(partname, "vd") {
return strings.TrimRight(partname, partno), nil
}
return "", errors.New("could not determine dev name from partition name")
}