Add missing definitions for Borland C++ 2.0.

This commit is contained in:
2021-04-06 04:15:42 +01:00
parent cee72b5a84
commit e743059ad2
2 changed files with 48 additions and 3 deletions

View File

@@ -27,10 +27,13 @@ Copyright (C) 2011-2021 Natalia Portillo
#if defined(__WATCOM__)
#include <direct.h>
#define __dos_mkdir(a) mkdir(a)
#define __dos_mkdir(path) mkdir(path)
#elif defined(__DJGPP__)
#include <sys/stat.h>
#define __dos_mkdir(path) mkdir(path, 0)
#elif defined(__TURBOC__)
#include <dir.h>
#define __dos_mkdir(path) mkdir(path)
#endif
#if defined(__WATCOM__)
@@ -69,6 +72,30 @@ unsigned int _dos_getdiskfree_ex(unsigned int drive, struct diskfree_ex_t* disks
#define MINUTE(t) ((t & 0x07E0) >> 5)
#define SECOND(t) ((t & 0x001F) << 1)
#ifndef ENOMEM
#define ENOMEN 12
#endif
#ifndef ENOSYS
#define ENOSYS 38
#endif
#ifndef EINVAL
#define EINVAL 22
#endif
// Seems these were defined starting in Borland C++ 3.0
#if defined(__BORLANDC__) && __BORLANDC__ <= 0x200
#include <io.h>
#define _dos_setfileattr(path, attrib) _chmod(path, 1, attrib)
#define _dos_close(handle) _close(handle)
#define _dos_setdrive(drivep, ndrives) setdisk(drivep)
unsigned _dos_write(int handle, void far* buf, unsigned len, unsigned* nwritten);
unsigned _dos_creat(const char* path, int attrib, int* handlep);
unsigned _dos_creatnew(const char* path, int attrib, int* handlep);
#endif
#endif

View File

@@ -34,12 +34,20 @@ Copyright (C) 2011-2021 Natalia Portillo
void GetVolumeInfo(const char* path, size_t* clusterSize)
{
char driveNo = path[0] - '@';
struct diskfree_t oldFreeSpace;
char driveNo = path[0] - '@';
#ifdef __TURBOC__
struct dfree oldFreeSpace;
#else
struct diskfree_t oldFreeSpace;
#endif
struct diskfree_ex_t freeSpace;
unsigned int rc;
#ifdef __TURBOC__
memset(&oldFreeSpace, 0, sizeof(struct dfree));
#else
memset(&oldFreeSpace, 0, sizeof(struct diskfree_t));
#endif
memset(&freeSpace, 0, sizeof(struct diskfree_ex_t));
if(driveNo > 32) driveNo -= 32;
@@ -50,11 +58,21 @@ void GetVolumeInfo(const char* path, size_t* clusterSize)
{
if(errno == ENOSYS)
{
#ifdef __TURBOC__
getdfree(driveNo, &oldFreeSpace);
freeSpace.sectorsPerCluster = oldFreeSpace.df_sclus;
freeSpace.freeClusters = oldFreeSpace.df_avail;
freeSpace.bytesPerSector = oldFreeSpace.df_bsec;
freeSpace.totalClusters = oldFreeSpace.df_total;
rc = oldFreeSpace.df_sclus == 0xFFFF;
#else
rc = _dos_getdiskfree(driveNo, &oldFreeSpace);
freeSpace.sectorsPerCluster = oldFreeSpace.sectors_per_cluster;
freeSpace.freeClusters = oldFreeSpace.avail_clusters;
freeSpace.bytesPerSector = oldFreeSpace.bytes_per_sector;
freeSpace.totalClusters = oldFreeSpace.total_clusters;
#endif
}
else
{