From 87d608cdf479857cb03cd48a3188a6fcff64239e Mon Sep 17 00:00:00 2001 From: Ronald1985 Date: Mon, 10 Jul 2023 22:18:19 +0100 Subject: [PATCH] Finished functions for getting information regarding disk usage --- foreign.odin | 6 ++++-- sysinfo.odin | 37 +++++++++++++++++++++++++++++++++---- types.odin | 2 ++ 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/foreign.odin b/foreign.odin index 3f0d515..ad006de 100644 --- a/foreign.odin +++ b/foreign.odin @@ -1,5 +1,7 @@ package sysinfo -foreign { - statvfs :: proc(path: cstring, stat: ^Sys_statvfs) --- +import c "core:c/libc" + +@(default_calling_convention = "c") foreign { + statvfs :: proc(path: cstring, stat: ^Sys_statvfs) -> c.int --- } diff --git a/sysinfo.odin b/sysinfo.odin index f581e2d..0f3d3c2 100644 --- a/sysinfo.odin +++ b/sysinfo.odin @@ -242,14 +242,43 @@ get_cpu_usage_perc :: proc() -> (f64, bool) { return (100 * ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]))), true } -get_mountpoint_total_gb :: proc(mountpoint: string) { +get_mountpoint_total_gb :: proc(mountpoint: string) -> f64 { mountpoint_statvfs: Sys_statvfs - mountpoint_cstr := strings.clone_to_cstring(mountpoint) + mountpoint_cstr := strings.clone_to_cstring(mountpoint, context.temp_allocator) + + err := statvfs(mountpoint_cstr, &mountpoint_statvfs) + if err != 0 { + return 0 + } + + return (f64(mountpoint_statvfs.f_blocks) * f64(mountpoint_statvfs.f_bsize)) / 1073741824 +} + +get_mountpoint_available_gb :: proc(mountpoint: string) -> f64 { + mountpoint_statvfs: Sys_statvfs + + mountpoint_cstr := strings.clone_to_cstring(mountpoint, context.temp_allocator) + + statvfs(mountpoint_cstr, &mountpoint_statvfs) + + return (f64(mountpoint_statvfs.f_bfree) * f64(mountpoint_statvfs.f_bsize)) / 1073741824 +} + +get_mountpoint_used_gb :: proc(mountpoint: string) -> f64 { + mountpoint_statvfs: Sys_statvfs + + mountpoint_cstr := strings.clone_to_cstring(mountpoint, context.temp_allocator) statvfs(mountpoint_cstr, &mountpoint_statvfs) - total := (f64(mountpoint_statvfs.f_blocks) * f64(mountpoint_statvfs.f_bsize)) / 1073741824 + return (f64(mountpoint_statvfs.f_blocks) * f64(mountpoint_statvfs.f_bsize) - (f64(mountpoint_statvfs.f_bfree) * f64(mountpoint_statvfs.f_bsize))) / 1073741824 +} + +get_mountpoint_available_perc :: proc(mountpoint: string) -> f64 { + return (get_mountpoint_available_gb(mountpoint)/get_mountpoint_total_gb(mountpoint)) * 100 +} - fmt.println(total) +get_mountpoint_used_perc :: proc(mountpoint: string) -> f64 { + return (get_mountpoint_used_gb(mountpoint)/get_mountpoint_total_gb(mountpoint)) * 100 } diff --git a/types.odin b/types.odin index f15ddb6..98ed1a7 100644 --- a/types.odin +++ b/types.odin @@ -16,4 +16,6 @@ Sys_statvfs :: struct { f_fsid: c.ulong, f_flag: c.ulong, f_namemax: c.ulong, + + __f_spare: [6]c.int }