|
|
1.1 root 1: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2: /*
3: * The contents of this file are subject to the Mozilla Public
4: * License Version 1.1 (the "License"); you may not use this file
5: * except in compliance with the License. You may obtain a copy of
6: * the License at http://www.mozilla.org/MPL/
7: *
8: * Software distributed under the License is distributed on an "AS
9: * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
10: * implied. See the License for the specific language governing
11: * rights and limitations under the License.
12: *
13: * The Original Code is the Netscape Portable Runtime (NSPR).
14: *
15: * The Initial Developer of the Original Code is Netscape
16: * Communications Corporation. Portions created by Netscape are
17: * Copyright (C) 1998-2000 Netscape Communications Corporation. All
18: * Rights Reserved.
19: *
20: * Contributor(s):
21: *
22: * Alternatively, the contents of this file may be used under the
23: * terms of the GNU General Public License Version 2 or later (the
24: * "GPL"), in which case the provisions of the GPL are applicable
25: * instead of those above. If you wish to allow use of your
26: * version of this file only under the terms of the GPL and not to
27: * allow others to use your version of this file under the MPL,
28: * indicate your decision by deleting the provisions above and
29: * replace them with the notice and other provisions required by
30: * the GPL. If you do not delete the provisions above, a recipient
31: * may use your version of this file under either the MPL or the
32: * GPL.
33: */
34:
35: #ifndef prerror_h___
36: #define prerror_h___
37:
38: #include "prtypes.h"
39:
40: PR_BEGIN_EXTERN_C
41:
42: typedef PRInt32 PRErrorCode;
43:
44: #define PR_NSPR_ERROR_BASE -6000
45:
46: #include "prerr.h"
47:
48: /*
49: ** Set error will preserve an error condition within a thread context.
50: ** The values stored are the NSPR (platform independent) translation of
51: ** the error. Also, if available, the platform specific oserror is stored.
52: ** If there is no appropriate OS error number, a zero my be supplied.
53: */
54: NSPR_API(void) PR_SetError(PRErrorCode errorCode, PRInt32 oserr);
55:
56: /*
57: ** The text value specified may be NULL. If it is not NULL and the text length
58: ** is zero, the string is assumed to be a null terminated C string. Otherwise
59: ** the text is assumed to be the length specified and possibly include NULL
60: ** characters (e.g., a multi-national string).
61: **
62: ** The text will be copied into to thread structure and remain there
63: ** until the next call to PR_SetError.
64: */
65: NSPR_API(void) PR_SetErrorText(
66: PRIntn textLength, const char *text);
67:
68: /*
69: ** Return the current threads last set error code.
70: */
71: NSPR_API(PRErrorCode) PR_GetError(void);
72:
73: /*
74: ** Return the current threads last set os error code. This is used for
75: ** machine specific code that desires the underlying os error.
76: */
77: NSPR_API(PRInt32) PR_GetOSError(void);
78:
79: /*
80: ** Get the length of the error text. If a zero is returned, then there
81: ** is no text. Otherwise, the value returned is sufficient to contain
82: ** the error text currently available.
83: */
84: NSPR_API(PRInt32) PR_GetErrorTextLength(void);
85:
86: /*
87: ** Copy the current threads current error text. Then actual number of bytes
88: ** copied is returned as the result. If the result is zero, the 'text' area
89: ** is unaffected.
90: */
91: NSPR_API(PRInt32) PR_GetErrorText(char *text);
92:
93:
94: /*
95: Copyright (C) 1987, 1988 Student Information Processing Board of the
96: Massachusetts Institute of Technology.
97:
98: Permission to use, copy, modify, and distribute this software and its
99: documentation for any purpose and without fee is hereby granted, provided
100: that the above copyright notice appear in all copies and that both that
101: copyright notice and this permission notice appear in supporting
102: documentation, and that the names of M.I.T. and the M.I.T. S.I.P.B. not be
103: used in advertising or publicity pertaining to distribution of the software
104: without specific, written prior permission. M.I.T. and the M.I.T. S.I.P.B.
105: make no representations about the suitability of this software for any
106: purpose. It is provided "as is" without express or implied warranty.
107: */
108:
109:
110: /*
111: * NOTE:
112: * The interfaces for error-code-translation described in the rest of
113: * this file are preliminary in the 3.1 release of nspr and are subject
114: * to change in future releases.
115: */
116:
117: /*
118: ** Description: Localizable error code to string function.
119: **
120: **
121: ** NSPR provides a mechanism for converting an error code to a
122: ** descriptive string, in a caller-specified language.
123: **
124: ** Error codes themselves are 32 bit (signed) integers. Typically,
125: ** the high order 24 bits are an identifier of which error table the
126: ** error code is from, and the low order 8 bits are a sequential error
127: ** number within the table. NSPR supports error tables whose first
128: ** error code is not a multiple of 256, such error code assignments
129: ** should be avoided when possible.
130: **
131: ** Error table 0 is defined to match the UNIX system call error table
132: ** (sys_errlist); this allows errno values to be used directly in the
133: ** library. Other error table numbers are typically formed by
134: ** compacting together the first four characters of the error table
135: ** name. The mapping between characters in the name and numeric
136: ** values in the error code are defined in a system-independent
137: ** fashion, so that two systems that can pass integral values between
138: ** them can reliably pass error codes without loss of meaning; this
139: ** should work even if the character sets used are not the
140: ** same. (However, if this is to be done, error table 0 should be
141: ** avoided, since the local system call error tables may differ.)
142: **
143: ** Libraries defining error codes need only provide a table mapping
144: ** error code numbers to names and default English descriptions,
145: ** calling a routine to install the table, making it ``known'' to NSPR
146: ** library. Once installed, a table may not be removed. Any error
147: ** code the library generates can be converted to the corresponding
148: ** error message. There is also a default format for error codes
149: ** accidentally returned before making the table known, which is of
150: ** the form "unknown code foo 32", where "foo" would be the name of
151: ** the table.
152: **
153: ** Normally, the error code conversion routine only supports the
154: ** languages "i-default" and "en", returning the error-table-provided
155: ** English description for both languages. The application may
156: ** provide a localization plugin, allowing support for additional
157: ** languages.
158: **
159: **/
160:
161: /**********************************************************************/
162: /************************* TYPES AND CONSTANTS ************************/
163: /**********************************************************************/
164:
165: /*
166: * PRLanguageCode --
167: *
168: * NSPR represents a language code as a non-negative integer.
169: * Languages 0 is always "i-default" the language you get without
170: * explicit negotiation. Language 1 is always "en", English
171: * which has been explicitly negotiated. Additional language
172: * codes are defined by an application-provided localization plugin.
173: */
174: typedef PRUint32 PRLanguageCode;
175: #define PR_LANGUAGE_I_DEFAULT 0 /* i-default, the default language */
176: #define PR_LANGUAGE_EN 1 /* English, explicitly negotiated */
177:
178: /*
179: * struct PRErrorMessage --
180: *
181: * An error message in an error table.
182: */
183: struct PRErrorMessage {
184: const char * name; /* Macro name for error */
185: const char * en_text; /* Default English text */
186: };
187:
188: /*
189: * struct PRErrorTable --
190: *
191: * An error table, provided by a library.
192: */
193: struct PRErrorTable {
194: const struct PRErrorMessage * msgs; /* Array of error information */
195: const char *name; /* Name of error table source */
196: PRErrorCode base; /* Error code for first error in table */
197: int n_msgs; /* Number of codes in table */
198: };
199:
200: /*
201: * struct PRErrorCallbackPrivate --
202: *
203: * A private structure for the localization plugin
204: */
205: struct PRErrorCallbackPrivate;
206:
207: /*
208: * struct PRErrorCallbackTablePrivate --
209: *
210: * A data structure under which the localization plugin may store information,
211: * associated with an error table, that is private to itself.
212: */
213: struct PRErrorCallbackTablePrivate;
214:
215: /*
216: * PRErrorCallbackLookupFn --
217: *
218: * A function of PRErrorCallbackLookupFn type is a localization
219: * plugin callback which converts an error code into a description
220: * in the requested language. The callback is provided the
221: * appropriate error table, private data for the plugin and the table.
222: * The callback returns the appropriate UTF-8 encoded description, or NULL
223: * if no description can be found.
224: */
225: typedef const char *
226: PRErrorCallbackLookupFn(PRErrorCode code, PRLanguageCode language,
227: const struct PRErrorTable *table,
228: struct PRErrorCallbackPrivate *cb_private,
229: struct PRErrorCallbackTablePrivate *table_private);
230:
231: /*
232: * PRErrorCallbackNewTableFn --
233: *
234: * A function PRErrorCallbackNewTableFn type is a localization plugin
235: * callback which is called once with each error table registered
236: * with NSPR. The callback is provided with the error table and
237: * the plugin's private structure. The callback returns any table private
238: * data it wishes to associate with the error table. Does not need to be thread
239: * safe.
240: */
241: typedef struct PRErrorCallbackTablePrivate *
242: PRErrorCallbackNewTableFn(const struct PRErrorTable *table,
243: struct PRErrorCallbackPrivate *cb_private);
244:
245: /**********************************************************************/
246: /****************************** FUNCTIONS *****************************/
247: /**********************************************************************/
248:
249: /***********************************************************************
250: ** FUNCTION: PR_ErrorToString
251: ** DESCRIPTION:
252: ** Returns the UTF-8 message for an error code in
253: ** the requested language. May return the message
254: ** in the default language if a translation in the requested
255: ** language is not available. The returned string is
256: ** valid for the duration of the process. Never returns NULL.
257: **
258: ***********************************************************************/
259: NSPR_API(const char *) PR_ErrorToString(PRErrorCode code,
260: PRLanguageCode language);
261:
262:
263: /***********************************************************************
264: ** FUNCTION: PR_ErrorToName
265: ** DESCRIPTION:
266: ** Returns the macro name for an error code, or NULL
267: ** if the error code is not known. The returned string is
268: ** valid for the duration of the process.
269: **
270: ** Does not work for error table 0, the system error codes.
271: **
272: ***********************************************************************/
273: NSPR_API(const char *) PR_ErrorToName(PRErrorCode code);
274:
275:
276: /***********************************************************************
277: ** FUNCTION: PR_ErrorLanguages
278: ** DESCRIPTION:
279: ** Returns the RFC 1766 language tags for the language
280: ** codes PR_ErrorToString() supports. The returned array is valid
281: ** for the duration of the process. Never returns NULL. The first
282: ** item in the returned array is the language tag for PRLanguageCode 0,
283: ** the second is for PRLanguageCode 1, and so on. The array is terminated
284: ** with a null pointer.
285: **
286: ***********************************************************************/
287: NSPR_API(const char * const *) PR_ErrorLanguages(void);
288:
289:
290: /***********************************************************************
291: ** FUNCTION: PR_ErrorInstallTable
292: ** DESCRIPTION:
293: ** Registers an error table with NSPR. Must be done exactly once per
294: ** table. Memory pointed to by `table' must remain valid for the life
295: ** of the process.
296: **
297: ** NOT THREAD SAFE!
298: **
299: ***********************************************************************/
300: NSPR_API(PRErrorCode) PR_ErrorInstallTable(const struct PRErrorTable *table);
301:
302:
303: /***********************************************************************
304: ** FUNCTION: PR_ErrorInstallCallback
305: ** DESCRIPTION:
306: ** Registers an error localization plugin with NSPR. May be called
307: ** at most one time. `languages' contains the language codes supported
308: ** by this plugin. Languages 0 and 1 must be "i-default" and "en"
309: ** respectively. `lookup' and `newtable' contain pointers to
310: ** the plugin callback functions. `cb_private' contains any information
311: ** private to the plugin functions.
312: **
313: ** NOT THREAD SAFE!
314: **
315: ***********************************************************************/
316: NSPR_API(void) PR_ErrorInstallCallback(const char * const * languages,
317: PRErrorCallbackLookupFn *lookup,
318: PRErrorCallbackNewTableFn *newtable,
319: struct PRErrorCallbackPrivate *cb_private);
320:
321: PR_END_EXTERN_C
322:
323: #endif /* prerror_h___ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.