Natural language #defines and build system support.
This commit is contained in:
parent
2086e0ed9c
commit
42be0046aa
|
@ -49,7 +49,7 @@ static void DIR_dirClose(DirHandle *h);
|
|||
const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_DIR =
|
||||
{
|
||||
"",
|
||||
"non-archive directory I/O",
|
||||
DIR_ARCHIVE_DESCRIPTION,
|
||||
"Ryan C. Gordon <icculus@clutteredmind.org>",
|
||||
"http://icculus.org/physfs/",
|
||||
};
|
||||
|
|
|
@ -93,7 +93,7 @@ static FileHandle *GRP_openRead(DirHandle *h, const char *name);
|
|||
const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_GRP =
|
||||
{
|
||||
"GRP",
|
||||
"Build engine Groupfile format",
|
||||
GRP_ARCHIVE_DESCRIPTION,
|
||||
"Ryan C. Gordon <icculus@clutteredmind.org>",
|
||||
"http://icculus.org/physfs/",
|
||||
};
|
||||
|
|
|
@ -147,7 +147,7 @@ static int zip_resolve(void *in, ZIPinfo *info, ZIPentry *entry);
|
|||
const PHYSFS_ArchiveInfo __PHYSFS_ArchiveInfo_ZIP =
|
||||
{
|
||||
"ZIP",
|
||||
"PkZip/WinZip/Info-Zip compatible",
|
||||
ZIP_ARCHIVE_DESCRIPTION,
|
||||
"Ryan C. Gordon <icculus@clutteredmind.org>",
|
||||
"http://icculus.org/physfs/",
|
||||
};
|
||||
|
@ -183,46 +183,33 @@ const DirFunctions __PHYSFS_DirFunctions_ZIP =
|
|||
};
|
||||
|
||||
|
||||
static const char *zlib_error_string(int rc)
|
||||
{
|
||||
switch (rc)
|
||||
{
|
||||
case Z_OK: return(NULL); /* not an error. */
|
||||
case Z_STREAM_END: return(NULL); /* not an error. */
|
||||
case Z_ERRNO: return(strerror(errno));
|
||||
case Z_NEED_DICT: return(ERR_ZLIB_NEED_DICT);
|
||||
case Z_DATA_ERROR: return(ERR_ZLIB_DATA_ERROR);
|
||||
case Z_MEM_ERROR: return(ERR_ZLIB_MEMORY_ERROR);
|
||||
case Z_BUF_ERROR: return(ERR_ZLIB_BUFFER_ERROR);
|
||||
case Z_VERSION_ERROR: return(ERR_ZLIB_VERSION_ERROR);
|
||||
default: return(ERR_ZLIB_UNKNOWN_ERROR);
|
||||
} /* switch */
|
||||
|
||||
return(NULL);
|
||||
} /* zlib_error_string */
|
||||
|
||||
|
||||
/*
|
||||
* Wrap all zlib calls in this, so the physfs error state is set appropriately.
|
||||
*/
|
||||
static int zlib_err(int rc)
|
||||
{
|
||||
const char *err = NULL;
|
||||
|
||||
switch (rc)
|
||||
{
|
||||
case Z_OK:
|
||||
case Z_STREAM_END:
|
||||
break; /* not errors. */
|
||||
|
||||
case Z_ERRNO:
|
||||
err = strerror(errno);
|
||||
break;
|
||||
|
||||
case Z_NEED_DICT:
|
||||
err = "zlib: need dictionary";
|
||||
break;
|
||||
case Z_DATA_ERROR:
|
||||
err = "zlib: need dictionary";
|
||||
break;
|
||||
case Z_MEM_ERROR:
|
||||
err = "zlib: memory error";
|
||||
break;
|
||||
case Z_BUF_ERROR:
|
||||
err = "zlib: buffer error";
|
||||
break;
|
||||
case Z_VERSION_ERROR:
|
||||
err = "zlib: version error";
|
||||
break;
|
||||
default:
|
||||
err = "unknown zlib error";
|
||||
break;
|
||||
} /* switch */
|
||||
|
||||
if (err != NULL)
|
||||
__PHYSFS_setError(err);
|
||||
|
||||
const char *str = zlib_error_string(rc);
|
||||
if (str != NULL)
|
||||
__PHYSFS_setError(str);
|
||||
return(rc);
|
||||
} /* zlib_err */
|
||||
|
||||
|
|
29
configure.in
29
configure.in
|
@ -229,9 +229,36 @@ if test x$enable_cdrom = xyes; then
|
|||
fi
|
||||
fi
|
||||
|
||||
dnl determine language.
|
||||
physfslang=english
|
||||
AC_ARG_ENABLE(language,
|
||||
[ --enable-language=lang English, currently. [default=english]],
|
||||
physfslang=`echo $enable_language |tr A-Z a-z`)
|
||||
|
||||
AC_MSG_CHECKING([if language choice is supported])
|
||||
physfs_valid_lang=no
|
||||
if test x$physfslang = xenglish; then
|
||||
physfs_valid_lang=yes
|
||||
AC_DEFINE([PHYSFS_LANG], PHYSFS_LANG_ENGLISH, [define desired natural language])
|
||||
fi
|
||||
|
||||
dnl Add other language checks here...
|
||||
|
||||
AC_MSG_RESULT([$physfs_valid_lang])
|
||||
if test x$physfs_valid_lang = xno; then
|
||||
AC_MSG_WARN([***])
|
||||
AC_MSG_WARN([*** You've asked for "$physfslang" language support...])
|
||||
AC_MSG_WARN([*** ...but we don't support that.])
|
||||
AC_MSG_WARN([*** You could choose another language,])
|
||||
AC_MSG_WARN([*** but is this what you REALLY wanted?])
|
||||
AC_MSG_WARN([*** Please see the LANG section of physfs_internal.h])
|
||||
AC_MSG_WARN([*** for info on writing a translation.])
|
||||
AC_MSG_WARN([***])
|
||||
AC_MSG_ERROR([*** unsupported language. stop.])
|
||||
fi
|
||||
|
||||
have_non_posix_threads=no
|
||||
|
||||
dnl AC_CHECK_HEADER(be/kernel/OS.h, this_is_beos=yes)
|
||||
AC_MSG_CHECKING([if this is BeOS])
|
||||
if test x$build_os = xbeos; then
|
||||
this_is_beos=yes
|
||||
|
|
2
physfs.c
2
physfs.c
|
@ -824,7 +824,7 @@ int PHYSFS_setSaneConfig(const char *organization, const char *appName,
|
|||
/* Root out archives, and add them to search path... */
|
||||
if (archiveExt != NULL)
|
||||
{
|
||||
char **rc = PHYSFS_enumerateFiles("");
|
||||
char **rc = PHYSFS_enumerateFiles("/");
|
||||
char **i;
|
||||
size_t extlen = strlen(archiveExt);
|
||||
char *ext;
|
||||
|
|
|
@ -20,6 +20,117 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/* The LANG section. */
|
||||
/* please send questions/translations to Ryan: icculus@clutteredmind.org. */
|
||||
|
||||
#if (!defined PHYSFS_LANG)
|
||||
# define PHYSFS_LANG PHYSFS_LANG_ENGLISH
|
||||
#endif
|
||||
|
||||
#define PHYSFS_LANG_ENGLISH 1 /* English text by Ryan C. Gordon */
|
||||
|
||||
|
||||
#if (PHYSFS_LANG == PHYSFS_LANG_ENGLISH)
|
||||
#define DIR_ARCHIVE_DESCRIPTION "Non-archive, direct filesystem I/O"
|
||||
#define GRP_ARCHIVE_DESCRIPTION "Build engine Groupfile format"
|
||||
#define ZIP_ARCHIVE_DESCRIPTION "PkZip/WinZip/Info-Zip compatible"
|
||||
|
||||
#define ERR_IS_INITIALIZED "Already initialized"
|
||||
#define ERR_NOT_INITIALIZED "Not initialized"
|
||||
#define ERR_INVALID_ARGUMENT "Invalid argument"
|
||||
#define ERR_FILES_STILL_OPEN "Files still open"
|
||||
#define ERR_NO_DIR_CREATE "Failed to create directories"
|
||||
#define ERR_OUT_OF_MEMORY "Out of memory"
|
||||
#define ERR_NOT_IN_SEARCH_PATH "No such entry in search path"
|
||||
#define ERR_NOT_SUPPORTED "Operation not supported"
|
||||
#define ERR_UNSUPPORTED_ARCHIVE "Archive type unsupported"
|
||||
#define ERR_NOT_A_HANDLE "Not a file handle"
|
||||
#define ERR_INSECURE_FNAME "Insecure filename"
|
||||
#define ERR_SYMLINK_DISALLOWED "Symbolic links are disabled"
|
||||
#define ERR_NO_WRITE_DIR "Write directory is not set"
|
||||
#define ERR_NO_SUCH_FILE "File not found"
|
||||
#define ERR_NO_SUCH_PATH "Path not found"
|
||||
#define ERR_NO_SUCH_VOLUME "Volume not found"
|
||||
#define ERR_PAST_EOF "Past end of file"
|
||||
#define ERR_ARC_IS_READ_ONLY "Archive is read-only"
|
||||
#define ERR_IO_ERROR "I/O error"
|
||||
#define ERR_CANT_SET_WRITE_DIR "Can't set write directory"
|
||||
#define ERR_SYMLINK_LOOP "Infinite symbolic link loop"
|
||||
#define ERR_COMPRESSION "(De)compression error"
|
||||
#define ERR_NOT_IMPLEMENTED "Not implemented"
|
||||
#define ERR_OS_ERROR "Operating system reported error"
|
||||
#define ERR_FILE_EXISTS "File already exists"
|
||||
#define ERR_NOT_A_FILE "Not a file"
|
||||
#define ERR_NOT_A_DIR "Not a directory"
|
||||
#define ERR_NOT_AN_ARCHIVE "Not an archive"
|
||||
#define ERR_CORRUPTED "Corrupted archive"
|
||||
#define ERR_SEEK_OUT_OF_RANGE "Seek out of range"
|
||||
#define ERR_BAD_FILENAME "Bad filename"
|
||||
#define ERR_PHYSFS_BAD_OS_CALL "(BUG) PhysicsFS made a bad system call"
|
||||
#define ERR_ARGV0_IS_NULL "argv0 is NULL"
|
||||
#define ERR_ZLIB_NEED_DICT "zlib: need dictionary"
|
||||
#define ERR_ZLIB_DATA_ERROR "zlib: data error"
|
||||
#define ERR_ZLIB_MEMORY_ERROR "zlib: memory error"
|
||||
#define ERR_ZLIB_BUFFER_ERROR "zlib: buffer error"
|
||||
#define ERR_ZLIB_VERSION_ERROR "zlib: version error"
|
||||
#define ERR_ZLIB_UNKNOWN_ERROR "zlib: unknown error"
|
||||
#define ERR_SEARCHPATH_TRUNC "Search path was truncated"
|
||||
#define ERR_GETMODFN_TRUNC "GetModuleFileName() was truncated"
|
||||
#define ERR_GETMODFN_NO_DIR "GetModuleFileName() had no dir"
|
||||
#define ERR_DISK_FULL "Disk is full"
|
||||
#define ERR_DIRECTORY_FULL "Directory full"
|
||||
#define ERR_MACOS_GENERIC "MacOS reported error (%d)"
|
||||
#define ERR_OS2_GENERIC "OS/2 reported error (%d)"
|
||||
#define ERR_VOL_LOCKED_HW "Volume is locked through hardware"
|
||||
#define ERR_VOL_LOCKED_SW "Volume is locked through software"
|
||||
#define ERR_FILE_LOCKED "File is locked"
|
||||
#define ERR_FILE_OR_DIR_BUSY "File/directory is busy"
|
||||
#define ERR_FILE_ALREADY_OPEN_W "File already open for writing"
|
||||
#define ERR_FILE_ALREADY_OPEN_R "File already open for reading"
|
||||
#define ERR_INVALID_REFNUM "Invalid reference number"
|
||||
#define ERR_GETTING_FILE_POS "Error getting file position"
|
||||
#define ERR_VOLUME_OFFLINE "Volume is offline"
|
||||
#define ERR_PERMISSION_DENIED "Permission denied"
|
||||
#define ERR_VOL_ALREADY_ONLINE "Volume already online"
|
||||
#define ERR_NO_SUCH_DRIVE "No such drive"
|
||||
#define ERR_NOT_MAC_DISK "Not a Macintosh disk"
|
||||
#define ERR_VOL_EXTERNAL_FS "Volume belongs to an external filesystem"
|
||||
#define ERR_PROBLEM_RENAME "Problem during rename"
|
||||
#define ERR_BAD_MASTER_BLOCK "Bad master directory block"
|
||||
#define ERR_CANT_MOVE_FORBIDDEN "Attempt to move forbidden"
|
||||
#define ERR_WRONG_VOL_TYPE "Wrong volume type"
|
||||
#define ERR_SERVER_VOL_LOST "Server volume has been disconnected"
|
||||
#define ERR_FILE_ID_NOT_FOUND "File ID not found"
|
||||
#define ERR_FILE_ID_EXISTS "File ID already exists"
|
||||
#define ERR_SERVER_NO_RESPOND "Server not responding"
|
||||
#define ERR_USER_AUTH_FAILED "User authentication failed"
|
||||
#define ERR_PWORD_EXPIRED "Password has expired on server"
|
||||
#define ERR_ACCESS_DENIED "Access denied"
|
||||
#define ERR_NOT_A_DOS_DISK "Not a DOS disk"
|
||||
#define ERR_SHARING_VIOLATION "Sharing violation"
|
||||
#define ERR_CANNOT_MAKE "Cannot make"
|
||||
#define ERR_DEV_IN_USE "Device already in use"
|
||||
#define ERR_OPEN_FAILED "Open failed"
|
||||
#define ERR_PIPE_BUSY "Pipe is busy"
|
||||
#define ERR_SHARING_BUF_EXCEEDED "Sharing buffer exceeded"
|
||||
#define ERR_TOO_MANY_HANDLES "Too many open handles"
|
||||
#define ERR_SEEK_ERROR "Seek error"
|
||||
#define ERR_DEL_CWD "Trying to delete current working directory"
|
||||
#define ERR_WRITE_PROTECT_ERROR "Write protect error"
|
||||
#define ERR_WRITE_FAULT "Write fault"
|
||||
#define ERR_LOCK_VIOLATION "Lock violation"
|
||||
#define ERR_GEN_FAILURE "General failure"
|
||||
#define ERR_UNCERTAIN_MEDIA "Uncertain media"
|
||||
#define ERR_PROT_VIOLATION "Protection violation"
|
||||
#define ERR_BROKEN_PIPE "Broken pipe"
|
||||
#else
|
||||
#error Please define PHYSFS_LANG.
|
||||
#endif
|
||||
|
||||
/* end LANG section. */
|
||||
|
||||
|
||||
struct __PHYSFS_DIRHANDLE__;
|
||||
struct __PHYSFS_FILEFUNCTIONS__;
|
||||
|
||||
|
@ -252,38 +363,6 @@ typedef struct __PHYSFS_DIRFUNCTIONS__
|
|||
} DirFunctions;
|
||||
|
||||
|
||||
/* error messages... */
|
||||
#define ERR_IS_INITIALIZED "Already initialized"
|
||||
#define ERR_NOT_INITIALIZED "Not initialized"
|
||||
#define ERR_INVALID_ARGUMENT "Invalid argument"
|
||||
#define ERR_FILES_STILL_OPEN "Files still open"
|
||||
#define ERR_NO_DIR_CREATE "Failed to create directories"
|
||||
#define ERR_OUT_OF_MEMORY "Out of memory"
|
||||
#define ERR_NOT_IN_SEARCH_PATH "No such entry in search path"
|
||||
#define ERR_NOT_SUPPORTED "Operation not supported"
|
||||
#define ERR_UNSUPPORTED_ARCHIVE "Archive type unsupported"
|
||||
#define ERR_NOT_A_HANDLE "Not a file handle"
|
||||
#define ERR_INSECURE_FNAME "Insecure filename"
|
||||
#define ERR_SYMLINK_DISALLOWED "Symbolic links are disabled"
|
||||
#define ERR_NO_WRITE_DIR "Write directory is not set"
|
||||
#define ERR_NO_SUCH_FILE "No such file"
|
||||
#define ERR_PAST_EOF "Past end of file"
|
||||
#define ERR_ARC_IS_READ_ONLY "Archive is read-only"
|
||||
#define ERR_IO_ERROR "I/O error"
|
||||
#define ERR_CANT_SET_WRITE_DIR "Can't set write directory"
|
||||
#define ERR_SYMLINK_LOOP "Infinite symbolic link loop"
|
||||
#define ERR_COMPRESSION "(De)compression error"
|
||||
#define ERR_NOT_IMPLEMENTED "Not implemented"
|
||||
#define ERR_OS_ERROR "Operating system reported error"
|
||||
#define ERR_FILE_EXISTS "File already exists"
|
||||
#define ERR_NOT_A_DIR "Not a directory"
|
||||
#define ERR_FILE_NOT_FOUND "File not found"
|
||||
#define ERR_NOT_AN_ARCHIVE "Not an archive"
|
||||
#define ERR_CORRUPTED "Corrupted archive"
|
||||
#define ERR_SEEK_OUT_OF_RANGE "Seek out of range"
|
||||
#define ERR_BAD_FILENAME "Bad filename"
|
||||
|
||||
|
||||
/*
|
||||
* Call this to set the message returned by PHYSFS_getLastError().
|
||||
* Please only use the ERR_* constants above, or add new constants to the
|
||||
|
|
|
@ -61,56 +61,56 @@
|
|||
const char *__PHYSFS_platformDirSeparator = ":";
|
||||
|
||||
|
||||
static const char *get_os_error_string(OSErr err)
|
||||
static const char *get_macos_error_string(OSErr err)
|
||||
{
|
||||
if (err == noErr)
|
||||
return(NULL);
|
||||
|
||||
switch (err)
|
||||
{
|
||||
case fnfErr: return("File not found");
|
||||
case notOpenErr: return("Volume not found");
|
||||
case dirFulErr: return("Directory full");
|
||||
case dskFulErr: return("Disk full");
|
||||
case nsvErr: return("Volume not found");
|
||||
case fnfErr: return(ERR_NO_SUCH_FILE);
|
||||
case notOpenErr: return(ERR_NO_SUCH_VOLUME);
|
||||
case dirFulErr: return(ERR_DIRECTORY_FULL);
|
||||
case dskFulErr: return(ERR_DISK_FULL);
|
||||
case nsvErr: return(ERR_NO_SUCH_VOLUME);
|
||||
case ioErr: return(ERR_IO_ERROR);
|
||||
case bdNamErr: return(ERR_BAD_FILENAME);
|
||||
case fnOpnErr: return(ERR_NOT_A_HANDLE);
|
||||
case eofErr: return(ERR_PAST_EOF);
|
||||
case posErr: return(ERR_SEEK_OUT_OF_RANGE);
|
||||
case tmfoErr: return("Too many files open");
|
||||
case wPrErr: return("Volume is locked through hardware");
|
||||
case fLckdErr: return("File is locked");
|
||||
case vLckdErr: return("Volume is locked through software");
|
||||
case fBsyErr: return("File/directory is busy");
|
||||
case dupFNErr: return(FILE_ALREADY_EXISTS);
|
||||
case opWrErr: return("File already open for writing");
|
||||
case rfNumErr: return("Invalid reference number");
|
||||
case gfpErr: return("Error getting file position");
|
||||
case volOffLinErr: return("Volume is offline");
|
||||
case permErr: return("Permission denied");
|
||||
case volOnLinErr: return("Volume already online");
|
||||
case nsDrvErr: return("No such drive");
|
||||
case noMacDskErr: return("Not a Macintosh disk");
|
||||
case extFSErr: return("Volume belongs to an external file system");
|
||||
case fsRnErr: return("Problem during rename");
|
||||
case badMDBErr: return("Bad master directory block");
|
||||
case wrPermErr: return("Write permission denied");
|
||||
case tmfoErr: return(ERR_TOO_MANY_HANDLES);
|
||||
case wPrErr: return(ERR_VOL_LOCKED_HW);
|
||||
case fLckdErr: return(ERR_FILE_LOCKED);
|
||||
case vLckdErr: return(ERR_VOL_LOCKED_SW);
|
||||
case fBsyErr: return(ERR_FILE_OR_DIR_BUSY);
|
||||
case dupFNErr: return(ERR_FILE_ALREADY_EXISTS);
|
||||
case opWrErr: return(ERR_FILE_ALREADY_OPEN_W);
|
||||
case rfNumErr: return(ERR_INVALID_REFNUM);
|
||||
case gfpErr: return(ERR_GETTING_FILE_POS);
|
||||
case volOffLinErr: return(ERR_VOLUME_OFFLINE);
|
||||
case permErr: return(ERR_PERMISSION_DENIED);
|
||||
case volOnLinErr: return(ERR_VOL_ALREADY_ONLINE);
|
||||
case nsDrvErr: return(ERR_NO_SUCH_DRIVE);
|
||||
case noMacDskErr: return(ERR_NOT_MAC_DISK);
|
||||
case extFSErr: return(ERR_VOL_EXTERNAL_FS);
|
||||
case fsRnErr: return(ERR_PROBLEM_RENAME);
|
||||
case badMDBErr: return(ERR_BAD_MASTER_BLOCK);
|
||||
case wrPermErr: return(ERR_PERMISSION_DENIED);
|
||||
case memFullErr: return(ERR_OUT_OF_MEMORY);
|
||||
case dirNFErr: return("Directory not found or incomplete pathname");
|
||||
case tmwdoErr: return("Too many working directories open");
|
||||
case badMovErr: return("Attempt to move forbidden");
|
||||
case wrgVolTypErr: return("Wrong volume type");
|
||||
case volGoneErr: return("Server volume has been disconnected");
|
||||
case dirNFErr: return(ERR_NO_SUCH_PATH);
|
||||
case tmwdoErr: return(ERR_TOO_MANY_HANDLES);
|
||||
case badMovErr: return(ERR_CANT_MOVE_FORBIDDEN);
|
||||
case wrgVolTypErr: return(ERR_WRONG_VOL_TYPE);
|
||||
case volGoneErr: return(ERR_SERVER_VOL_LOST);
|
||||
case errFSNameTooLong: return(ERR_BAD_FILENAME);
|
||||
case errFSNotAFolder: return("Not a folder");
|
||||
case errFSNotAFile: return("Not a file");
|
||||
case fidNotFound: return("File ID not found");
|
||||
case fidExists: return("File ID already exists");
|
||||
case afpAccessDenied: return("Access denied");
|
||||
case afpNoServer: return("Server not responding");
|
||||
case afpUserNotAuth: return("User authentication failed");
|
||||
case afpPwdExpiredErr: return("Password has expired on server");
|
||||
case errFSNotAFolder: return(ERR_NOT_A_DIR);
|
||||
case errFSNotAFile: return(ERR_NOT_A_FILE);
|
||||
case fidNotFound: return(ERR_FILE_ID_NOT_FOUND);
|
||||
case fidExists: return(ERR_FILE_ID_EXISTS);
|
||||
case afpAccessDenied: return(ERR_ACCESS_DENIED);
|
||||
case afpNoServer: return(ERR_SERVER_NO_RESPOND);
|
||||
case afpUserNotAuth: return(ERR_USER_AUTH_FAILED);
|
||||
case afpPwdExpiredErr: return(ERR_PWORD_EXPIRED);
|
||||
|
||||
case paramErr:
|
||||
case errFSBadFSRef:
|
||||
|
@ -121,29 +121,29 @@ static const char *get_os_error_string(OSErr err)
|
|||
case errFSBadItemCount
|
||||
case errFSBadSearchParams
|
||||
case afpDenyConflict
|
||||
return("(BUG) PhysicsFS gave wrong params to the OS.");
|
||||
return(ERR_PHYSFS_BAD_OS_CALL);
|
||||
|
||||
default: return(ERR_OS_ERROR);
|
||||
default: return(ERR_MACOS_GENERIC);
|
||||
} /* switch */
|
||||
|
||||
return(NULL);
|
||||
} /* get_os_error_string */
|
||||
} /* get_macos_error_string */
|
||||
|
||||
|
||||
static OSErr oserr(OSErr err)
|
||||
static OSErr oserr(OSErr retval)
|
||||
{
|
||||
char buf[128];
|
||||
const char *errstr = get_os_error_string(err);
|
||||
if (err == ERR_OS_ERROR)
|
||||
const char *errstr = get_macos_error_string(retval);
|
||||
if (errstr == ERR_MACOS_GENERIC)
|
||||
{
|
||||
snprintf(buf, "MacOS reported error (%d)", (int) err);
|
||||
snprintf(buf, ERR_MACOS_GENERIC, (int) retval);
|
||||
errstr = buf;
|
||||
} /* if */
|
||||
|
||||
if (errstr != NULL)
|
||||
__PHYSFS_SetError(errstr);
|
||||
__PHYSFS_setError(errstr);
|
||||
|
||||
return(err);
|
||||
return(retval);
|
||||
} /* oserr */
|
||||
|
||||
|
||||
|
|
210
platform/os2.c
210
platform/os2.c
|
@ -36,116 +36,40 @@
|
|||
const char *__PHYSFS_platformDirSeparator = "\\";
|
||||
|
||||
|
||||
static APIRET os2err(APIRET retval)
|
||||
static const char *get_os2_error_string(APIRET rc)
|
||||
{
|
||||
const char *err = NULL;
|
||||
|
||||
/*
|
||||
* The ones that say "OS/2 reported" are more for PhysicsFS developer
|
||||
* debugging. We give more generic messages for ones that are likely to
|
||||
* fall through to an application.
|
||||
*/
|
||||
switch (retval)
|
||||
switch (rc)
|
||||
{
|
||||
case NO_ERROR: /* Don't set the PhysicsFS error message for these... */
|
||||
case ERROR_INTERRUPT:
|
||||
case ERROR_TIMEOUT:
|
||||
break;
|
||||
|
||||
case ERROR_NOT_ENOUGH_MEMORY:
|
||||
err = ERR_OUT_OF_MEMORY;
|
||||
break;
|
||||
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
err = "File not found";
|
||||
break;
|
||||
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
err = "Path not found";
|
||||
break;
|
||||
|
||||
case ERROR_ACCESS_DENIED:
|
||||
err = "Access denied";
|
||||
break;
|
||||
|
||||
case ERROR_NOT_DOS_DISK:
|
||||
err = "Not a DOS disk";
|
||||
break;
|
||||
|
||||
case ERROR_SHARING_VIOLATION:
|
||||
err = "Sharing violation";
|
||||
break;
|
||||
|
||||
case ERROR_CANNOT_MAKE:
|
||||
err = "Cannot make";
|
||||
break;
|
||||
|
||||
case ERROR_DEVICE_IN_USE:
|
||||
err = "Device already in use";
|
||||
break;
|
||||
|
||||
case ERROR_OPEN_FAILED:
|
||||
err = "Open failed";
|
||||
break;
|
||||
|
||||
case ERROR_DISK_FULL:
|
||||
err = "Disk is full";
|
||||
break;
|
||||
|
||||
case ERROR_PIPE_BUSY:
|
||||
err = "Pipe busy";
|
||||
break;
|
||||
|
||||
case ERROR_SHARING_BUFFER_EXCEEDED:
|
||||
err = "Sharing buffer exceeded";
|
||||
break;
|
||||
|
||||
case ERROR_FILENAME_EXCED_RANGE:
|
||||
case ERROR_META_EXPANSION_TOO_LONG:
|
||||
err = "Filename too big";
|
||||
break;
|
||||
|
||||
case ERROR_TOO_MANY_HANDLES:
|
||||
case ERROR_TOO_MANY_OPEN_FILES:
|
||||
case ERROR_NO_MORE_SEARCH_HANDLES:
|
||||
err = "Too many open handles";
|
||||
break;
|
||||
|
||||
case ERROR_SEEK_ON_DEVICE:
|
||||
err = "Seek error"; /* Is that what this error means? */
|
||||
break;
|
||||
|
||||
case ERROR_NEGATIVE_SEEK:
|
||||
err = "Seek past start of file";
|
||||
break;
|
||||
|
||||
case ERROR_CURRENT_DIRECTORY:
|
||||
err = "Trying to delete current working directory";
|
||||
break;
|
||||
|
||||
case ERROR_WRITE_PROTECT:
|
||||
err = "Write protect error";
|
||||
break;
|
||||
|
||||
case ERROR_WRITE_FAULT:
|
||||
err = "Write fault";
|
||||
break;
|
||||
|
||||
case ERROR_LOCK_VIOLATION:
|
||||
err = "Lock violation";
|
||||
break;
|
||||
|
||||
case ERROR_GEN_FAILURE:
|
||||
err = "General failure";
|
||||
break;
|
||||
|
||||
case ERROR_UNCERTAIN_MEDIA:
|
||||
err = "Uncertain media";
|
||||
break;
|
||||
|
||||
case ERROR_PROTECTION_VIOLATION:
|
||||
err = "Protection violation";
|
||||
break;
|
||||
case NO_ERROR: return(NULL); /* not an error. */
|
||||
case ERROR_INTERRUPT: return(NULL); /* not an error. */
|
||||
case ERROR_TIMEOUT: return(NULL); /* not an error. */
|
||||
case ERROR_NOT_ENOUGH_MEMORY: return(ERR_OUT_OF_MEMORY);
|
||||
case ERROR_FILE_NOT_FOUND: return(ERR_NO_SUCH_FILE);
|
||||
case ERROR_PATH_NOT_FOUND: return(ERR_NO_SUCH_PATH);
|
||||
case ERROR_ACCESS_DENIED: return(ERR_ACCESS_DENIED);
|
||||
case ERROR_NOT_DOS_DISK: return(ERR_NOT_A_DOS_DISK);
|
||||
case ERROR_SHARING_VIOLATION: return(ERR_SHARING_VIOLATION);
|
||||
case ERROR_CANNOT_MAKE: return(ERR_CANNOT_MAKE);
|
||||
case ERROR_DEVICE_IN_USE: return(ERR_DEV_IN_USE);
|
||||
case ERROR_OPEN_FAILED: return(ERR_OPEN_FAILED);
|
||||
case ERROR_DISK_FULL: return(ERR_DISK_FULL);
|
||||
case ERROR_PIPE_BUSY: return(ERR_PIPE_BUSY);
|
||||
case ERROR_SHARING_BUFFER_EXCEEDED: return(ERR_SHARING_BUF_EXCEEDED);
|
||||
case ERROR_FILENAME_EXCED_RANGE: return(ERR_BAD_FILENAME);
|
||||
case ERROR_META_EXPANSION_TOO_LONG: return(ERR_BAD_FILENAME);
|
||||
case ERROR_TOO_MANY_HANDLES: return(ERR_TOO_MANY_HANDLES);
|
||||
case ERROR_TOO_MANY_OPEN_FILES: return(ERR_TOO_MANY_HANDLES);
|
||||
case ERROR_NO_MORE_SEARCH_HANDLES: return(ERR_TOO_MANY_HANDLES);
|
||||
case ERROR_SEEK_ON_DEVICE: return(ERR_SEEK_ERROR);
|
||||
case ERROR_NEGATIVE_SEEK: return(ERR_SEEK_OUT_OF_RANGE);
|
||||
case ERROR_DEL_CURRENT_DIRECTORY: return(ERR_DEL_CWD);
|
||||
case ERROR_WRITE_PROTECT: return(ERR_WRITE_PROTECT_ERROR);
|
||||
case ERROR_WRITE_FAULT: return(ERR_WRITE_FAULT);
|
||||
case ERROR_LOCK_VIOLATION: return(ERR_LOCK_VIOLATION);
|
||||
case ERROR_GEN_FAILURE: return(ERR_GENERAL_FAILURE);
|
||||
case ERROR_UNCERTAIN_MEDIA: return(ERR_UNCERTAIN_MEDIA);
|
||||
case ERROR_PROTECTION_VIOLATION: return(ERR_PROT_VIOLATION);
|
||||
case ERROR_BROKEN_PIPE: return(ERR_BROKEN_PIPE);
|
||||
|
||||
case ERROR_INVALID_PARAMETER:
|
||||
case ERROR_INVALID_NAME:
|
||||
|
@ -159,66 +83,30 @@ static APIRET os2err(APIRET retval)
|
|||
case ERROR_BAD_LENGTH:
|
||||
case ERROR_BAD_DRIVER_LEVEL:
|
||||
case ERROR_DIRECT_ACCESS_HANDLE:
|
||||
err = "OS/2 reported an invalid parameter to an API function";
|
||||
break;
|
||||
|
||||
case ERROR_NO_VOLUME_LABEL:
|
||||
err = "OS/2 reported no volume label";
|
||||
break;
|
||||
|
||||
case ERROR_NO_MORE_FILES:
|
||||
err = "OS/2 reported no more files";
|
||||
break;
|
||||
|
||||
case ERROR_MONITORS_NOT_SUPPORTED:
|
||||
err = "OS/2 reported monitors not supported";
|
||||
break;
|
||||
|
||||
case ERROR_BROKEN_PIPE:
|
||||
err = "OS/2 reported a broken pipe";
|
||||
break;
|
||||
|
||||
case ERROR_MORE_DATA:
|
||||
err = "OS/2 reported \"more data\" (?)";
|
||||
break;
|
||||
|
||||
case ERROR_EAS_DIDNT_FIT:
|
||||
err = "OS/2 reported Extended Attributes didn't fit";
|
||||
break;
|
||||
|
||||
case ERROR_INVALID_EA_NAME:
|
||||
err = "OS/2 reported an invalid Extended Attribute name";
|
||||
break;
|
||||
|
||||
case ERROR_EA_LIST_INCONSISTENT:
|
||||
err = "OS/2 reported an inconsistent Extended Attribute list";
|
||||
break;
|
||||
|
||||
case ERROR_SEM_OWNER_DIED:
|
||||
err = "OS/2 reported that semaphore owner died";
|
||||
break;
|
||||
|
||||
case ERROR_TOO_MANY_SEM_REQUESTS:
|
||||
err = "OS/2 reported too many semaphore requests";
|
||||
break;
|
||||
|
||||
case ERROR_SEM_BUSY:
|
||||
err = "OS/2 reported a blocked semaphore";
|
||||
break;
|
||||
|
||||
case ERROR_NOT_OWNER:
|
||||
err = "OS/2 reported that we used a resource we don't own.";
|
||||
break;
|
||||
return(ERR_PHYSFS_BAD_OS_CALL);
|
||||
|
||||
default:
|
||||
err = "OS/2 reported back with unrecognized error code";
|
||||
break;
|
||||
default: return(ERR_OS2_GENERIC);
|
||||
} /* switch */
|
||||
|
||||
return(NULL);
|
||||
} /* get_os2_error_string */
|
||||
|
||||
|
||||
static APIRET os2err(APIRET retval)
|
||||
{
|
||||
char buf[128];
|
||||
const char *err = get_os2_error_string(retval);
|
||||
if (err == ERR_OS2_GENERIC)
|
||||
{
|
||||
snprintf(buf, ERR_OS2_GENERIC, (int) retval);
|
||||
err = buf;
|
||||
} /* if */
|
||||
|
||||
if (err != NULL)
|
||||
__PHYSFS_setError(err);
|
||||
|
||||
return(retval);
|
||||
return(err);
|
||||
} /* os2err */
|
||||
|
||||
|
||||
|
|
|
@ -125,12 +125,12 @@ static char *getExePath(const char *argv0)
|
|||
|
||||
/* make sure the string was not truncated. */
|
||||
if (__PHYSFS_platformStricmp(&retval[buflen - 4], ".exe") != 0)
|
||||
__PHYSFS_setError("WIN32: GetModuleFileName() got truncated.");
|
||||
__PHYSFS_setError(ERR_GOTMODFN_TRUNC);
|
||||
else
|
||||
{
|
||||
ptr = strrchr(retval, '\\');
|
||||
if (ptr == NULL)
|
||||
__PHYSFS_setError("WIN32: GetModuleFileName() had no dir.");
|
||||
__PHYSFS_setError(ERR_GETMODFN_NO_DIR);
|
||||
else
|
||||
{
|
||||
*(ptr + 1) = '\0'; /* chop off filename. */
|
||||
|
@ -144,14 +144,14 @@ static char *getExePath(const char *argv0)
|
|||
if (!success)
|
||||
{
|
||||
if (argv0 == NULL)
|
||||
__PHYSFS_setError("WIN32: argv0 is NULL.");
|
||||
__PHYSFS_setError(ERR_ARGV0_IS_NULL);
|
||||
else
|
||||
{
|
||||
buflen = SearchPath(NULL, argv0, NULL, MAX_PATH+1, retval, &ptr);
|
||||
if (buflen == 0)
|
||||
__PHYSFS_setError(win32strerror());
|
||||
else if (buflen > MAX_PATH)
|
||||
__PHYSFS_setError("Win32: SearchPath() got truncated.");
|
||||
__PHYSFS_setError(ERR_SEARCHPATH_TRUNC);
|
||||
else
|
||||
success = 1;
|
||||
} /* else */
|
||||
|
|
Loading…
Reference in New Issue