Patched to compile...works a little.
This commit is contained in:
parent
df5ef85087
commit
a83a9c81c6
|
@ -17,13 +17,23 @@
|
||||||
#define INCL_DOSFILEMGR
|
#define INCL_DOSFILEMGR
|
||||||
#define INCL_DOSMODULEMGR
|
#define INCL_DOSMODULEMGR
|
||||||
#define INCL_DOSERRORS
|
#define INCL_DOSERRORS
|
||||||
|
#define INCL_DOSPROCESS
|
||||||
#define INCL_DOSDEVICES
|
#define INCL_DOSDEVICES
|
||||||
|
#define INCL_DOSDEVIOCTL
|
||||||
|
#define INCL_DOSMISC
|
||||||
#include <os2.h>
|
#include <os2.h>
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#define __PHYSICSFS_INTERNAL__
|
||||||
|
#include "physfs_internal.h"
|
||||||
|
|
||||||
|
const char *__PHYSFS_platformDirSeparator = "\\";
|
||||||
|
|
||||||
|
|
||||||
static APIRET os2err(APIRET retval)
|
static APIRET os2err(APIRET retval)
|
||||||
|
@ -62,10 +72,6 @@ static APIRET os2err(APIRET retval)
|
||||||
err = "Not a DOS disk";
|
err = "Not a DOS disk";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ERROR_DRIVE_LOCKED:
|
|
||||||
err = "Drive is locked";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ERROR_SHARING_VIOLATION:
|
case ERROR_SHARING_VIOLATION:
|
||||||
err = "Sharing violation";
|
err = "Sharing violation";
|
||||||
break;
|
break;
|
||||||
|
@ -78,10 +84,6 @@ static APIRET os2err(APIRET retval)
|
||||||
err = "Device already in use";
|
err = "Device already in use";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ERROR_DRIVE_LOCKED:
|
|
||||||
err = "Drive is locked";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ERROR_OPEN_FAILED:
|
case ERROR_OPEN_FAILED:
|
||||||
err = "Open failed";
|
err = "Open failed";
|
||||||
break;
|
break;
|
||||||
|
@ -90,7 +92,7 @@ static APIRET os2err(APIRET retval)
|
||||||
err = "Disk is full";
|
err = "Disk is full";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ERROR_DISK_FULL:
|
case ERROR_PIPE_BUSY:
|
||||||
err = "Pipe busy";
|
err = "Pipe busy";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -104,7 +106,7 @@ static APIRET os2err(APIRET retval)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ERROR_TOO_MANY_HANDLES:
|
case ERROR_TOO_MANY_HANDLES:
|
||||||
case ERROR_TOO_OPEN_FILES:
|
case ERROR_TOO_MANY_OPEN_FILES:
|
||||||
case ERROR_NO_MORE_SEARCH_HANDLES:
|
case ERROR_NO_MORE_SEARCH_HANDLES:
|
||||||
err = "Too many open handles";
|
err = "Too many open handles";
|
||||||
break;
|
break;
|
||||||
|
@ -192,10 +194,6 @@ static APIRET os2err(APIRET retval)
|
||||||
err = "OS/2 reported an inconsistent Extended Attribute list";
|
err = "OS/2 reported an inconsistent Extended Attribute list";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ERROR_EA_VALUE_UNSUPPORTABLE:
|
|
||||||
err = "OS/2 reported an unsupportable Extended Attribute value";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ERROR_SEM_OWNER_DIED:
|
case ERROR_SEM_OWNER_DIED:
|
||||||
err = "OS/2 reported that semaphore owner died";
|
err = "OS/2 reported that semaphore owner died";
|
||||||
break;
|
break;
|
||||||
|
@ -230,18 +228,18 @@ int __PHYSFS_platformInit(void)
|
||||||
{
|
{
|
||||||
char buf[CCHMAXPATH];
|
char buf[CCHMAXPATH];
|
||||||
APIRET rc;
|
APIRET rc;
|
||||||
TIB tib;
|
PTIB ptib;
|
||||||
PIB pib;
|
PPIB ppib;
|
||||||
|
|
||||||
assert(baseDir == NULL);
|
assert(baseDir == NULL);
|
||||||
|
|
||||||
BAIL_IF_MACRO(os2err(DosGetInfoBlocks(&tib, &pib)) != NO_ERROR, NULL, 0);
|
BAIL_IF_MACRO(os2err(DosGetInfoBlocks(&ptib, &ppib)) != NO_ERROR, NULL, 0);
|
||||||
rc = DosQueryModuleName(pib.pib_hmte, sizeof (buf), (PCHAR) buf);
|
rc = DosQueryModuleName(ppib->pib_hmte, sizeof (buf), (PCHAR) buf);
|
||||||
BAIL_IF_MACRO(os2err(rc) != NO_ERROR, NULL, 0);
|
BAIL_IF_MACRO(os2err(rc) != NO_ERROR, NULL, 0);
|
||||||
|
|
||||||
baseDir = (char *) malloc(strlen(buf) + 1);
|
baseDir = (char *) malloc(strlen(buf) + 1);
|
||||||
BAIL_IF_MACRO(baseDir == NULL, ERR_OUT_OF_MEMORY, 0);
|
BAIL_IF_MACRO(baseDir == NULL, ERR_OUT_OF_MEMORY, 0);
|
||||||
strcpy(baseDir);
|
strcpy(baseDir, buf);
|
||||||
|
|
||||||
return(1); /* success. */
|
return(1); /* success. */
|
||||||
} /* __PHYSFS_platformInit */
|
} /* __PHYSFS_platformInit */
|
||||||
|
@ -277,13 +275,13 @@ static int is_cdrom_drive(ULONG drive)
|
||||||
rc = DosDevIOCtl((HFILE) -1, IOCTL_DISK,
|
rc = DosDevIOCtl((HFILE) -1, IOCTL_DISK,
|
||||||
DSK_GETDEVICEPARAMS,
|
DSK_GETDEVICEPARAMS,
|
||||||
&cmd, sizeof (cmd), &ul1,
|
&cmd, sizeof (cmd), &ul1,
|
||||||
&bpb, sizeof (bpb), &u2);
|
&bpb, sizeof (bpb), &ul2);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* !!! FIXME: Note that this tells us that the media is REMOVABLE...
|
* !!! FIXME: Note that this tells us that the media is REMOVABLE...
|
||||||
* !!! FIXME: but it might not be a CD-ROM...check driver name?
|
* !!! FIXME: but it might not be a CD-ROM...check driver name?
|
||||||
*/
|
*/
|
||||||
return((rc == NO_ERROR) && ((DiskData.fsDeviceAttr & 0x0001) == 0));
|
return((rc == NO_ERROR) && ((bpb.fsDeviceAttr & 0x0001) == 0));
|
||||||
} /* is_cdrom_drive */
|
} /* is_cdrom_drive */
|
||||||
|
|
||||||
|
|
||||||
|
@ -304,7 +302,7 @@ char **__PHYSFS_platformDetectAvailableCDs(void)
|
||||||
BAIL_IF_MACRO(os2err(rc) != NO_ERROR, NULL, retval);
|
BAIL_IF_MACRO(os2err(rc) != NO_ERROR, NULL, retval);
|
||||||
|
|
||||||
/* !!! FIXME: the a, b, and c drives are almost certainly NOT cdroms... */
|
/* !!! FIXME: the a, b, and c drives are almost certainly NOT cdroms... */
|
||||||
for (i = 0, bit = 1; i < 26; i++, bit << 1)
|
for (i = 0, bit = 1; i < 26; i++, bit <<= 1)
|
||||||
{
|
{
|
||||||
if (drivemap & bit) /* this logical drive exists. */
|
if (drivemap & bit) /* this logical drive exists. */
|
||||||
{
|
{
|
||||||
|
@ -431,19 +429,19 @@ LinkedStringList *__PHYSFS_platformEnumerateFiles(const char *dirname,
|
||||||
{
|
{
|
||||||
char spec[CCHMAXPATH];
|
char spec[CCHMAXPATH];
|
||||||
LinkedStringList *retval = NULL, *p = NULL;
|
LinkedStringList *retval = NULL, *p = NULL;
|
||||||
FINDFILEBUF3 fb;
|
FILEFINDBUF3 fb;
|
||||||
HDIR hdir = HDIR_CREATE;
|
HDIR hdir = HDIR_CREATE;
|
||||||
ULONG count = 1;
|
ULONG count = 1;
|
||||||
APIRET rc;
|
APIRET rc;
|
||||||
|
|
||||||
BAIL_IF_MACRO(strlen(dirname) > sizeof (spec) - 4, ERR_OS_ERROR, NULL);
|
BAIL_IF_MACRO(strlen(dirname) > sizeof (spec) - 4, ERR_OS_ERROR, NULL);
|
||||||
strcpy(spec, dname)
|
strcpy(spec, dirname);
|
||||||
strcat(spec, "*.*");
|
strcat(spec, "*.*");
|
||||||
|
|
||||||
rc = DosFindFirst(spec, &hdir,
|
rc = DosFindFirst(spec, &hdir,
|
||||||
FILE_DIRECTORY | FILE_ARCHIVED |
|
FILE_DIRECTORY | FILE_ARCHIVED |
|
||||||
FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM,
|
FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM,
|
||||||
&fb, sizeof (fb), &count, FIL_STANDARD)
|
&fb, sizeof (fb), &count, FIL_STANDARD);
|
||||||
BAIL_IF_MACRO(os2err(rc) != NO_ERROR, NULL, 0);
|
BAIL_IF_MACRO(os2err(rc) != NO_ERROR, NULL, 0);
|
||||||
while (count == 1)
|
while (count == 1)
|
||||||
{
|
{
|
||||||
|
@ -500,7 +498,7 @@ char *__PHYSFS_platformRealPath(const char *path)
|
||||||
{
|
{
|
||||||
char buf[CCHMAXPATH];
|
char buf[CCHMAXPATH];
|
||||||
char *retval;
|
char *retval;
|
||||||
APIRET rc = DosQueryPathInfo(fname, FIL_QUERYFULLNAME, buf, sizeof (buf));
|
APIRET rc = DosQueryPathInfo(path, FIL_QUERYFULLNAME, buf, sizeof (buf));
|
||||||
BAIL_IF_MACRO(os2err(rc) != NO_ERROR, NULL, NULL);
|
BAIL_IF_MACRO(os2err(rc) != NO_ERROR, NULL, NULL);
|
||||||
retval = (char *) malloc(strlen(buf) + 1);
|
retval = (char *) malloc(strlen(buf) + 1);
|
||||||
BAIL_IF_MACRO(retval == NULL, ERR_OUT_OF_MEMORY, NULL);
|
BAIL_IF_MACRO(retval == NULL, ERR_OUT_OF_MEMORY, NULL);
|
||||||
|
@ -527,7 +525,7 @@ void *__PHYSFS_platformOpenRead(const char *filename)
|
||||||
os2err(DosOpen(filename, &hfile, &actionTaken, 0, FILE_NORMAL,
|
os2err(DosOpen(filename, &hfile, &actionTaken, 0, FILE_NORMAL,
|
||||||
OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW,
|
OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW,
|
||||||
OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_LOCALITY |
|
OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_LOCALITY |
|
||||||
OPEN_FLAGS_NO_INHERIT | OPEN_SHARE_DENYWRITE |
|
OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYWRITE |
|
||||||
OPEN_ACCESS_READONLY, NULL));
|
OPEN_ACCESS_READONLY, NULL));
|
||||||
|
|
||||||
return((void *) hfile);
|
return((void *) hfile);
|
||||||
|
@ -546,7 +544,7 @@ void *__PHYSFS_platformOpenWrite(const char *filename)
|
||||||
os2err(DosOpen(filename, &hfile, &actionTaken, 0, FILE_NORMAL,
|
os2err(DosOpen(filename, &hfile, &actionTaken, 0, FILE_NORMAL,
|
||||||
OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW,
|
OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW,
|
||||||
OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_LOCALITY |
|
OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_LOCALITY |
|
||||||
OPEN_FLAGS_NO_INHERIT | OPEN_SHARE_DENYWRITE |
|
OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYWRITE |
|
||||||
OPEN_ACCESS_READWRITE, NULL));
|
OPEN_ACCESS_READWRITE, NULL));
|
||||||
|
|
||||||
return((void *) hfile);
|
return((void *) hfile);
|
||||||
|
@ -557,6 +555,7 @@ void *__PHYSFS_platformOpenAppend(const char *filename)
|
||||||
{
|
{
|
||||||
ULONG dummy = 0;
|
ULONG dummy = 0;
|
||||||
HFILE hfile = NULLHANDLE;
|
HFILE hfile = NULLHANDLE;
|
||||||
|
APIRET rc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* File must be opened SHARE_DENYWRITE and ACCESS_READWRITE, otherwise
|
* File must be opened SHARE_DENYWRITE and ACCESS_READWRITE, otherwise
|
||||||
|
@ -565,7 +564,7 @@ void *__PHYSFS_platformOpenAppend(const char *filename)
|
||||||
rc = os2err(DosOpen(filename, &hfile, &dummy, 0, FILE_NORMAL,
|
rc = os2err(DosOpen(filename, &hfile, &dummy, 0, FILE_NORMAL,
|
||||||
OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW,
|
OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW,
|
||||||
OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_LOCALITY |
|
OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_LOCALITY |
|
||||||
OPEN_FLAGS_NO_INHERIT | OPEN_SHARE_DENYWRITE |
|
OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYWRITE |
|
||||||
OPEN_ACCESS_READWRITE, NULL));
|
OPEN_ACCESS_READWRITE, NULL));
|
||||||
|
|
||||||
if (rc == NO_ERROR)
|
if (rc == NO_ERROR)
|
||||||
|
@ -590,14 +589,14 @@ PHYSFS_sint64 __PHYSFS_platformRead(void *opaque, void *buffer,
|
||||||
|
|
||||||
for (retval = 0; retval < count; retval++)
|
for (retval = 0; retval < count; retval++)
|
||||||
{
|
{
|
||||||
APIRET rc = os2err(DosRead(hfile, buffer, size, &br));
|
os2err(DosRead(hfile, buffer, size, &br));
|
||||||
if (br < size)
|
if (br < size)
|
||||||
{
|
{
|
||||||
DosSetFilePtr(hfile, -bw, FILE_CURRENT, &br); /* try to cleanup. */
|
DosSetFilePtr(hfile, -br, FILE_CURRENT, &br); /* try to cleanup. */
|
||||||
return(retval);
|
return(retval);
|
||||||
} /* if */
|
} /* if */
|
||||||
|
|
||||||
buffer = (void *) ( ((char *) buffer) + size) );
|
buffer = (void *) ( ((char *) buffer) + size );
|
||||||
} /* for */
|
} /* for */
|
||||||
|
|
||||||
return(retval);
|
return(retval);
|
||||||
|
@ -613,14 +612,14 @@ PHYSFS_sint64 __PHYSFS_platformWrite(void *opaque, const void *buffer,
|
||||||
|
|
||||||
for (retval = 0; retval < count; retval++)
|
for (retval = 0; retval < count; retval++)
|
||||||
{
|
{
|
||||||
APIRET rc = os2err(DosWrite(hfile, buffer, size, &bw));
|
os2err(DosWrite(hfile, buffer, size, &bw));
|
||||||
if (bw < size)
|
if (bw < size)
|
||||||
{
|
{
|
||||||
DosSetFilePtr(hfile, -bw, FILE_CURRENT, &bw); /* try to cleanup. */
|
DosSetFilePtr(hfile, -bw, FILE_CURRENT, &bw); /* try to cleanup. */
|
||||||
return(retval);
|
return(retval);
|
||||||
} /* if */
|
} /* if */
|
||||||
|
|
||||||
buffer = (void *) ( ((char *) buffer) + size) );
|
buffer = (void *) ( ((char *) buffer) + size );
|
||||||
} /* for */
|
} /* for */
|
||||||
|
|
||||||
return(retval);
|
return(retval);
|
||||||
|
@ -675,7 +674,7 @@ int __PHYSFS_platformEOF(void *opaque)
|
||||||
|
|
||||||
int __PHYSFS_platformFlush(void *opaque)
|
int __PHYSFS_platformFlush(void *opaque)
|
||||||
{
|
{
|
||||||
return(os2err(DosResetBuffers((HFILE) opaque) == NO_ERROR));
|
return(os2err(DosResetBuffer((HFILE) opaque) == NO_ERROR));
|
||||||
} /* __PHYSFS_platformFlush */
|
} /* __PHYSFS_platformFlush */
|
||||||
|
|
||||||
|
|
||||||
|
@ -696,6 +695,7 @@ int __PHYSFS_platformDelete(const char *path)
|
||||||
|
|
||||||
PHYSFS_sint64 __PHYSFS_platformGetLastModTime(const char *fname)
|
PHYSFS_sint64 __PHYSFS_platformGetLastModTime(const char *fname)
|
||||||
{
|
{
|
||||||
|
PHYSFS_sint64 retval;
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
FILESTATUS3 fs;
|
FILESTATUS3 fs;
|
||||||
APIRET rc = DosQueryPathInfo(fname, FIL_STANDARD, &fs, sizeof (fs));
|
APIRET rc = DosQueryPathInfo(fname, FIL_STANDARD, &fs, sizeof (fs));
|
||||||
|
@ -728,15 +728,15 @@ void __PHYSFS_platformTimeslice(void)
|
||||||
|
|
||||||
PHYSFS_uint64 __PHYSFS_platformGetThreadID(void)
|
PHYSFS_uint64 __PHYSFS_platformGetThreadID(void)
|
||||||
{
|
{
|
||||||
TIB tib;
|
PTIB ptib;
|
||||||
PIB pib;
|
PPIB ppib;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allegedly, this API never fails, but we'll punt and return a
|
* Allegedly, this API never fails, but we'll punt and return a
|
||||||
* default value (zero might as well do) if it does.
|
* default value (zero might as well do) if it does.
|
||||||
*/
|
*/
|
||||||
BAIL_IF_MACRO(os2err(DosGetInfoBlocks(&tib, &pib)) != NO_ERROR, 0, 0);
|
BAIL_IF_MACRO(os2err(DosGetInfoBlocks(&ptib, &ppib)) != NO_ERROR, 0, 0);
|
||||||
return((PHYSFS_uint64) tib.tib_ordinal);
|
return((PHYSFS_uint64) ptib->tib_ordinal);
|
||||||
} /* __PHYSFS_platformGetThreadID */
|
} /* __PHYSFS_platformGetThreadID */
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue