# 
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

et nspr -6000

ec PR_OUT_OF_MEMORY_ERROR,      "Memory allocation attempt failed"
ec PR_BAD_DESCRIPTOR_ERROR,     "Invalid file descriptor"
ec PR_WOULD_BLOCK_ERROR,        "The operation would have blocked"
ec PR_ACCESS_FAULT_ERROR,       "Invalid memory address argument"
ec PR_INVALID_METHOD_ERROR,     "Invalid function for file type"
ec PR_ILLEGAL_ACCESS_ERROR,     "Invalid memory address argument"
ec PR_UNKNOWN_ERROR,            "Some unknown error has occurred"
ec PR_PENDING_INTERRUPT_ERROR,"Operation interrupted by another thread"
ec PR_NOT_IMPLEMENTED_ERROR,    "function not implemented"
ec PR_IO_ERROR,                 "I/O function error"
ec PR_IO_TIMEOUT_ERROR,         "I/O operation timed out"
ec PR_IO_PENDING_ERROR,         "I/O operation on busy file descriptor"
ec PR_DIRECTORY_OPEN_ERROR,     "The directory could not be opened"
ec PR_INVALID_ARGUMENT_ERROR, "Invalid function argument"
ec PR_ADDRESS_NOT_AVAILABLE_ERROR, "Network address not available (in use?)"
ec PR_ADDRESS_NOT_SUPPORTED_ERROR, "Network address type not supported"
ec PR_IS_CONNECTED_ERROR,       "Already connected"
ec PR_BAD_ADDRESS_ERROR,        "Network address is invalid"
ec PR_ADDRESS_IN_USE_ERROR,     "Local Network address is in use"
ec PR_CONNECT_REFUSED_ERROR,    "Connection refused by peer"
ec PR_NETWORK_UNREACHABLE_ERROR, "Network address is presently unreachable"
ec PR_CONNECT_TIMEOUT_ERROR,    "Connection attempt timed out"
ec PR_NOT_CONNECTED_ERROR,      "Network file descriptor is not connected"
ec PR_LOAD_LIBRARY_ERROR,       "Failure to load dynamic library"
ec PR_UNLOAD_LIBRARY_ERROR,     "Failure to unload dynamic library"
ec PR_FIND_SYMBOL_ERROR,
"Symbol not found in any of the loaded dynamic libraries"
ec PR_INSUFFICIENT_RESOURCES_ERROR, "Insufficient system resources"
ec PR_DIRECTORY_LOOKUP_ERROR,
"A directory lookup on a network address has failed"
ec PR_TPD_RANGE_ERROR,
"Attempt to access a TPD key that is out of range"
ec PR_PROC_DESC_TABLE_FULL_ERROR, "Process open FD table is full"
ec PR_SYS_DESC_TABLE_FULL_ERROR, "System open FD table is full"
ec PR_NOT_SOCKET_ERROR,
"Network operation attempted on non-network file descriptor"
ec PR_NOT_TCP_SOCKET_ERROR,
"TCP-specific function attempted on a non-TCP file descriptor"
ec PR_SOCKET_ADDRESS_IS_BOUND_ERROR, "TCP file descriptor is already bound"
ec PR_NO_ACCESS_RIGHTS_ERROR, "Access Denied"
ec PR_OPERATION_NOT_SUPPORTED_ERROR,
"The requested operation is not supported by the platform"
ec PR_PROTOCOL_NOT_SUPPORTED_ERROR,
"The host operating system does not support the protocol requested"
ec PR_REMOTE_FILE_ERROR,        "Access to the remote file has been severed"
ec PR_BUFFER_OVERFLOW_ERROR,
"The value requested is too large to be stored in the data buffer provided"
ec PR_CONNECT_RESET_ERROR,      "TCP connection reset by peer"
ec PR_RANGE_ERROR,              "Unused"
ec PR_DEADLOCK_ERROR,   "The operation would have deadlocked"
ec PR_FILE_IS_LOCKED_ERROR,     "The file is already locked"
ec PR_FILE_TOO_BIG_ERROR,
"Write would result in file larger than the system allows"
ec PR_NO_DEVICE_SPACE_ERROR,    "The device for storing the file is full"
ec PR_PIPE_ERROR,               "Unused"
ec PR_NO_SEEK_DEVICE_ERROR,     "Unused"
ec PR_IS_DIRECTORY_ERROR,
"Cannot perform a normal file operation on a directory"
ec PR_LOOP_ERROR,               "Symbolic link loop"
ec PR_NAME_TOO_LONG_ERROR,      "File name is too long"
ec PR_FILE_NOT_FOUND_ERROR,     "File not found"
ec PR_NOT_DIRECTORY_ERROR,
"Cannot perform directory operation on a normal file"
ec PR_READ_ONLY_FILESYSTEM_ERROR,
"Cannot write to a read-only file system"
ec PR_DIRECTORY_NOT_EMPTY_ERROR,
"Cannot delete a directory that is not empty"
ec PR_FILESYSTEM_MOUNTED_ERROR,
"Cannot delete or rename a file object while the file system is busy"
ec PR_NOT_SAME_DEVICE_ERROR,
"Cannot rename a file to a file system on another device"
ec PR_DIRECTORY_CORRUPTED_ERROR,
"The directory object in the file system is corrupted"
ec PR_FILE_EXISTS_ERROR,
"Cannot create or rename a filename that already exists"
ec PR_MAX_DIRECTORY_ENTRIES_ERROR,
"Directory is full.  No additional filenames may be added"
ec PR_INVALID_DEVICE_STATE_ERROR,
"The required device was in an invalid state"
ec PR_DEVICE_IS_LOCKED_ERROR, "The device is locked"
ec PR_NO_MORE_FILES_ERROR,      "No more entries in the directory"
ec PR_END_OF_FILE_ERROR,        "Encountered end of file"
ec PR_FILE_SEEK_ERROR,  "Seek error"
ec PR_FILE_IS_BUSY_ERROR,       "The file is busy"
ec PR_OPERATION_ABORTED_ERROR,  "The I/O operation was aborted"
ec PR_IN_PROGRESS_ERROR,
"Operation is still in progress (probably a non-blocking connect)"
ec PR_ALREADY_INITIATED_ERROR,
"Operation has already been initiated (probably a non-blocking connect)"
ec PR_GROUP_EMPTY_ERROR,        "The wait group is empty"
ec PR_INVALID_STATE_ERROR,      "Object state improper for request"
ec PR_NETWORK_DOWN_ERROR,       "Network is down"
ec PR_SOCKET_SHUTDOWN_ERROR,    "Socket shutdown"
ec PR_CONNECT_ABORTED_ERROR,    "Connection aborted"
ec PR_HOST_UNREACHABLE_ERROR,   "Host is unreachable"
ec PR_LIBRARY_NOT_LOADED_ERROR, "The library is not loaded"
ec PR_CALL_ONCE_ERROR, "The one-time function was previously called and failed. Its error code is no longer available"

ec PR_MAX_ERROR,                "Placeholder for the end of the list"

end
