| OLD | NEW |
| (Empty) |
| 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 sub
ject | |
| 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 thr
ead | |
| 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___ */ | |
| OLD | NEW |