# 
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is the Netscape Portable Runtime (NSPR).
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998-2000
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****

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
