Add swap fstab entry support

This commit is contained in:
EnumDev 2025-03-15 09:23:01 +02:00
parent 74868ab2d3
commit b4847da839

View File

@ -1,10 +1,12 @@
package main
import (
"fmt"
"golang.org/x/sys/unix"
"os"
"slices"
"strings"
"unsafe"
)
var flagsEquivalence = map[string]uintptr{
@ -111,6 +113,8 @@ func mountFstabEntries() error {
return err
}
swapPriority := -2
for _, line := range strings.Split(string(bytes), "\n") {
line = strings.TrimSpace(line)
if strings.HasPrefix(line, "#") || line == "" {
@ -128,6 +132,18 @@ func mountFstabEntries() error {
continue
}
if fstype == "swap" {
b := append([]byte(source), 0)
const SwapFlagPrioShift = 0
const SwapFlagPrioMask = 0x7fff
_, _, err := unix.Syscall(unix.SYS_SWAPON, uintptr(unsafe.Pointer(&b[0])), uintptr((swapPriority<<SwapFlagPrioShift)&SwapFlagPrioMask), 0)
swapPriority--
if err != 0 {
return fmt.Errorf("swapon syscall returned none-zero error code: %d", err)
}
continue
}
if isMountpoint(target) && !slices.Contains(flags, unix.MS_REMOUNT) {
flags = append(flags, unix.MS_REMOUNT)
}