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  }