Skip to content

Instantly share code, notes, and snippets.

@doylecnn
Last active August 29, 2015 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save doylecnn/6220a3cde39e286a64e4 to your computer and use it in GitHub Desktop.
Save doylecnn/6220a3cde39e286a64e4 to your computer and use it in GitHub Desktop.
// http://play.golang.org/p/cvSYnYce0I
package main
import "fmt"
import "os"
func main() {
perm, err := PermFromString("0777")
if err != nil {
panic(err)
}
fmt.Println(perm & os.ModeType)
fmt.Println(perm & os.ModePerm)
perm, err = formatToOSFileMode("0777")
fmt.Println(perm & os.ModeType)
fmt.Println(perm & os.ModePerm)
}
func formatToOSFileMode(testString string) (perm os.FileMode, err error) {
var r int64
r, err = strconv.ParseInt(testString, 8, 32)
if err == nil {
perm = os.FileMode(r)
}
return
}
func PermFromString(perm_str string) (perm os.FileMode, err error) {
err = nil
if len(perm_str) != 4 {
err = fmt.Errorf("too long")
}
perm = perm | (os.ModeType & (os.FileMode(perm_str[0] - 48)))
for i, c := range perm_str[1:] {
if c < 48 || c > 55 {
err = fmt.Errorf("out of range")
}
//fmt.Println(c-48)
if i == 0 {
perm = os.ModePerm & (os.FileMode(c - 48))
}
perm = (perm << uint32(i+1)) | (os.ModePerm & (os.FileMode(c - 48)))
}
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment