From f0c343ec24e08cda7ad16a4b5401e4c9d9920763 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Nov 2023 22:21:36 +0100 Subject: [PATCH] libobs: Use macOS specific APIs to report free disk space (cherry picked from commit 4a765d3bf028209ba8f13ec7ca93380c45d9511d) --- libobs/util/platform-cocoa.m | 25 +++++++++++++++++++++++++ libobs/util/platform-nix.c | 4 ++++ 2 files changed, 29 insertions(+) diff --git a/libobs/util/platform-cocoa.m b/libobs/util/platform-cocoa.m index ad4c0ed41..0e4725043 100644 --- a/libobs/util/platform-cocoa.m +++ b/libobs/util/platform-cocoa.m @@ -358,6 +358,31 @@ uint64_t os_get_sys_free_size(void) return vmstat.free_count * vm_page_size; } +int64_t os_get_free_space(const char *path) +{ + if (path) { + NSURL *fileURL = [NSURL fileURLWithPath:@(path)]; + + NSDictionary *values = [fileURL resourceValuesForKeys:@[NSURLVolumeAvailableCapacityForOpportunisticUsageKey] + error:nil]; + + NSNumber *availableSpace = values[NSURLVolumeAvailableCapacityForOpportunisticUsageKey]; + + if (availableSpace) { + return availableSpace.longValue; + } + } + + return 0; +} + +uint64_t os_get_free_disk_space(const char *dir) +{ + int64_t free_space = os_get_free_space(dir); + + return (uint64_t) free_space; +} + static uint64_t total_memory = 0; static bool total_memory_initialized = false; diff --git a/libobs/util/platform-nix.c b/libobs/util/platform-nix.c index 2fe19b9f5..99fc98a74 100644 --- a/libobs/util/platform-nix.c +++ b/libobs/util/platform-nix.c @@ -571,6 +571,7 @@ void os_closedir(os_dir_t *dir) } } +#ifndef __APPLE__ int64_t os_get_free_space(const char *path) { struct statvfs info; @@ -581,6 +582,7 @@ int64_t os_get_free_space(const char *path) return ret; } +#endif struct posix_glob_info { struct os_glob_info base; @@ -1136,6 +1138,7 @@ uint64_t os_get_sys_total_size(void) } #endif +#ifndef __APPLE__ uint64_t os_get_free_disk_space(const char *dir) { struct statvfs info; @@ -1144,6 +1147,7 @@ uint64_t os_get_free_disk_space(const char *dir) return (uint64_t)info.f_frsize * (uint64_t)info.f_bavail; } +#endif char *os_generate_uuid(void) {