mirror of
https://github.com/samuelncui/acp.git
synced 2026-03-27 21:45:01 +00:00
35 lines
702 B
Go
35 lines
702 B
Go
//go:build linux
|
|
// +build linux
|
|
|
|
package acp
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"syscall"
|
|
)
|
|
|
|
func truncate(file *os.File, size int64) error {
|
|
if err := syscall.Fallocate(int(file.Fd()), 0, 0, size); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func copyAttrs(name string, j *baseJob) error {
|
|
if err := os.Chmod(name, j.mode); err != nil {
|
|
return fmt.Errorf("chmod fail, %w", err)
|
|
}
|
|
if os.Geteuid() == 0 {
|
|
if stat, ok := j.sys.(*syscall.Stat_t); ok {
|
|
if err := os.Chown(name, int(stat.Uid), int(stat.Gid)); err != nil {
|
|
return fmt.Errorf("chown fail, %w", err)
|
|
}
|
|
}
|
|
}
|
|
if err := os.Chtimes(name, j.modTime, j.modTime); err != nil {
|
|
return fmt.Errorf("chtimes fail, %w", err)
|
|
}
|
|
return nil
|
|
}
|