AJA NTV2 SDK  17.5.0.1242
NTV2 SDK 17.5.0.1242
diskstatus.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
9 #include "ajabase/system/lock.h"
10 #include "ajabase/system/system.h"
11 
13 
14 #if defined(AJA_MAC)
15  #include <sys/mount.h>
16  #include <sys/stat.h>
17 #endif
18 
19 #if defined(AJA_WINDOWS)
20  #include <windows.h>
21 #endif
22 
23 #if defined(AJA_LINUX)
24  #include <sys/stat.h>
25  #include <sys/vfs.h>
26 #endif
27 
29 {
30 }
31 
32 
34 {
35 }
36 
37 bool
38 AJADiskStatus::GetFreeAndTotalSpace(const char* dirPath, double& freeSpace, double& totalSpace, AJADiskStatusUnitType unitType)
39 {
40 #if defined(AJA_MAC)
41  // Use these numbers to match the Mac Finder
42  const double b_size = 1;
43  const double kb_size = 1000;
44  const double mb_size = 1000000;
45  const double gb_size = 1000000000;
46 #else
47  const double b_size = 1;
48  const double kb_size = 1024;
49  const double mb_size = 1048576;
50  const double gb_size = 1073741824;
51 #endif
52 
53  double unitConv = 1;
54  switch(unitType)
55  {
56  case AJADiskStatusUnitTypeByte: unitConv = b_size; break;
57  case AJADiskStatusUnitTypeKiloByte: unitConv = kb_size; break;
58  case AJADiskStatusUnitTypeMegaByte: unitConv = mb_size; break;
59 
60  default:
61  case AJADiskStatusUnitTypeGigaByte: unitConv = gb_size; break;
62  }
63 
64 #if defined(AJA_WINDOWS)
65  static AJALock changingCurrentDirLock;
66  ULARGE_INTEGER free,total;
67  //because this changes the working directory temporarily
68  //use an auto lock to serialize access
69  {
70  AJAAutoLock al(&changingCurrentDirLock);
71 
72  //save current dir
73  char origDir[MAX_PATH];
74  DWORD dwRet;
75  dwRet = GetCurrentDirectoryA(MAX_PATH,origDir);
76 
77  //set target dir
78  bool bSetResult = SetCurrentDirectoryA(dirPath);
79 
80  //get size info
81  bool bGetSpaceResult = ::GetDiskFreeSpaceExA( 0 , &free , &total , NULL );
82 
83  //restore original dir
84  if (dwRet != 0)
85  {
86  bool bRet = SetCurrentDirectoryA(origDir);
87  }
88 
89  if ( !bGetSpaceResult )
90  {
91  return false;
92  }
93  }
94 
95  freeSpace = static_cast<double>( static_cast<__int64>(free.QuadPart) ) / unitConv;
96  totalSpace = static_cast<double>( static_cast<__int64>(total.QuadPart) ) / unitConv;
97 
98 #elif defined(AJABareMetal)
99  //TODO
100 #else
101 
102  struct stat stst;
103  struct statfs stfs;
104 
105  if ( ::stat(dirPath,&stst) == -1 ) return false;
106  if ( ::statfs(dirPath,&stfs) == -1 ) return false;
107 
108  freeSpace = stfs.f_bavail * ( stst.st_blksize / unitConv );
109  totalSpace = stfs.f_blocks * ( stst.st_blksize / unitConv );
110 
111 #endif
112 
113  return true;
114 }
AJADiskStatusUnitTypeKiloByte
@ AJADiskStatusUnitTypeKiloByte
Definition: diskstatus.h:16
MAX_PATH
#define MAX_PATH
Definition: ajatypes.h:329
AJADiskStatusUnitTypeByte
@ AJADiskStatusUnitTypeByte
Definition: diskstatus.h:15
AJADiskStatus::AJADiskStatus
AJADiskStatus()
Definition: diskstatus.cpp:28
NULL
#define NULL
Definition: ntv2caption608types.h:19
AJADiskStatusUnitTypeMegaByte
@ AJADiskStatusUnitTypeMegaByte
Definition: diskstatus.h:17
lock.h
Declares the AJALock class.
AJADiskStatus::GetFreeAndTotalSpace
static bool GetFreeAndTotalSpace(const char *dirPath, double &freeSpace, double &totalSpace, AJADiskStatusUnitType unitType=AJADiskStatusUnitTypeGigaByte)
Definition: diskstatus.cpp:38
AJADiskStatus::~AJADiskStatus
virtual ~AJADiskStatus()
Definition: diskstatus.cpp:33
AJALock
Definition: lock.h:30
AJAAutoLock
Definition: lock.h:91
system.h
System specific functions.
AJADiskStatusUnitTypeGigaByte
@ AJADiskStatusUnitTypeGigaByte
Definition: diskstatus.h:18
common.h
Private include file for all ajabase sources.
AJADiskStatusUnitType
AJADiskStatusUnitType
Definition: diskstatus.h:13
diskstatus.h
Declares the AJADiskStatus class.