1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#ifdef __WATCOMC__
#define __IBMC__ 0
#define __IBMCPP__ 0
#endif
#define INCL_DOS
#include <os2.h>
#include <ctype.h>
#include <limits.h>
extern void Log (int lev, char *s,...);
unsigned long getfree (char *path)
{
FSALLOCATE fsa;
ULONG disknum = 0;
APIRET rc;
if (isalpha (path[0]) && path[1] == ':')
disknum = toupper (path[0]) - 'A' + 1;
rc = DosQueryFSInfo (disknum, /* Drive number */
FSIL_ALLOC, /* Level 1 allocation info */
(PVOID) & fsa, /* Buffer */
sizeof (fsa)); /* Size of buffer */
if (rc)
{
Log (1, "DosQueryFSInfo error: return code = %u", rc);
return ULONG_MAX; /* Assume enough disk space */
}
else
{
if (fsa.cSectorUnit * fsa.cbSector >= 1024)
return fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector / 1024);
else
return fsa.cUnitAvail / (1024 / (fsa.cSectorUnit * fsa.cbSector));
}
}
|