gt/internal/filemode/filemode.go

29 lines
549 B
Go
Raw Normal View History

// Package filemode does things io/fs doesn't do
package filemode
import (
"io/fs"
"strconv"
)
// Parse parses a string of 3 or 4 numbers as a *NIX filesystem permission.
//
// "0777" or "777" -> fs.FileMode(0777)
//
// "0644" or "644" -> fs.FileMode(0644)
func Parse(input string) (fs.FileMode, error) {
const simplemodelen = 3
if input == "" {
return fs.FileMode(0), nil
}
if len(input) == simplemodelen {
input = "0" + input
}
md, e := strconv.ParseUint(input, 8, 64)
if e != nil {
return 0, e
}
return fs.FileMode(md), nil
}