mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-11 17:26:57 +02:00
- module github.com/R0m1k3/Loki, cmd/loki, internal/loki (package loki) - LOKI_HOME, LOKI_MODEL_DIRS, LOKI_SERVICE, LOKI_DL_CONNS ; /etc/loki ; units loki-engine / loki-ui ; binaire et aide CLI - updateRepo pointe sur R0m1k3/Loki (l'auto-update ne tirera plus les binaires AJEAN amont) Conservé à l'identique : le domaine ajean.link (service de tunnel amont), les littéraux de migration 0.7.x (migrate_07.go), RELEASE_NOTES.md et LICENSE (historique et licence de l'amont). go build/vet/test : verts.
33 lines
927 B
Go
33 lines
927 B
Go
package loki
|
|
|
|
// sys_disk_windows.go — espace libre d'un volume via GetDiskFreeSpaceExW. On
|
|
// veut l'espace réellement disponible pour l'utilisateur courant (quotas
|
|
// compris), donc le premier paramètre de sortie, pas le total du volume.
|
|
|
|
import (
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
var procGetDiskFreeSpaceExW = syscall.NewLazyDLL("kernel32.dll").NewProc("GetDiskFreeSpaceExW")
|
|
|
|
// diskFreeAt renvoie les octets libres du volume contenant dir, ou -1 si la
|
|
// mesure échoue. dir doit exister (l'appelant remonte les parents au besoin).
|
|
func diskFreeAt(dir string) int64 {
|
|
p, err := syscall.UTF16PtrFromString(dir)
|
|
if err != nil {
|
|
return -1
|
|
}
|
|
var free, total, totalFree uint64
|
|
r, _, _ := procGetDiskFreeSpaceExW.Call(
|
|
uintptr(unsafe.Pointer(p)),
|
|
uintptr(unsafe.Pointer(&free)),
|
|
uintptr(unsafe.Pointer(&total)),
|
|
uintptr(unsafe.Pointer(&totalFree)),
|
|
)
|
|
if r == 0 || free > 1<<62 {
|
|
return -1
|
|
}
|
|
return int64(free)
|
|
}
|