mirror of https://github.com/gohugoio/hugo
44 lines
994 B
Go
44 lines
994 B
Go
// Copyright 2021 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build unix
|
|
|
|
package testenv
|
|
|
|
import (
|
|
"errors"
|
|
"io/fs"
|
|
"syscall"
|
|
)
|
|
|
|
// Sigquit is the signal to send to kill a hanging subprocess.
|
|
// Send SIGQUIT to get a stack trace.
|
|
var Sigquit = syscall.SIGQUIT
|
|
|
|
func syscallIsNotSupported(err error) bool {
|
|
if err == nil {
|
|
return false
|
|
}
|
|
|
|
var errno syscall.Errno
|
|
if errors.As(err, &errno) {
|
|
switch errno {
|
|
case syscall.EPERM, syscall.EROFS:
|
|
// User lacks permission: either the call requires root permission and the
|
|
// user is not root, or the call is denied by a container security policy.
|
|
return true
|
|
case syscall.EINVAL:
|
|
// Some containers return EINVAL instead of EPERM if a system call is
|
|
// denied by security policy.
|
|
return true
|
|
}
|
|
}
|
|
|
|
if errors.Is(err, fs.ErrPermission) || errors.Is(err, errors.ErrUnsupported) {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|