Files
SamWaf/wafupdate/binreplace_other.go
2026-07-28 16:42:34 +08:00

51 lines
1.2 KiB
Go

//go:build !windows
// +build !windows
package wafupdate
import (
"errors"
"fmt"
"os"
"syscall"
)
// 非 Windows 平台不需要属性清理:POSIX 下 unlink 只摘目录项,
// rename(2) 对已存在目标是原子替换,都不会因"文件在用"而失败。
func clearFileAttrs(path string) error { return nil }
// markDeleteOnReboot 是 Windows 专有能力(PendingFileRenameOperations)。
// 其他平台用不到——旧二进制在这里本来就能立刻删掉。
func markDeleteOnReboot(path string) error {
return errors.New("当前平台不支持重启时删除")
}
// isTransientFileError 判断是否为"重试有意义"的瞬时错误。
func isTransientFileError(err error) bool {
var errno syscall.Errno
if !errors.As(err, &errno) {
return false
}
switch errno {
case syscall.EBUSY, syscall.ETXTBSY, syscall.EAGAIN, syscall.EINTR:
return true
}
return false
}
func errnoName(err error) string {
var errno syscall.Errno
if !errors.As(err, &errno) {
return "errno=?"
}
return fmt.Sprintf("errno=%d(%s)", int(errno), errno.Error())
}
func platformFileDiag(path string) string {
fi, err := os.Lstat(path)
if err != nil {
return "不存在"
}
return fmt.Sprintf("存在/mode=%s/size=%d", fi.Mode().String(), fi.Size())
}