Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. #include <sys/param.h>
  2. #include <sys/mount.h>
  3. #include <sys/statvfs.h>
  4.  
  5. SInt64 get_root_avail_capacity(void)
  6. {
  7. CFURLRef root = CFURLCreateWithFileSystemPath(NULL, CFSTR("/"), kCFURLPOSIXPathStyle, YES);
  8. CFErrorRef err = NULL;
  9. CFTypeRef ref;
  10. SInt64 val = -1;
  11. Boolean ok;
  12.  
  13. if (root == NULL) goto out_exit;
  14.  
  15. ok = CFURLCopyResourcePropertyForKey(root, kCFURLVolumeAvailableCapacityKey, &ref, &err);
  16. if (ok) {
  17. assert(CFGetTypeID(ref) == CFNumberGetTypeID());
  18. assert(CFNumberGetType(ref) == kCFNumberSInt64Type);
  19. ok = CFNumberGetValue((CFNumberRef) ref, kCFNumberSInt64Type, &val);
  20. assert(ok);
  21. CFRelease(ref);
  22. } else {
  23. assert(err != NULL);
  24. NSLog(@"[ERR] CFURLCopyResourcePropertyForKey() fail err: %@", err);
  25. CFRelease(err);
  26. }
  27.  
  28. CFRelease(root);
  29. out_exit:
  30. return val;
  31. }
  32.  
  33. int64_t get_root_avail_capacity2(void)
  34. {
  35. int64_t sz = -1;
  36. struct statvfs v;
  37.  
  38. (void) memset(&v, 0, sizeof(v));
  39.  
  40. if (statvfs("/", &v) != 0) {
  41. fprintf(stderr, "statvfs(3) fail errno: %d\n", errno);
  42. goto out_exit;
  43. } else if (v.f_bavail <= 0 || v.f_frsize <= 0) {
  44. goto out_exit;
  45. }
  46.  
  47. sz = v.f_bavail * v.f_frsize;
  48. out_exit:
  49. return sz;
  50. }
  51.  
  52. int64_t get_root_avail_capacity3(void)
  53. {
  54. int64_t sz = -1;
  55. struct statfs v;
  56.  
  57. (void) memset(&v, 0, sizeof(v));
  58.  
  59. if (statfs("/", &v) != 0) {
  60. fprintf(stderr, "statfs(2) fail errno: %d\n", errno);
  61. goto out_exit;
  62. } else if (v.f_bavail <= 0 || v.f_bsize <= 0) {
  63. goto out_exit;
  64. }
  65.  
  66. sz = v.f_bavail * v.f_bsize;
  67. out_exit:
  68. return sz;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement