diff options
author | wtchang%redhat.com <devnull@localhost> | 2006-12-01 23:12:08 +0000 |
---|---|---|
committer | wtchang%redhat.com <devnull@localhost> | 2006-12-01 23:12:08 +0000 |
commit | 04a4926cd8c0c0d29bc8e3a68be0ff1cb893c1ea (patch) | |
tree | 4c0963210aa455dead2b5091fa2f171e8965342a | |
parent | ca2e65a2e5eefd96fa496da44ef3b599523d2dc3 (diff) | |
download | nspr-hg-04a4926cd8c0c0d29bc8e3a68be0ff1cb893c1ea.tar.gz |
Bugzilla Bug 353427: changed PL_FPrintError to use PR_ErrorToName to avoid
duplicating the error table. This fixed an array index out of bounds error
reported by Klockwork as a by-product. r=nelsonb.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH
-rw-r--r-- | lib/libc/src/plerror.c | 86 |
1 files changed, 3 insertions, 83 deletions
diff --git a/lib/libc/src/plerror.c b/lib/libc/src/plerror.c index 6aa25e9e..4941050c 100644 --- a/lib/libc/src/plerror.c +++ b/lib/libc/src/plerror.c @@ -48,98 +48,18 @@ PR_IMPLEMENT(void) PL_FPrintError(PRFileDesc *fd, const char *msg) { -static const char *tags[] = -{ - "PR_OUT_OF_MEMORY_ERROR", - "PR_BAD_DESCRIPTOR_ERROR", - "PR_WOULD_BLOCK_ERROR", - "PR_ACCESS_FAULT_ERROR", - "PR_INVALID_METHOD_ERROR", - "PR_ILLEGAL_ACCESS_ERROR", - "PR_UNKNOWN_ERROR", - "PR_PENDING_INTERRUPT_ERROR", - "PR_NOT_IMPLEMENTED_ERROR", - "PR_IO_ERROR", - "PR_IO_TIMEOUT_ERROR", - "PR_IO_PENDING_ERROR", - "PR_DIRECTORY_OPEN_ERROR", - "PR_INVALID_ARGUMENT_ERROR", - "PR_ADDRESS_NOT_AVAILABLE_ERROR", - "PR_ADDRESS_NOT_SUPPORTED_ERROR", - "PR_IS_CONNECTED_ERROR", - "PR_BAD_ADDRESS_ERROR", - "PR_ADDRESS_IN_USE_ERROR", - "PR_CONNECT_REFUSED_ERROR", - "PR_NETWORK_UNREACHABLE_ERROR", - "PR_CONNECT_TIMEOUT_ERROR", - "PR_NOT_CONNECTED_ERROR", - "PR_LOAD_LIBRARY_ERROR", - "PR_UNLOAD_LIBRARY_ERROR", - "PR_FIND_SYMBOL_ERROR", - "PR_INSUFFICIENT_RESOURCES_ERROR", - "PR_DIRECTORY_LOOKUP_ERROR", - "PR_TPD_RANGE_ERROR", - "PR_PROC_DESC_TABLE_FULL_ERROR", - "PR_SYS_DESC_TABLE_FULL_ERROR", - "PR_NOT_SOCKET_ERROR", - "PR_NOT_TCP_SOCKET_ERROR", - "PR_SOCKET_ADDRESS_IS_BOUND_ERROR", - "PR_NO_ACCESS_RIGHTS_ERROR", - "PR_OPERATION_NOT_SUPPORTED_ERROR", - "PR_PROTOCOL_NOT_SUPPORTED_ERROR", - "PR_REMOTE_FILE_ERROR", - "PR_BUFFER_OVERFLOW_ERROR", - "PR_CONNECT_RESET_ERROR", - "PR_RANGE_ERROR", - "PR_DEADLOCK_ERROR", - "PR_FILE_IS_LOCKED_ERROR", - "PR_FILE_TOO_BIG_ERROR", - "PR_NO_DEVICE_SPACE_ERROR", - "PR_PIPE_ERROR", - "PR_NO_SEEK_DEVICE_ERROR", - "PR_IS_DIRECTORY_ERROR", - "PR_LOOP_ERROR", - "PR_NAME_TOO_LONG_ERROR", - "PR_FILE_NOT_FOUND_ERROR", - "PR_NOT_DIRECTORY_ERROR", - "PR_READ_ONLY_FILESYSTEM_ERROR", - "PR_DIRECTORY_NOT_EMPTY_ERROR", - "PR_FILESYSTEM_MOUNTED_ERROR", - "PR_NOT_SAME_DEVICE_ERROR", - "PR_DIRECTORY_CORRUPTED_ERROR", - "PR_FILE_EXISTS_ERROR", - "PR_MAX_DIRECTORY_ENTRIES_ERROR", - "PR_INVALID_DEVICE_STATE_ERROR", - "PR_DEVICE_IS_LOCKED_ERROR", - "PR_NO_MORE_FILES_ERROR", - "PR_END_OF_FILE_ERROR", - "PR_FILE_SEEK_ERROR", - "PR_FILE_IS_BUSY_ERROR", - "<unused error code>", - "PR_IN_PROGRESS_ERROR", - "PR_ALREADY_INITIATED_ERROR", - "PR_GROUP_EMPTY_ERROR", - "PR_INVALID_STATE_ERROR", - "PR_NETWORK_DOWN_ERROR", - "PR_SOCKET_SHUTDOWN_ERROR", - "PR_CONNECT_ABORTED_ERROR", - "PR_HOST_UNREACHABLE_ERROR", - "PR_MAX_ERROR" -}; - PRErrorCode error = PR_GetError(); PRInt32 oserror = PR_GetOSError(); -PRIntn thoseIKnowAbout = sizeof(tags) / sizeof(char*); -PRIntn lastError = PR_NSPR_ERROR_BASE + thoseIKnowAbout; +const char *name = PR_ErrorToName(error); if (NULL != msg) PR_fprintf(fd, "%s: ", msg); - if ((error < PR_NSPR_ERROR_BASE) || (error > lastError)) + if (NULL == name) PR_fprintf( fd, " (%d)OUT OF RANGE, oserror = %d\n", error, oserror); else PR_fprintf( fd, "%s(%d), oserror = %d\n", - tags[error - PR_NSPR_ERROR_BASE], error, oserror); + name, error, oserror); } /* PL_FPrintError */ PR_IMPLEMENT(void) PL_PrintError(const char *msg) |