Author: mturk
Date: Fri Aug 28 15:45:31 2009
New Revision: 808924
URL: http://svn.apache.org/viewvc?rev=808924&view=rev
Log:
Fill in missing error values
Modified:
commons/sandbox/runtime/trunk/src/main/native/shared/error.c
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/error.c
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/error.c?rev=808924&r1=808923&r2=808924&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/error.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/error.c Fri Aug 28
15:45:31 2009
@@ -282,108 +282,108 @@
static const char *acr_error_string(int statcode)
{
switch (statcode) {
- case ACR_ENOPOOL:
- return "A new pool could not be created.";
- case ACR_EBADDATE:
- return "An invalid date has been provided";
- case ACR_EINVALSOCK:
- return "An invalid socket was returned";
- case ACR_ENOPROC:
- return "No process was provided and one was required.";
- case ACR_ENOTIME:
- return "No time was provided and one was required.";
- case ACR_ENODIR:
- return "No directory was provided and one was required.";
- case ACR_ENOLOCK:
- return "No lock was provided and one was required.";
- case ACR_ENOPOLL:
- return "No poll structure was provided and one was required.";
- case ACR_ENOSOCKET:
- return "No socket was provided and one was required.";
- case ACR_ENOTHREAD:
- return "No thread was provided and one was required.";
- case ACR_ENOTHDKEY:
- return "No thread key structure was provided and one was required.";
- case ACR_ENOSHMAVAIL:
- return "No shared memory is currently available";
- case ACR_EDSOOPEN:
+ case ACR_ENOPOOL:
+ return "A new pool could not be created.";
+ case ACR_EBADDATE:
+ return "An invalid date has been provided";
+ case ACR_EINVALSOCK:
+ return "An invalid socket was returned";
+ case ACR_ENOPROC:
+ return "No process was provided and one was required.";
+ case ACR_ENOTIME:
+ return "No time was provided and one was required.";
+ case ACR_ENODIR:
+ return "No directory was provided and one was required.";
+ case ACR_ENOLOCK:
+ return "No lock was provided and one was required.";
+ case ACR_ENOPOLL:
+ return "No poll structure was provided and one was required.";
+ case ACR_ENOSOCKET:
+ return "No socket was provided and one was required.";
+ case ACR_ENOTHREAD:
+ return "No thread was provided and one was required.";
+ case ACR_ENOTHDKEY:
+ return "No thread key structure was provided and one was
required.";
+ case ACR_ENOSHMAVAIL:
+ return "No shared memory is currently available";
+ case ACR_EDSOOPEN:
#if HAVE_DLFCN_H
- return dlerror();
+ return dlerror();
#else
- return "DSO load failed";
+ return "DSO load failed";
#endif /* HAVE_DLFCN_H */
- case ACR_EBADIP:
- return "The specified IP address is invalid.";
- case ACR_EBADMASK:
- return "The specified network mask is invalid.";
-
- case ACR_INCHILD:
- return
- "Your code just forked, and you are currently executing in the "
- "child process";
- case ACR_INPARENT:
- return
- "Your code just forked, and you are currently executing in the "
- "parent process";
- case ACR_DETACH:
- return "The specified thread is detached";
- case ACR_NOTDETACH:
- return "The specified thread is not detached";
- case ACR_CHILD_DONE:
- return "The specified child process is done executing";
- case ACR_CHILD_NOTDONE:
- return "The specified child process is not done executing";
- case ACR_TIMEUP:
- return "The timeout specified has expired";
- case ACR_INCOMPLETE:
- return "Partial results are valid but processing is incomplete";
- case ACR_BADCH:
- return "Bad character specified on command line";
- case ACR_BADARG:
- return "Missing parameter for the specified command line option";
- case ACR_EOF:
- return "End of file found";
- case ACR_NOTFOUND:
- return "Could not find specified socket in poll list.";
- case ACR_ANONYMOUS:
- return "Shared memory is implemented anonymously";
- case ACR_FILEBASED:
- return "Shared memory is implemented using files";
- case ACR_KEYBASED:
- return "Shared memory is implemented using a key system";
- case ACR_EINIT:
- return
- "There is no error, this value signifies an initialized "
- "error code";
- case ACR_ENOTIMPL:
- return "This function has not been implemented on this platform";
- case ACR_EMISMATCH:
- return "passwords do not match";
- case ACR_EABSOLUTE:
- return "The given path is absolute";
- case ACR_ERELATIVE:
- return "The given path is relative";
- case ACR_EINCOMPLETE:
- return "The given path is incomplete";
- case ACR_EABOVEROOT:
- return "The given path was above the root path";
- case ACR_EBADPATH:
- return "The given path is misformatted or contained invalid
characters";
- case ACR_EPATHWILD:
- return "The given path contained wildcard characters";
- case ACR_EPROC_UNKNOWN:
- return "The process is not recognized.";
- case ACR_EGENERAL:
- return "Internal error";
- /* ACR specific error codes */
- case ACR_EISNULL:
- return "The given argument is null";
- case ACR_EINVALSIZ:
- return "The given argument size is invalid";
- case ACR_ECLASSNOTFOUND:
- return "The specified Java Class was not found";
- default:
- return "Error string not specified yet";
+ case ACR_EBADIP:
+ return "The specified IP address is invalid.";
+ case ACR_EBADMASK:
+ return "The specified network mask is invalid.";
+
+ case ACR_INCHILD:
+ return
+ "Your code just forked, and you are currently executing in the "
+ "child process";
+ case ACR_INPARENT:
+ return
+ "Your code just forked, and you are currently executing in the "
+ "parent process";
+ case ACR_DETACH:
+ return "The specified thread is detached";
+ case ACR_NOTDETACH:
+ return "The specified thread is not detached";
+ case ACR_CHILD_DONE:
+ return "The specified child process is done executing";
+ case ACR_CHILD_NOTDONE:
+ return "The specified child process is not done executing";
+ case ACR_TIMEUP:
+ return "The timeout specified has expired";
+ case ACR_INCOMPLETE:
+ return "Partial results are valid but processing is incomplete";
+ case ACR_BADCH:
+ return "Bad character specified on command line";
+ case ACR_BADARG:
+ return "Missing parameter for the specified command line option";
+ case ACR_EOF:
+ return "End of file found";
+ case ACR_NOTFOUND:
+ return "Could not find specified socket in poll list.";
+ case ACR_ANONYMOUS:
+ return "Shared memory is implemented anonymously";
+ case ACR_FILEBASED:
+ return "Shared memory is implemented using files";
+ case ACR_KEYBASED:
+ return "Shared memory is implemented using a key system";
+ case ACR_EINIT:
+ return
+ "There is no error, this value signifies an initialized "
+ "error code";
+ case ACR_ENOTIMPL:
+ return "This function has not been implemented on this platform";
+ case ACR_EMISMATCH:
+ return "Passwords do not match";
+ case ACR_EABSOLUTE:
+ return "The given path is absolute";
+ case ACR_ERELATIVE:
+ return "The given path is relative";
+ case ACR_EINCOMPLETE:
+ return "The given path is incomplete";
+ case ACR_EABOVEROOT:
+ return "The given path was above the root path";
+ case ACR_EBADPATH:
+ return "The given path is misformatted or contained invalid
characters";
+ case ACR_EPATHWILD:
+ return "The given path contained wildcard characters";
+ case ACR_EPROC_UNKNOWN:
+ return "The process is not recognized.";
+ case ACR_EGENERAL:
+ return "Internal error";
+ /* ACR specific error codes */
+ case ACR_EISNULL:
+ return "The given argument is null";
+ case ACR_EINVALSIZ:
+ return "The given argument size is invalid";
+ case ACR_ECLASSNOTFOUND:
+ return "The specified Java Class was not found";
+ default:
+ return "Error string not specified yet";
}
}
@@ -394,83 +394,157 @@
static const struct {
int code;
const char *msg;
-} gaErrorList[] = {
- WSAEINTR, "Interrupted system call",
- WSAEBADF, "Bad file number",
- WSAEACCES, "Permission denied",
- WSAEFAULT, "Bad address",
- WSAEINVAL, "Invalid argument",
- WSAEMFILE, "Too many open sockets",
- WSAEWOULDBLOCK, "Operation would block",
- WSAEINPROGRESS, "Operation now in progress",
- WSAEALREADY, "Operation already in progress",
- WSAENOTSOCK, "Socket operation on non-socket",
- WSAEDESTADDRREQ, "Destination address required",
- WSAEMSGSIZE, "Message too long",
- WSAEPROTOTYPE, "Protocol wrong type for socket",
- WSAENOPROTOOPT, "Bad protocol option",
- WSAEPROTONOSUPPORT, "Protocol not supported",
- WSAESOCKTNOSUPPORT, "Socket type not supported",
- WSAEOPNOTSUPP, "Operation not supported on socket",
- WSAEPFNOSUPPORT, "Protocol family not supported",
- WSAEAFNOSUPPORT, "Address family not supported",
- WSAEADDRINUSE, "Address already in use",
- WSAEADDRNOTAVAIL, "Can't assign requested address",
- WSAENETDOWN, "Network is down",
- WSAENETUNREACH, "Network is unreachable",
- WSAENETRESET, "Net connection reset",
- WSAECONNABORTED, "Software caused connection abort",
- WSAECONNRESET, "Connection reset by peer",
- WSAENOBUFS, "No buffer space available",
- WSAEISCONN, "Socket is already connected",
- WSAENOTCONN, "Socket is not connected",
- WSAESHUTDOWN, "Can't send after socket shutdown",
- WSAETOOMANYREFS, "Too many references, can't splice",
- WSAETIMEDOUT, "Connection timed out",
- WSAECONNREFUSED, "Connection refused",
- WSAELOOP, "Too many levels of symbolic links",
- WSAENAMETOOLONG, "File name too long",
- WSAEHOSTDOWN, "Host is down",
- WSAEHOSTUNREACH, "No route to host",
- WSAENOTEMPTY, "Directory not empty",
- WSAEPROCLIM, "Too many processes",
- WSAEUSERS, "Too many users",
- WSAEDQUOT, "Disc quota exceeded",
- WSAESTALE, "Stale NFS file handle",
- WSAEREMOTE, "Too many levels of remote in path",
- WSASYSNOTREADY, "Network system is unavailable",
- WSAVERNOTSUPPORTED, "Winsock version out of range",
- WSANOTINITIALISED, "WSAStartup not yet called",
- WSAEDISCON, "Graceful shutdown in progress",
- WSAHOST_NOT_FOUND, "Host not found",
- WSANO_DATA, "No host data of that type was found",
+} _ws2_errlist[] = {
+ WSAEINTR, "Interrupted system call",
+ WSAEBADF, "Bad file number",
+ WSAEACCES, "Permission denied",
+ WSAEFAULT, "Bad address",
+ WSAEINVAL, "Invalid argument",
+ WSAEMFILE, "Too many open sockets",
+ WSAEWOULDBLOCK, "Operation would block",
+ WSAEINPROGRESS, "Operation now in progress",
+ WSAEALREADY, "Operation already in progress",
+ WSAENOTSOCK, "Socket operation on non-socket",
+ WSAEDESTADDRREQ, "Destination address required",
+ WSAEMSGSIZE, "Message too long",
+ WSAEPROTOTYPE, "Protocol wrong type for socket",
+ WSAENOPROTOOPT, "Bad protocol option",
+ WSAEPROTONOSUPPORT, "Protocol not supported",
+ WSAESOCKTNOSUPPORT, "Socket type not supported",
+ WSAEOPNOTSUPP, "Operation not supported on socket",
+ WSAEPFNOSUPPORT, "Protocol family not supported",
+ WSAEAFNOSUPPORT, "Address family not supported",
+ WSAEADDRINUSE, "Address already in use",
+ WSAEADDRNOTAVAIL, "Can't assign requested address",
+ WSAENETDOWN, "Network is down",
+ WSAENETUNREACH, "Network is unreachable",
+ WSAENETRESET, "Net connection reset",
+ WSAECONNABORTED, "Software caused connection abort",
+ WSAECONNRESET, "Connection reset by peer",
+ WSAENOBUFS, "No buffer space available",
+ WSAEISCONN, "Socket is already connected",
+ WSAENOTCONN, "Socket is not connected",
+ WSAESHUTDOWN, "Can't send after socket shutdown",
+ WSAETOOMANYREFS, "Too many references, can't splice",
+ WSAETIMEDOUT, "Connection timed out",
+ WSAECONNREFUSED, "Connection refused",
+ WSAELOOP, "Too many levels of symbolic links",
+ WSAENAMETOOLONG, "File name too long",
+ WSAEHOSTDOWN, "Host is down",
+ WSAEHOSTUNREACH, "No route to host",
+ WSAENOTEMPTY, "Directory not empty",
+ WSAEPROCLIM, "Too many processes",
+ WSAEUSERS, "Too many users",
+ WSAEDQUOT, "Disc quota exceeded",
+ WSAESTALE, "Stale NFS file handle",
+ WSAEREMOTE, "Too many levels of remote in path",
+ WSASYSNOTREADY, "Network system is unavailable",
+ WSAVERNOTSUPPORTED, "Winsock version out of range",
+ WSANOTINITIALISED, "WSAStartup not yet called",
+ WSAEDISCON, "Graceful shutdown in progress",
+ WSAHOST_NOT_FOUND, "Host not found",
+ WSANO_DATA, "No host data of that type was found",
/* Extra errors */
- WSATRY_AGAIN, "Temporary failure in name resolution",
- WSANO_RECOVERY, "Nonrecoverable failure in name resolution",
+ WSATRY_AGAIN, "Temporary failure in name resolution",
+ WSANO_RECOVERY, "Nonrecoverable failure in name resolution",
WSA_NOT_ENOUGHT_MEMORY, "Memory allocation failed",
WSASERVICE_NOT_FOUND, "Service not found.",
- WSATYPE_NOT_FOUND, "Class type not found.",
- WSASYSCALLFAILURE, "System call failure",
- 0, NULL
+ WSATYPE_NOT_FOUND, "Class type not found.",
+ WSASYSCALLFAILURE, "System call failure",
+ 0, NULL
};
static const struct {
- DWORD get_last_error; /* Error returned from GetLastError() */
+ DWORD win32_error; /* Error returned from GetLastError() */
int posix_error; /* POSIX error code */
-} pxErrorList[] = {
- { ERROR_INVALID_FUNCTION, ACR_EINVAL },
- { ERROR_FILE_NOT_FOUND, ACR_ENOENT },
- { ERROR_PATH_NOT_FOUND, ACR_ENOENT },
- { ERROR_TOO_MANY_OPEN_FILES, ACR_EMFILE },
- { ERROR_ACCESS_DENIED, ACR_EACCES },
- { ERROR_INVALID_HANDLE, ACR_EBADF },
+} _psx_errlist[] = {
+ { ERROR_INVALID_FUNCTION, ACR_EINVAL },
+ { ERROR_FILE_NOT_FOUND, ACR_ENOENT },
+ { ERROR_PATH_NOT_FOUND, ACR_ENOENT },
+ { ERROR_TOO_MANY_OPEN_FILES, ACR_EMFILE },
+ { ERROR_ACCESS_DENIED, ACR_EACCES },
+ { ERROR_INVALID_HANDLE, ACR_EBADF },
+ { ERROR_ARENA_TRASHED, ACR_ENOMEM },
+ { ERROR_NOT_ENOUGH_MEMORY, ACR_ENOMEM },
+ { ERROR_INVALID_BLOCK, ACR_ENOMEM },
+ { ERROR_BAD_ENVIRONMENT, ACR_E2BIG },
+ { ERROR_BAD_FORMAT, ACR_ENOEXEC },
+ { ERROR_INVALID_ACCESS, ACR_EINVAL },
+ { ERROR_INVALID_DATA, ACR_EINVAL },
+ { ERROR_INVALID_DRIVE, ACR_ENOENT },
+ { ERROR_CURRENT_DIRECTORY, ACR_EACCES },
+ { ERROR_NOT_SAME_DEVICE, ACR_EXDEV },
+ { ERROR_NO_MORE_FILES, ACR_ENOENT },
+ { ERROR_LOCK_VIOLATION, ACR_EACCES },
+ { ERROR_BAD_NETPATH, ACR_ENOENT },
+ { ERROR_NETWORK_ACCESS_DENIED, ACR_EACCES },
+ { ERROR_BAD_NET_NAME, ACR_ENOENT },
+ { ERROR_FILE_EXISTS, ACR_EEXIST },
+ { ERROR_CANNOT_MAKE, ACR_EACCES },
+ { ERROR_FAIL_I24, ACR_EACCES },
+ { ERROR_INVALID_PARAMETER, ACR_EINVAL },
+ { ERROR_NO_PROC_SLOTS, ACR_EAGAIN },
+ { ERROR_DRIVE_LOCKED, ACR_EACCES },
+ { ERROR_BROKEN_PIPE, ACR_EPIPE },
+ { ERROR_DISK_FULL, ACR_ENOSPC },
+ { ERROR_INVALID_TARGET_HANDLE, ACR_EBADF },
+ { ERROR_INVALID_HANDLE, ACR_EINVAL },
+ { ERROR_WAIT_NO_CHILDREN, ACR_ECHILD },
+ { ERROR_CHILD_NOT_COMPLETE, ACR_ECHILD },
+ { ERROR_DIRECT_ACCESS_HANDLE, ACR_EBADF },
+ { ERROR_NEGATIVE_SEEK, ACR_EINVAL },
+ { ERROR_SEEK_ON_DEVICE, ACR_EACCES },
+ { ERROR_DIR_NOT_EMPTY, ACR_ENOTEMPTY },
+ { ERROR_NOT_LOCKED, ACR_EACCES },
+ { ERROR_BAD_PATHNAME, ACR_ENOENT },
+ { ERROR_MAX_THRDS_REACHED, ACR_EAGAIN },
+ { ERROR_LOCK_FAILED, ACR_EACCES },
+ { ERROR_ALREADY_EXISTS, ACR_EEXIST },
+ { ERROR_FILENAME_EXCED_RANGE, ACR_ENOENT },
+ { ERROR_NESTING_NOT_ALLOWED, ACR_EAGAIN },
+ { ERROR_NOT_ENOUGH_QUOTA, ACR_ENOMEM },
- { 0, -1 }
+ { 0, 0 }
};
+void acr_set_os_error(int oserror)
+{
+ int i;
+ if (!oserror) {
+ SetLastError(0);
+ errno = 0;
+ return;
+ }
+ for (i = 0; i < (sizeof(_psx_errlist) / sizeof(_psx_errlist[0])); i++) {
+ if (oserror == (int)_psx_errlist[i].win32_error) {
+ errno = _psx_errlist[i].posix_error;
+ break;
+ }
+ }
+
+ SetLastError(oserror - ACR_OS_START_SYSERR);
+}
+
+int acr_get_os_error()
+{
+ int i, crt;
+ DWORD os;
+ if ((os = GetLastError()))
+ return os + ACR_OS_START_SYSERR;
+ crt = errno;
+ for (i = 0; crt, i < (sizeof(_psx_errlist) / sizeof(_psx_errlist[0]));
i++) {
+ if (crt == _psx_errlist[i].posix_error)
+ return _psx_errlist[i].win32_error;
+ }
+
+ return crt == 0 ? 0 : crt + ACR_OS_START_SYSERR;
+}
+
+
static char *acr_os_strerror(char *buf, acr_size_t bufsize, int errcode)
{
- acr_size_t len = 0, i;
+ DWORD len = 0;
+ int i;
len = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
@@ -481,11 +555,10 @@
(DWORD)bufsize,
NULL);
if (!len) {
- for (i = 0; gaErrorList[i].msg; i++) {
- if (gaErrorList[i].code == errcode) {
- ACR_CopyStrn(buf, gaErrorList[i].msg, bufsize);
- len = strlen(buf);
- break;
+ for (i = 0; _ws2_errlist[i].msg; i++) {
+ if (_ws2_errlist[i].code == errcode) {
+ strlcpy(buf, _ws2_errlist[i].msg, bufsize);
+ return buf;
}
}
}
@@ -497,11 +570,9 @@
* as visually perfect as moving all the remaining message over,
* but more efficient.
*/
- i = len;
- while (i) {
- i--;
- if ((buf[i] == '\r') || (buf[i] == '\n'))
- buf[i] = ' ';
+ while (len--) {
+ if ((buf[len] == '\r') || (buf[len] == '\n'))
+ buf[len] = ' ';
}
}
else {