|
|
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.