123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* ***** 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 ***** */
- #ifndef prerror_h___
- #define prerror_h___
- #include "prtypes.h"
- PR_BEGIN_EXTERN_C
- typedef PRInt32 PRErrorCode;
- #define PR_NSPR_ERROR_BASE -6000
- #include "prerr.h"
- /*
- ** Set error will preserve an error condition within a thread context.
- ** The values stored are the NSPR (platform independent) translation of
- ** the error. Also, if available, the platform specific oserror is stored.
- ** If there is no appropriate OS error number, a zero my be supplied.
- */
- NSPR_API(void) PR_SetError(PRErrorCode errorCode, PRInt32 oserr);
- /*
- ** The text value specified may be NULL. If it is not NULL and the text length
- ** is zero, the string is assumed to be a null terminated C string. Otherwise
- ** the text is assumed to be the length specified and possibly include NULL
- ** characters (e.g., a multi-national string).
- **
- ** The text will be copied into to thread structure and remain there
- ** until the next call to PR_SetError.
- */
- NSPR_API(void) PR_SetErrorText(
- PRIntn textLength, const char *text);
- /*
- ** Return the current threads last set error code.
- */
- NSPR_API(PRErrorCode) PR_GetError(void);
- /*
- ** Return the current threads last set os error code. This is used for
- ** machine specific code that desires the underlying os error.
- */
- NSPR_API(PRInt32) PR_GetOSError(void);
- /*
- ** Get the length of the error text. If a zero is returned, then there
- ** is no text. Otherwise, the value returned is sufficient to contain
- ** the error text currently available.
- */
- NSPR_API(PRInt32) PR_GetErrorTextLength(void);
- /*
- ** Copy the current threads current error text. Then actual number of bytes
- ** copied is returned as the result. If the result is zero, the 'text' area
- ** is unaffected.
- */
- NSPR_API(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.
- */
- /*
- * NOTE:
- * The interfaces for error-code-translation described in the rest of
- * this file are preliminary in the 3.1 release of nspr and are subject
- * to change in future releases.
- */
- /*
- ** 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 install the table, making it ``known'' to NSPR
- ** library. Once installed, a table may not be removed. 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 PRUint32 PRLanguageCode;
- #define PR_LANGUAGE_I_DEFAULT 0 /* i-default, the default language */
- #define PR_LANGUAGE_EN 1 /* English, explicitly negotiated */
- /*
- * struct PRErrorMessage --
- *
- * An error message in an error table.
- */
- struct PRErrorMessage {
- const char * name; /* Macro name for error */
- const char * en_text; /* Default English text */
- };
- /*
- * struct PRErrorTable --
- *
- * An error table, provided by a library.
- */
- struct PRErrorTable {
- const struct PRErrorMessage * 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 PRErrorCallbackPrivate --
- *
- * A private structure for the localization plugin
- */
- struct PRErrorCallbackPrivate;
- /*
- * struct PRErrorCallbackTablePrivate --
- *
- * A data structure under which the localization plugin may store information,
- * associated with an error table, that is private to itself.
- */
- struct PRErrorCallbackTablePrivate;
- /*
- * PRErrorCallbackLookupFn --
- *
- * A function of PRErrorCallbackLookupFn 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, private data for the plugin and the table.
- * The callback returns the appropriate UTF-8 encoded description, or NULL
- * if no description can be found.
- */
- typedef const char *
- PRErrorCallbackLookupFn(PRErrorCode code, PRLanguageCode language,
- const struct PRErrorTable *table,
- struct PRErrorCallbackPrivate *cb_private,
- struct PRErrorCallbackTablePrivate *table_private);
- /*
- * PRErrorCallbackNewTableFn --
- *
- * A function PRErrorCallbackNewTableFn 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's private structure. The callback returns any table private
- * data it wishes to associate with the error table. Does not need to be thread
- * safe.
- */
- typedef struct PRErrorCallbackTablePrivate *
- PRErrorCallbackNewTableFn(const struct PRErrorTable *table,
- struct PRErrorCallbackPrivate *cb_private);
- /**********************************************************************/
- /****************************** FUNCTIONS *****************************/
- /**********************************************************************/
- /***********************************************************************
- ** FUNCTION: PR_ErrorToString
- ** 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.
- **
- ***********************************************************************/
- NSPR_API(const char *) PR_ErrorToString(PRErrorCode code,
- PRLanguageCode language);
- /***********************************************************************
- ** FUNCTION: PR_ErrorToName
- ** DESCRIPTION:
- ** Returns the macro name for an error code, or NULL
- ** if the error code is not known. The returned string is
- ** valid for the duration of the process.
- **
- ** Does not work for error table 0, the system error codes.
- **
- ***********************************************************************/
- NSPR_API(const char *) PR_ErrorToName(PRErrorCode code);
- /***********************************************************************
- ** 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.
- **
- ***********************************************************************/
- NSPR_API(const char * const *) PR_ErrorLanguages(void);
- /***********************************************************************
- ** FUNCTION: PR_ErrorInstallTable
- ** DESCRIPTION:
- ** Registers an error table with NSPR. Must be done exactly once per
- ** table. Memory pointed to by `table' must remain valid for the life
- ** of the process.
- **
- ** NOT THREAD SAFE!
- **
- ***********************************************************************/
- NSPR_API(PRErrorCode) PR_ErrorInstallTable(const struct PRErrorTable *table);
- /***********************************************************************
- ** FUNCTION: PR_ErrorInstallCallback
- ** 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. `cb_private' contains any information
- ** private to the plugin functions.
- **
- ** NOT THREAD SAFE!
- **
- ***********************************************************************/
- NSPR_API(void) PR_ErrorInstallCallback(const char * const * languages,
- PRErrorCallbackLookupFn *lookup,
- PRErrorCallbackNewTableFn *newtable,
- struct PRErrorCallbackPrivate *cb_private);
- PR_END_EXTERN_C
- #endif /* prerror_h___ */
|