/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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/. */

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

static const struct PRErrorTable et = { text, "prerr", -6000L, 77 };

void nspr_InitializePRErrorTable(void) {
    PR_ErrorInstallTable(&et);
}
