Landing of miscellaneous changes, including the new error code to

string function contributed by John Myers <jgmyers@netscape.com>.
This commit is contained in:
wtc%netscape.com 1999-02-26 20:41:06 +00:00
Родитель cbd5277f58
Коммит cf5a813894
18 изменённых файлов: 914 добавлений и 150 удалений

Просмотреть файл

@ -74,6 +74,17 @@ ifeq ($(OS_ARCH), IRIX)
LDOPTS += -rpath $(PWD)/$(DIST)/lib
endif
ifeq ($(OS_ARCH), Linux)
ifeq ($(OS_RELEASE), 1.2)
EXTRA_LIBS = -ldl
else
LDOPTS += -Xlinker -rpath $(PWD)/$(DIST)/lib
ifeq ($(USE_PTHREADS),1)
EXTRA_LIBS = -lpthread
endif
endif
endif
ifeq ($(OS_ARCH), OSF1)
LDOPTS += -rpath $(PWD)/$(DIST)/lib -lpthread
endif

Просмотреть файл

@ -11,7 +11,9 @@ prcountr.h
prcvar.h
prdtoa.h
prenv.h
prerr.h
prerror.h
prerrorplugin.h
prinet.h
prinit.h
prinrval.h
@ -28,6 +30,7 @@ prolock.h
prpdce.h
prprf.h
prproces.h
prrwlock.h
prsystem.h
prthread.h
prtime.h

Просмотреть файл

@ -27,6 +27,7 @@
#include "prdtoa.h"
#include "prenv.h"
#include "prerror.h"
#include "prerrorplugin.h"
#include "prinet.h"
#include "prinit.h"
#include "prinrval.h"
@ -41,6 +42,7 @@
#include "prnetdb.h"
#include "prprf.h"
#include "prproces.h"
#include "prrwlock.h"
#include "prsystem.h"
#include "prthread.h"
#include "prtime.h"

105
nsprpub/pr/include/prerr.h Normal file
Просмотреть файл

@ -0,0 +1,105 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef prerr_h___
#define prerr_h___
/*
*
* prerr.h
* This file is automatically generated; please do not edit it.
*/
#define PR_OUT_OF_MEMORY_ERROR (-6000L)
#define PR_BAD_DESCRIPTOR_ERROR (-5999L)
#define PR_WOULD_BLOCK_ERROR (-5998L)
#define PR_ACCESS_FAULT_ERROR (-5997L)
#define PR_INVALID_METHOD_ERROR (-5996L)
#define PR_ILLEGAL_ACCESS_ERROR (-5995L)
#define PR_UNKNOWN_ERROR (-5994L)
#define PR_PENDING_INTERRUPT_ERROR (-5993L)
#define PR_NOT_IMPLEMENTED_ERROR (-5992L)
#define PR_IO_ERROR (-5991L)
#define PR_IO_TIMEOUT_ERROR (-5990L)
#define PR_IO_PENDING_ERROR (-5989L)
#define PR_DIRECTORY_OPEN_ERROR (-5988L)
#define PR_INVALID_ARGUMENT_ERROR (-5987L)
#define PR_ADDRESS_NOT_AVAILABLE_ERROR (-5986L)
#define PR_ADDRESS_NOT_SUPPORTED_ERROR (-5985L)
#define PR_IS_CONNECTED_ERROR (-5984L)
#define PR_BAD_ADDRESS_ERROR (-5983L)
#define PR_ADDRESS_IN_USE_ERROR (-5982L)
#define PR_CONNECT_REFUSED_ERROR (-5981L)
#define PR_NETWORK_UNREACHABLE_ERROR (-5980L)
#define PR_CONNECT_TIMEOUT_ERROR (-5979L)
#define PR_NOT_CONNECTED_ERROR (-5978L)
#define PR_LOAD_LIBRARY_ERROR (-5977L)
#define PR_UNLOAD_LIBRARY_ERROR (-5976L)
#define PR_FIND_SYMBOL_ERROR (-5975L)
#define PR_INSUFFICIENT_RESOURCES_ERROR (-5974L)
#define PR_DIRECTORY_LOOKUP_ERROR (-5973L)
#define PR_TPD_RANGE_ERROR (-5972L)
#define PR_PROC_DESC_TABLE_FULL_ERROR (-5971L)
#define PR_SYS_DESC_TABLE_FULL_ERROR (-5970L)
#define PR_NOT_SOCKET_ERROR (-5969L)
#define PR_NOT_TCP_SOCKET_ERROR (-5968L)
#define PR_SOCKET_ADDRESS_IS_BOUND_ERROR (-5967L)
#define PR_NO_ACCESS_RIGHTS_ERROR (-5966L)
#define PR_OPERATION_NOT_SUPPORTED_ERROR (-5965L)
#define PR_PROTOCOL_NOT_SUPPORTED_ERROR (-5964L)
#define PR_REMOTE_FILE_ERROR (-5963L)
#define PR_BUFFER_OVERFLOW_ERROR (-5962L)
#define PR_CONNECT_RESET_ERROR (-5961L)
#define PR_RANGE_ERROR (-5960L)
#define PR_DEADLOCK_ERROR (-5959L)
#define PR_FILE_IS_LOCKED_ERROR (-5958L)
#define PR_FILE_TOO_BIG_ERROR (-5957L)
#define PR_NO_DEVICE_SPACE_ERROR (-5956L)
#define PR_PIPE_ERROR (-5955L)
#define PR_NO_SEEK_DEVICE_ERROR (-5954L)
#define PR_IS_DIRECTORY_ERROR (-5953L)
#define PR_LOOP_ERROR (-5952L)
#define PR_NAME_TOO_LONG_ERROR (-5951L)
#define PR_FILE_NOT_FOUND_ERROR (-5950L)
#define PR_NOT_DIRECTORY_ERROR (-5949L)
#define PR_READ_ONLY_FILESYSTEM_ERROR (-5948L)
#define PR_DIRECTORY_NOT_EMPTY_ERROR (-5947L)
#define PR_FILESYSTEM_MOUNTED_ERROR (-5946L)
#define PR_NOT_SAME_DEVICE_ERROR (-5945L)
#define PR_DIRECTORY_CORRUPTED_ERROR (-5944L)
#define PR_FILE_EXISTS_ERROR (-5943L)
#define PR_MAX_DIRECTORY_ENTRIES_ERROR (-5942L)
#define PR_INVALID_DEVICE_STATE_ERROR (-5941L)
#define PR_DEVICE_IS_LOCKED_ERROR (-5940L)
#define PR_NO_MORE_FILES_ERROR (-5939L)
#define PR_END_OF_FILE_ERROR (-5938L)
#define PR_FILE_SEEK_ERROR (-5937L)
#define PR_FILE_IS_BUSY_ERROR (-5936L)
#define PR_RESERVED_ERROR (-5935L)
#define PR_IN_PROGRESS_ERROR (-5934L)
#define PR_ALREADY_INITIATED_ERROR (-5933L)
#define PR_GROUP_EMPTY_ERROR (-5932L)
#define PR_INVALID_STATE_ERROR (-5931L)
#define PR_NETWORK_DOWN_ERROR (-5930L)
#define PR_SOCKET_SHUTDOWN_ERROR (-5929L)
#define PR_CONNECT_ABORTED_ERROR (-5928L)
#define PR_HOST_UNREACHABLE_ERROR (-5927L)
#define PR_MAX_ERROR (-5926L)
extern void pr_init_error_table_nspr(void);
#define ERROR_TABLE_BASE_nspr (-6000L)
#endif /* prerr_h___ */

Просмотреть файл

@ -27,132 +27,7 @@ typedef PRInt32 PRErrorCode;
#define PR_NSPR_ERROR_BASE -6000
#define PR_OUT_OF_MEMORY_ERROR PR_NSPR_ERROR_BASE + 0
/* Insufficient memory to perform request */
#define PR_BAD_DESCRIPTOR_ERROR PR_NSPR_ERROR_BASE + 1
/* the file descriptor used as an argument
in the function is invalid; either it has
been deleted or otherwise corrupted. */
#define PR_WOULD_BLOCK_ERROR PR_NSPR_ERROR_BASE + 2
/* The operation would have blocked and that
is in conflict with the semantics that
have been established. */
#define PR_ACCESS_FAULT_ERROR PR_NSPR_ERROR_BASE + 3
#define PR_INVALID_METHOD_ERROR PR_NSPR_ERROR_BASE + 4
/* The method being called is invalid for
the type of file descriptor used. */
#define PR_ILLEGAL_ACCESS_ERROR PR_NSPR_ERROR_BASE + 5
#define PR_UNKNOWN_ERROR PR_NSPR_ERROR_BASE + 6
/* Some unknown error has occured */
#define PR_PENDING_INTERRUPT_ERROR PR_NSPR_ERROR_BASE + 7
/* The operation terminated because another
thread has interrupted it (PR_Interrupt) */
#define PR_NOT_IMPLEMENTED_ERROR PR_NSPR_ERROR_BASE + 8
/* The function called has not been
implemented. */
#define PR_IO_ERROR PR_NSPR_ERROR_BASE + 9
#define PR_IO_TIMEOUT_ERROR PR_NSPR_ERROR_BASE + 10
/* The I/O operation has not completed in
the time specified for the function. */
#define PR_IO_PENDING_ERROR PR_NSPR_ERROR_BASE + 11
/* An I/O operation has been attempted on
a file descriptor that is currently
busy with another operation. */
#define PR_DIRECTORY_OPEN_ERROR PR_NSPR_ERROR_BASE + 12
/* The directory could not be opened. */
#define PR_INVALID_ARGUMENT_ERROR PR_NSPR_ERROR_BASE + 13
/* One or more of the arguments to the
function is invalid. */
#define PR_ADDRESS_NOT_AVAILABLE_ERROR PR_NSPR_ERROR_BASE + 14
/* The network address (PRNetAddr) is not
available (probably in use). */
#define PR_ADDRESS_NOT_SUPPORTED_ERROR PR_NSPR_ERROR_BASE + 15
#define PR_IS_CONNECTED_ERROR PR_NSPR_ERROR_BASE + 16
/* An attempt to connect on an already
connected network file descriptor. */
#define PR_BAD_ADDRESS_ERROR PR_NSPR_ERROR_BASE + 17
/* The network address specified is invalid
(as reported by the network). */
#define PR_ADDRESS_IN_USE_ERROR PR_NSPR_ERROR_BASE + 18
#define PR_CONNECT_REFUSED_ERROR PR_NSPR_ERROR_BASE + 19
/* The peer has refused to allow the connec-
tion to be established. */
#define PR_NETWORK_UNREACHABLE_ERROR PR_NSPR_ERROR_BASE + 20
/* The network address specifies a host
that is unreachable (perhaps temporary). */
#define PR_CONNECT_TIMEOUT_ERROR PR_NSPR_ERROR_BASE + 21
/* The connection attempt did not complete
in a reasonable period of time. */
#define PR_NOT_CONNECTED_ERROR PR_NSPR_ERROR_BASE + 22
/* The call attempted to use connected
sematics on a network file descriptor
that was not connected. */
#define PR_LOAD_LIBRARY_ERROR PR_NSPR_ERROR_BASE + 23
/* Some sort of failure attempting to load
a dynamic library. */
#define PR_UNLOAD_LIBRARY_ERROR PR_NSPR_ERROR_BASE + 24
/* Some sort of failure attempting to unload
a dynamic library. */
#define PR_FIND_SYMBOL_ERROR PR_NSPR_ERROR_BASE + 25
/* Dynamic library symbol could not be found
in any of the available libraries. */
#define PR_INSUFFICIENT_RESOURCES_ERROR PR_NSPR_ERROR_BASE + 26
/* There are insufficient system resources
to process the request. */
#define PR_DIRECTORY_LOOKUP_ERROR PR_NSPR_ERROR_BASE + 27
#define PR_TPD_RANGE_ERROR PR_NSPR_ERROR_BASE + 28
/* Attempt to access a TPD key that is beyond
any key that has been allocated to the
process. */
#define PR_PROC_DESC_TABLE_FULL_ERROR PR_NSPR_ERROR_BASE + 29
#define PR_SYS_DESC_TABLE_FULL_ERROR PR_NSPR_ERROR_BASE + 30
#define PR_NOT_SOCKET_ERROR PR_NSPR_ERROR_BASE + 31
#define PR_NOT_TCP_SOCKET_ERROR PR_NSPR_ERROR_BASE + 32
#define PR_SOCKET_ADDRESS_IS_BOUND_ERROR PR_NSPR_ERROR_BASE + 33
#define PR_NO_ACCESS_RIGHTS_ERROR PR_NSPR_ERROR_BASE + 34
#define PR_OPERATION_NOT_SUPPORTED_ERROR PR_NSPR_ERROR_BASE + 35
#define PR_PROTOCOL_NOT_SUPPORTED_ERROR PR_NSPR_ERROR_BASE + 36
#define PR_REMOTE_FILE_ERROR PR_NSPR_ERROR_BASE + 37
#define PR_BUFFER_OVERFLOW_ERROR PR_NSPR_ERROR_BASE + 38
#define PR_CONNECT_RESET_ERROR PR_NSPR_ERROR_BASE + 39
#define PR_RANGE_ERROR PR_NSPR_ERROR_BASE + 40
#define PR_DEADLOCK_ERROR PR_NSPR_ERROR_BASE + 41
#define PR_FILE_IS_LOCKED_ERROR PR_NSPR_ERROR_BASE + 42
#define PR_FILE_TOO_BIG_ERROR PR_NSPR_ERROR_BASE + 43
#define PR_NO_DEVICE_SPACE_ERROR PR_NSPR_ERROR_BASE + 44
#define PR_PIPE_ERROR PR_NSPR_ERROR_BASE + 45
#define PR_NO_SEEK_DEVICE_ERROR PR_NSPR_ERROR_BASE + 46
#define PR_IS_DIRECTORY_ERROR PR_NSPR_ERROR_BASE + 47
#define PR_LOOP_ERROR PR_NSPR_ERROR_BASE + 48
#define PR_NAME_TOO_LONG_ERROR PR_NSPR_ERROR_BASE + 49
#define PR_FILE_NOT_FOUND_ERROR PR_NSPR_ERROR_BASE + 50
#define PR_NOT_DIRECTORY_ERROR PR_NSPR_ERROR_BASE + 51
#define PR_READ_ONLY_FILESYSTEM_ERROR PR_NSPR_ERROR_BASE + 52
#define PR_DIRECTORY_NOT_EMPTY_ERROR PR_NSPR_ERROR_BASE + 53
#define PR_FILESYSTEM_MOUNTED_ERROR PR_NSPR_ERROR_BASE + 54
#define PR_NOT_SAME_DEVICE_ERROR PR_NSPR_ERROR_BASE + 55
#define PR_DIRECTORY_CORRUPTED_ERROR PR_NSPR_ERROR_BASE + 56
#define PR_FILE_EXISTS_ERROR PR_NSPR_ERROR_BASE + 57
#define PR_MAX_DIRECTORY_ENTRIES_ERROR PR_NSPR_ERROR_BASE + 58
#define PR_INVALID_DEVICE_STATE_ERROR PR_NSPR_ERROR_BASE + 59
#define PR_DEVICE_IS_LOCKED_ERROR PR_NSPR_ERROR_BASE + 60
#define PR_NO_MORE_FILES_ERROR PR_NSPR_ERROR_BASE + 61
#define PR_END_OF_FILE_ERROR PR_NSPR_ERROR_BASE + 62
#define PR_FILE_SEEK_ERROR PR_NSPR_ERROR_BASE + 63
#define PR_FILE_IS_BUSY_ERROR PR_NSPR_ERROR_BASE + 64
#define PR_IN_PROGRESS_ERROR PR_NSPR_ERROR_BASE + 66
#define PR_ALREADY_INITIATED_ERROR PR_NSPR_ERROR_BASE + 67
#define PR_GROUP_EMPTY_ERROR PR_NSPR_ERROR_BASE + 68
#define PR_INVALID_STATE_ERROR PR_NSPR_ERROR_BASE + 69
#define PR_NETWORK_DOWN_ERROR PR_NSPR_ERROR_BASE + 70
#define PR_SOCKET_SHUTDOWN_ERROR PR_NSPR_ERROR_BASE + 71
#define PR_CONNECT_ABORTED_ERROR PR_NSPR_ERROR_BASE + 72
#define PR_HOST_UNREACHABLE_ERROR PR_NSPR_ERROR_BASE + 73
#define PR_MAX_ERROR PR_NSPR_ERROR_BASE + 74
/* Place holder for the end of the list */
#include "prerr.h"
/*
** Set error will preserve an error condition within a thread context.
@ -200,6 +75,111 @@ PR_EXTERN(PRInt32) PR_GetErrorTextLength(void);
PR_EXTERN(PRInt32) PR_GetErrorText(char *text);
/*
Copyright (C) 1987, 1988 Student Information Processing Board of the
Massachusetts Institute of Technology.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted, provided
that the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the names of M.I.T. and the M.I.T. S.I.P.B. not be
used in advertising or publicity pertaining to distribution of the software
without specific, written prior permission. M.I.T. and the M.I.T. S.I.P.B.
make no representations about the suitability of this software for any
purpose. It is provided "as is" without express or implied warranty.
*/
/*
** Description: Localizable error code to string function.
**
**
** NSPR provides a mechanism for converting an error code to a descriptive
** string, in a caller-specified language.
**
** Error codes themselves are 32 bit (signed) integers. Typically, the high
** order 24 bits are an identifier of which error table the error code is
** from, and the low order 8 bits are a sequential error number within
** the table. NSPR supports error tables whose first error code is not
** a multiple of 256, such error code assignments should be avoided when
** possible.
**
** Error table 0 is defined to match the UNIX system call error table
** (sys_errlist); this allows errno values to be used directly in the
** library. Other error table numbers are typically formed by compacting
** together the first four characters of the error table name. The mapping
** between characters in the name and numeric values in the error code are
** defined in a system-independent fashion, so that two systems that can
** pass integral values between them can reliably pass error codes without
** loss of meaning; this should work even if the character sets used are not
** the same. (However, if this is to be done, error table 0 should be avoided,
** since the local system call error tables may differ.)
**
** Libraries defining error codes need only provide a table mapping error
** code numbers to names and default English descriptions, calling a routine
** to make the table ``known'' to NSPR library. Any error code the library
** generates can be converted to the corresponding error message. There is
** also a default format for error codes accidentally returned before making
** the table known, which is of the form "unknown code foo 32", where "foo"
** would be the name of the table.
**
** Normally, the error code conversion routine only supports the languages
** "i-default" and "en", returning the error-table-provided English
** description for both languages. The application may provide a
** localization plugin, allowing support for additional languages.
**
**/
/**********************************************************************/
/************************* TYPES AND CONSTANTS ************************/
/**********************************************************************/
/*
* PRLanguageCode --
*
* NSPR represents a language code as a non-negative integer.
* Languages 0 is always "i-default" the language you get without
* explicit negotiation. Language 1 is always "en", English
* which has been explicitly negotiated. Additional language
* codes are defined by an application-provided localization plugin.
*/
typedef PRInt32 PRLanguageCode;
#define PR_LANGUAGE_I_DEFAULT 0 /* i-default, the default language */
#define PR_LANGUAGE_EN 1 /* English, explicitly negotiated */
/**********************************************************************/
/****************************** FUNCTIONS *****************************/
/**********************************************************************/
/***********************************************************************
** FUNCTION: PR_ErrorTableToString
** DESCRIPTION:
** Returns the UTF-8 message for an error code in
** the requested language. May return the message
** in the default language if a translation in the requested
** language is not available. The returned string is
** valid for the duration of the process. Never returns NULL.
**
***********************************************************************/
PR_EXTERN(const char *) PR_ErrorToString(PRErrorCode code,
PRLanguageCode language);
/***********************************************************************
** FUNCTION: PR_ErrorLanguages
** DESCRIPTION:
** Returns the RFC 1766 language tags for the language
** codes PR_ErrorToString() supports. The returned array is valid
** for the duration of the process. Never returns NULL. The first
** item in the returned array is the language tag for PRLanguageCode 0,
** the second is for PRLanguageCode 1, and so on. The array is terminated
** with a null pointer.
**
***********************************************************************/
/*
* Return the language codes for supported languages.
*/
PR_EXTERN(const char * const *) PR_ErrorLanguages(void);
PR_END_EXTERN_C
#endif /* prerror_h___ */

Просмотреть файл

@ -0,0 +1,124 @@
/*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef prerrorplugin_h___
#define prerrorplugin_h___
#include "prerror.h"
PR_BEGIN_EXTERN_C
/**********************************************************************/
/************************* TYPES AND CONSTANTS ************************/
/**********************************************************************/
/*
* struct PRErrorTable --
*
* An error table, provided by a library.
*/
struct PRErrorTable {
struct PRErrorMessage {
const char * const name; /* Macro name for error */
const char * const en_text; /* default english text */
} const * msgs; /* Array of error information */
const char *name; /* Name of error table source */
PRErrorCode base; /* Error code for first error in table */
int n_msgs; /* Number of codes in table */
};
/*
* struct PRErrorPluginRock --
*
* A rock, under which the localization plugin may store information
* that is private to itself.
*/
struct PRErrorPluginRock;
/*
* struct PRErrorPluginTableRock --
*
* A rock, under which the localization plugin may store information,
* associated with an error table, that is private to itself.
*/
struct PRErrorPluginTableRock;
/*
* PRErrorPluginLookupFn --
*
* A function of PRErrorPluginLookupFn type is a localization
* plugin callback which converts an error code into a description
* in the requested language. The callback is provided the
* appropriate error table, rock, and table rock. The callback
* returns the appropriate UTF-8 encoded description, or NULL if no
* description can be found.
*/
typedef const char *
PRErrorPluginLookupFn(PRErrorCode code, PRLanguageCode language,
const struct PRErrorTable *table,
struct PRErrorPluginRock *rock,
struct PRErrorPluginTableRock *table_rock);
/*
* PRErrorPluginNewtableFn --
*
* A function PRErrorPluginNewtableFn type is a localization plugin
* callback which is called once with each error table registered
* with NSPR. The callback is provided with the error table and
* the plugin rock. The callback returns any table rock it wishes
* to associate with the error table. Does not need to be thread
* safe.
*/
typedef struct PRErrorPluginTableRock *
PRErrorPluginNewtableFn(const struct PRErrorTable *table,
struct PRErrorPluginRock *rock);
/**********************************************************************/
/****************************** FUNCTIONS *****************************/
/**********************************************************************/
/***********************************************************************
** FUNCTION: PR_ErrorInstallTable
** DESCRIPTION:
** Registers an error table with NSPR. Must be done exactly once per
** table.
** NOT THREAD SAFE!
**
***********************************************************************/
PR_EXTERN(PRErrorCode) PR_ErrorInstallTable(const struct PRErrorTable *table);
/***********************************************************************
** FUNCTION: PR_ErrorInstallPlugin
** DESCRIPTION:
** Registers an error localization plugin with NSPR. May be called
** at most one time. `languages' contains the language codes supported
** by this plugin. Languages 0 and 1 must be "i-default" and "en"
** respectively. `lookup' and `newtable' contain pointers to
** the plugin callback functions. `rock' contains any information
** private to the plugin functions.
** NOT THREAD SAFE!
***********************************************************************/
PR_EXTERN(void) PR_ErrorInstallPlugin(const char * const * languages,
PRErrorPluginLookupFn *lookup,
PRErrorPluginNewtableFn *newtable,
struct PRErrorPluginRock *rock);
PR_END_EXTERN_C
#endif /* prerrorplugin_h___ */

Просмотреть файл

@ -177,7 +177,9 @@ OBJS = \
misc/$(OBJDIR)/prcountr.$(OBJ_SUFFIX) \
misc/$(OBJDIR)/prdtoa.$(OBJ_SUFFIX) \
misc/$(OBJDIR)/prenv.$(OBJ_SUFFIX) \
misc/$(OBJDIR)/prerr.$(OBJ_SUFFIX) \
misc/$(OBJDIR)/prerror.$(OBJ_SUFFIX) \
misc/$(OBJDIR)/prerrortable.$(OBJ_SUFFIX) \
misc/$(OBJDIR)/prinit.$(OBJ_SUFFIX) \
misc/$(OBJDIR)/prinrval.$(OBJ_SUFFIX) \
misc/$(OBJDIR)/prlog2.$(OBJ_SUFFIX) \

Просмотреть файл

@ -17,6 +17,10 @@
*/
#if defined(_PR_PTHREADS)
/* Some compilers don't like an empty source file. */
static int dummy = 0;
#else /* defined(_PR_PTHREADS) */
#include "primpl.h"

Просмотреть файл

@ -34,7 +34,9 @@ CSRCS = \
prcountr.c \
prdtoa.c \
prenv.c \
prerr.c \
prerror.c \
prerrortable.c \
prinit.c \
prinrval.c \
prlog2.c \
@ -61,6 +63,9 @@ $(OBJDIR)/prdtoa.o:
$(CC) -o $@ -c $(filter-out -O, $(CFLAGS)) prdtoa.c
endif
build_prerr : prerr.et
perl compile-et.pl prerr.et
export:: $(TARGETS)
install:: export

Просмотреть файл

@ -0,0 +1,115 @@
#!/usr/bin/perl
# usage: compile-et input.et
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL. You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
sub header
{
local($filename, $comment) = @_;
<<EOF
$comment
$comment $filename
$comment This file is automatically generated; please do not edit it.
EOF
}
sub table_base
{
local($name) = @_;
local($base) = 0;
for ($i = 0; $i < length($name); $i++) {
$base *= 64;
$base += index("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_", substr($name, $i, 1)) + 1;
}
$base -= 0x1000000 if ($base > 0x7fffff);
$base*256;
}
sub code {
local($macro, $text) = @_;
$code = $table_base + $table_item_count;
printf H "#define %-40s (%dL)\n", $macro, $code;
print C "\t{\"", $macro, "\", \"", $text, "\"},\n";
print PROPERTIES $macro, "=", $text, "\n";
$table_item_count++;
}
$filename = $ARGV[0];
open(INPUT, "< $filename") || die "Can't read $filename: $!\n";
$base = "$filename";
$base =~ s/\.et$//;
$base =~ s#.*/##;
open(H, "> ${base}.h") || die "Can't write ${base}.h\n";
open(C, "> ${base}.c") || die "Can't write ${base}.c\n";
open(PROPERTIES, "> ${base}.properties") || die "Can't write ${base}.properties\n";
print H "/*\n", &header("${base}.h", " *"), " */\n";
print C "/*\n", &header("${base}.c", " *"), " */\n";
print PROPERTIES &header("${base}.properties", "#");
$skipone = 0;
while ($_ = <INPUT>) {
next if /^#/;
if (/^[ \t]*(error_table|et)[ \t]+([a-zA-Z][a-zA-Z0-9_]+) *(-?[0-9]*)/) {
$table_name = $2;
if ($3) {
$table_base = $3;
}
else {
$table_base = &table_base($table_name);
}
$table_item_count = 0;
print C "#include \"prerrorplugin.h\"\n";
print C "static const struct PRErrorMessage text[] = {\n";
}
elsif (/^[ \t]*(error_code|ec)[ \t]+([A-Z_0-9]+),[ \t]*$/) {
$skipone = 1;
$macro = $2;
}
elsif (/^[ \t]*(error_code|ec)[ \t]+([A-Z_0-9]+),[ \t]*"(.*)"[ \t]*$/) {
&code($2, $3);
}
elsif ($skipone && /^[ \t]*"(.*)"[ \t]*$/) {
&code($macro, $1);
}
}
print H "extern void pr_init_error_table_", $table_name, "(void);\n";
printf H "#define ERROR_TABLE_BASE_%s (%dL)\n", $table_name, $table_base;
print C "\t{0, 0}\n";
print C "};\n\n";
printf C "static const struct PRErrorTable et = { text, \"%s\", %dL, %d };\n",
$base, $table_base, $table_item_count;
print C "\n";
print C "void pr_init_error_table_", $table_name, "() {\n";
print C " PR_ErrorInstallTable(&et);\n";
print C "}\n";
0;

Просмотреть файл

@ -0,0 +1,90 @@
/*
*
* prerr.c
* This file is automatically generated; please do not edit it.
*/
#include "prerrorplugin.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_RESERVED_ERROR", "Reserved Error Code"},
{"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_MAX_ERROR", "Placeholder for the end of the list"},
{0, 0}
};
static const struct PRErrorTable et = { text, "prerr", -6000L, 75 };
void pr_init_error_table_nspr() {
PR_ErrorInstallTable(&et);
}

Просмотреть файл

@ -0,0 +1,116 @@
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL. You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
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_RESERVED_ERROR, "Reserved Error Code"
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_MAX_ERROR, "Placeholder for the end of the list"
end

Просмотреть файл

@ -0,0 +1,201 @@
/*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
Copyright 1987, 1988 by the Student Information Processing Board
of the Massachusetts Institute of Technology
Permission to use, copy, modify, and distribute this software
and its documentation for any purpose and without fee is
hereby granted, provided that the above copyright notice
appear in all copies and that both that copyright notice and
this permission notice appear in supporting documentation,
and that the names of M.I.T. and the M.I.T. S.I.P.B. not be
used in advertising or publicity pertaining to distribution
of the software without specific, written prior permission.
M.I.T. and the M.I.T. S.I.P.B. make no representations about
the suitability of this software for any purpose. It is
provided "as is" without express or implied warranty.
*/
#include <string.h>
#include <assert.h>
#include <errno.h>
#include "prmem.h"
#include "prerror.h"
#include "prerrorplugin.h"
#define ERRCODE_RANGE 8 /* # of bits to shift table number */
#define BITS_PER_CHAR 6 /* # bits to shift per character in name */
#ifdef NEED_SYS_ERRLIST
extern char const * const sys_errlist[];
extern const int sys_nerr;
#endif
/* List of error tables */
struct PRErrorTableList {
struct PRErrorTableList *next;
const struct PRErrorTable *table;
struct PRErrorPluginTableRock *table_rock;
};
static struct PRErrorTableList * Table_List = (struct PRErrorTableList *) NULL;
/* Supported languages */
static const char * default_languages[] = { "i-default", "en", 0 };
static const char * const * plugin_languages = default_languages;
/* Plugin info */
static struct PRErrorPluginRock *plugin_rock = 0;
static PRErrorPluginLookupFn *plugin_lookup = 0;
static PRErrorPluginNewtableFn *plugin_newtable = 0;
static const char char_set[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
static const char *
error_table_name (PRErrorCode num)
{
static char buf[6]; /* only used if internal code problems exist */
long ch;
int i;
char *p;
/* num = aa aaa abb bbb bcc ccc cdd ddd d?? ??? ??? */
p = buf;
num >>= ERRCODE_RANGE;
/* num = ?? ??? ??? aaa aaa bbb bbb ccc ccc ddd ddd */
num &= 077777777;
/* num = 00 000 000 aaa aaa bbb bbb ccc ccc ddd ddd */
for (i = 4; i >= 0; i--) {
ch = (num >> BITS_PER_CHAR * i) & ((1 << BITS_PER_CHAR) - 1);
if (ch != 0)
*p++ = char_set[ch-1];
}
*p = '\0';
return(buf);
}
PR_IMPLEMENT(const char *)
PR_ErrorToString(PRErrorCode code, PRLanguageCode language)
{
/* static buffer only used if code is using inconsistent error message
* numbers, so just ignore the possible thread contention
*/
static char buffer[25];
const char *msg;
int offset;
PRErrorCode table_num;
struct PRErrorTableList *et;
int started = 0;
char *cp;
for (et = Table_List; et; et = et->next) {
if (et->table->base <= code &&
et->table->base + et->table->n_msgs > code) {
/* This is the right table */
if (plugin_lookup) {
msg = plugin_lookup(code, language, et->table,
plugin_rock, et->table_rock);
if (msg) return msg;
}
return(et->table->msgs[code - et->table->base].en_text);
}
}
if (code >= 0 && code < 256) {
return strerror(code);
}
offset = (int) (code & ((1<<ERRCODE_RANGE)-1));
table_num = code - offset;
strcpy (buffer, "Unknown code ");
if (table_num) {
strcat(buffer, error_table_name (table_num));
strcat(buffer, " ");
}
for (cp = buffer; *cp; cp++)
;
if (offset >= 100) {
*cp++ = (char)('0' + offset / 100);
offset %= 100;
started++;
}
if (started || offset >= 10) {
*cp++ = (char)('0' + offset / 10);
offset %= 10;
}
*cp++ = (char)('0' + offset);
*cp = '\0';
return(buffer);
}
PR_IMPLEMENT(const char * const *)
PR_ErrorLanguages(void)
{
return plugin_languages;
}
PR_IMPLEMENT(PRErrorCode)
PR_ErrorInstallTable(const struct PRErrorTable *table)
{
struct PRErrorTableList * new_et;
new_et = (struct PRErrorTableList *)
PR_Malloc(sizeof(struct PRErrorTableList));
if (!new_et)
return errno; /* oops */
new_et->table = table;
if (plugin_newtable) {
new_et->table_rock = plugin_newtable(table, plugin_rock);
} else {
new_et->table_rock = 0;
}
new_et->next = Table_List;
Table_List = new_et;
return 0;
}
PR_IMPLEMENT(void)
PR_ErrorInstallPlugin(const char * const * languages,
PRErrorPluginLookupFn *lookup,
PRErrorPluginNewtableFn *newtable,
struct PRErrorPluginRock *rock)
{
struct PRErrorTableList *et;
assert(strcmp(languages[0], "i-default") == 0);
assert(strcmp(languages[1], "en") == 0);
plugin_languages = languages;
plugin_lookup = lookup;
plugin_newtable = newtable;
plugin_rock = rock;
if (plugin_newtable) {
for (et = Table_List; et; et = et->next) {
et->table_rock = plugin_newtable(et->table, plugin_rock);
}
}
}

Просмотреть файл

@ -150,6 +150,8 @@ static void _PR_InitStuff(void)
_PR_InitDtoa();
_PR_InitMW();
pr_init_error_table_nspr();
_PR_MD_FINAL_INIT();
}

Просмотреть файл

@ -342,7 +342,12 @@ static PRThread* _PR_CreateThread(
PR_Unlock(pt_book.ml);
if (thred->state & PT_THREAD_BOUND) {
/*
* should a Posix feature test be used here?
*/
#ifdef PTHREAD_SCOPE_SYSTEM
rv = pthread_attr_setscope(&tattr, PTHREAD_SCOPE_SYSTEM);
#endif
}
/*
* We pass a pointer to a local copy (instead of thred->id)

Просмотреть файл

@ -17,7 +17,6 @@
*/
#include "nspr.h"
#include "prrwlock.h"
#include <string.h>
@ -46,9 +45,9 @@ struct PRRWLock {
#ifdef _PR_RWLOCK_RANK_ORDER_DEBUG
static PRUintn ps_thread_rwlock_initialized;
static PRUintn ps_thread_rwlock; /* TPD key for lock stack */
static PRUintn ps_thread_rwlock_alloc_failed;
static PRUintn pr_thread_rwlock_initialized;
static PRUintn pr_thread_rwlock; /* TPD key for lock stack */
static PRUintn pr_thread_rwlock_alloc_failed;
#define _PR_RWLOCK_RANK_ORDER_LIMIT 10
@ -291,7 +290,7 @@ PRThread *me = PR_GetCurrentThread();
* per-thread list, which is anchored off a thread-private data key.
*/
void
static void
_PR_SET_THREAD_RWLOCK_RANK(PRThread *me, PRRWLock *rwlock)
{
thread_rwlock_stack *lock_stack;
@ -300,15 +299,15 @@ PRStatus rv;
/*
* allocated thread-private-data for rwlock list, if not already allocated
*/
if (!ps_thread_rwlock_initialized) {
if (!pr_thread_rwlock_initialized) {
/*
* allocate tpd, only if not failed already
*/
if (!ps_thread_rwlock_alloc_failed) {
if (PR_NewThreadPrivateIndex(&ps_thread_rwlock,
if (!pr_thread_rwlock_alloc_failed) {
if (PR_NewThreadPrivateIndex(&pr_thread_rwlock,
_PR_RELEASE_LOCK_STACK)
== PR_FAILURE) {
ps_thread_rwlock_alloc_failed = 1;
pr_thread_rwlock_alloc_failed = 1;
return;
}
} else
@ -317,18 +316,18 @@ PRStatus rv;
/*
* allocate a lock stack
*/
if ((lock_stack = PR_GetThreadPrivate(ps_thread_rwlock)) == NULL) {
if ((lock_stack = PR_GetThreadPrivate(pr_thread_rwlock)) == NULL) {
lock_stack = (thread_rwlock_stack *)
PR_CALLOC(1 * sizeof(thread_rwlock_stack));
if (lock_stack) {
rv = PR_SetThreadPrivate(ps_thread_rwlock, lock_stack);
rv = PR_SetThreadPrivate(pr_thread_rwlock, lock_stack);
if (rv == PR_FAILURE) {
PR_DELETE(lock_stack);
ps_thread_rwlock_alloc_failed = 1;
pr_thread_rwlock_alloc_failed = 1;
return;
}
} else {
ps_thread_rwlock_alloc_failed = 1;
pr_thread_rwlock_alloc_failed = 1;
return;
}
}
@ -339,10 +338,10 @@ PRStatus rv;
if (lock_stack->trs_index < _PR_RWLOCK_RANK_ORDER_LIMIT)
lock_stack->trs_stack[lock_stack->trs_index++] = rwlock;
}
ps_thread_rwlock_initialized = 1;
pr_thread_rwlock_initialized = 1;
}
void
static void
_PR_RELEASE_LOCK_STACK(void *lock_stack)
{
PR_ASSERT(lock_stack);
@ -356,13 +355,13 @@ _PR_RELEASE_LOCK_STACK(void *lock_stack)
* stack is not allocated, return PR_RWLOCK_RANK_NONE.
*/
PRUint32
static PRUint32
_PR_GET_THREAD_RWLOCK_RANK(PRThread *me)
{
thread_rwlock_stack *lock_stack;
if (ps_thread_rwlock_initialized) {
if ((lock_stack = PR_GetThreadPrivate(ps_thread_rwlock)) == NULL)
if (pr_thread_rwlock_initialized) {
if ((lock_stack = PR_GetThreadPrivate(pr_thread_rwlock)) == NULL)
return (PR_RWLOCK_RANK_NONE);
else
return(lock_stack->trs_stack[lock_stack->trs_index - 1]->rw_rank);
@ -378,16 +377,16 @@ _PR_GET_THREAD_RWLOCK_RANK(PRThread *me)
* unlocked in a FIFO order, the entire lock stack is searched.
*/
void
static void
_PR_UNSET_THREAD_RWLOCK_RANK(PRThread *me, PRRWLock *rwlock)
{
thread_rwlock_stack *lock_stack;
int new_index = 0, index, done = 0;
if (!ps_thread_rwlock_initialized)
if (!pr_thread_rwlock_initialized)
return;
lock_stack = PR_GetThreadPrivate(ps_thread_rwlock);
lock_stack = PR_GetThreadPrivate(pr_thread_rwlock);
PR_ASSERT(lock_stack != NULL);

Просмотреть файл

@ -38,6 +38,7 @@ endif
CSRCS = \
accept.c \
acceptread.c \
alarm.c \
atomic.c \
attach.c \
@ -99,10 +100,9 @@ CSRCS = \
prftest2.c \
priotest.c \
provider.c \
ranfile.c \
rwlocktest.c \
prpoll.c \
ranfile.c \
rwlocktest.c \
sel_spd.c \
selct_er.c \
selct_nm.c \

Просмотреть файл

@ -72,7 +72,7 @@ static PRIntn PR_CALLBACK RealMain(PRIntn argc, char **argv)
answer = PR_strtod(number, NULL);
PR_fprintf(err, "Translation = %20.0f\n", answer);
}
return 2;
return 0;
}