mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-03-05 18:10:27 +01:00
32 lines
818 B
Go
32 lines
818 B
Go
|
package lnutils
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
// CreateDir creates a directory if it doesn't exist and also handles
|
||
|
// symlink-related errors with user-friendly messages. It creates all necessary
|
||
|
// parent directories with the specified permissions.
|
||
|
func CreateDir(dir string, perm os.FileMode) error {
|
||
|
err := os.MkdirAll(dir, perm)
|
||
|
if err == nil {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Show a nicer error message if it's because a symlink
|
||
|
// is linked to a directory that does not exist
|
||
|
// (probably because it's not mounted).
|
||
|
var pathErr *os.PathError
|
||
|
if errors.As(err, &pathErr) && os.IsExist(err) {
|
||
|
link, lerr := os.Readlink(pathErr.Path)
|
||
|
if lerr == nil {
|
||
|
return fmt.Errorf("is symlink %s -> %s "+
|
||
|
"mounted?", pathErr.Path, link)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return fmt.Errorf("failed to create directory '%s': %w", dir, err)
|
||
|
}
|