github.com/hattya/nazuna@v0.7.1-0.20240331055452-55e14c275c1c/util_unix.go (about) 1 // 2 // nazuna :: util_unix.go 3 // 4 // Copyright (c) 2013-2023 Akinori Hattori <hattya@gmail.com> 5 // 6 // SPDX-License-Identifier: MIT 7 // 8 9 //go:build unix 10 11 package nazuna 12 13 import ( 14 "os" 15 "path/filepath" 16 ) 17 18 func IsLink(path string) bool { 19 fi, err := os.Lstat(path) 20 return err == nil && fi.Mode()&os.ModeSymlink != 0 21 } 22 23 func LinksTo(path, origin string) bool { 24 r, err := os.Readlink(path) 25 if err != nil { 26 return false 27 } 28 return filepath.Join(filepath.Dir(path), r) == origin 29 } 30 31 func CreateLink(src, dst string) error { 32 rel, err := filepath.Rel(filepath.Dir(dst), src) 33 if err != nil { 34 rel = src 35 } 36 return os.Symlink(rel, dst) 37 } 38 39 func Unlink(path string) error { 40 if !IsLink(path) { 41 return &os.PathError{ 42 Op: "unlink", 43 Path: path, 44 Err: ErrNotLink, 45 } 46 } 47 return os.Remove(path) 48 }