1998-06-23 02:39:40 +04:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
1999-11-06 06:43:54 +03:00
|
|
|
* The contents of this file are subject to the Netscape 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/NPL/
|
1998-06-23 02:39:40 +04:00
|
|
|
*
|
1999-11-06 06:43:54 +03:00
|
|
|
* 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.
|
1998-06-23 02:39:40 +04:00
|
|
|
*
|
1999-11-06 06:43:54 +03:00
|
|
|
* The Original Code is mozilla.org code.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is Netscape
|
1998-06-23 02:39:40 +04:00
|
|
|
* Communications Corporation. Portions created by Netscape are
|
1999-11-06 06:43:54 +03:00
|
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
|
|
* Rights Reserved.
|
|
|
|
*
|
|
|
|
* Contributor(s):
|
1998-06-23 02:39:40 +04:00
|
|
|
*/
|
|
|
|
// errcode.h
|
|
|
|
|
|
|
|
#ifndef _ERRCODE_H_
|
|
|
|
#define _ERRCODE_H_
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Error classifications (Database, RPC, Network, etc)
|
|
|
|
**
|
|
|
|
** Each error classification defines a range of up to 0xffff error codes.
|
|
|
|
**
|
|
|
|
** The top word of an msgERR is the classification, the low byte is an error
|
|
|
|
** offset within that classification.
|
|
|
|
**
|
|
|
|
** For diagnostic purposes, each classification can register it's strings for GetErrorString
|
|
|
|
** support. These are NOT nationalizable strings; the string tables are autogenerated from the
|
|
|
|
** MsgError() macro machinery, not stored in .rc files. They're intended for use in debugging,
|
|
|
|
** logfiles, etc.
|
|
|
|
*/
|
|
|
|
|
|
|
|
typedef uint32 MsgERR;
|
|
|
|
typedef MsgERR msgErrorClass;
|
|
|
|
|
|
|
|
#define msgErrorDb 0xFF000000 /* DB errors (generic) */
|
|
|
|
#define msgErrorVw 0xF8000000 /* View layer */
|
|
|
|
#define msgErrorMisc 0xF0000000 /* Random miscellaneous errors. */
|
|
|
|
#define msgErrorOk 0x00000000
|
|
|
|
|
|
|
|
/*
|
|
|
|
** GetErrorClass(msgERR)
|
|
|
|
**
|
|
|
|
** Returns classification range for an error.
|
|
|
|
**
|
|
|
|
** For example,
|
|
|
|
** if (GetErrorClass(err) == msgErrorRp)
|
|
|
|
** Alert("Problem chatting with forum service.");
|
|
|
|
**
|
|
|
|
*/
|
|
|
|
#define GetErrorClass(err) ((err) & ((MsgERR) 0xFFFF0000))
|
|
|
|
|
|
|
|
/*
|
|
|
|
** RegisterErrorClass (msgErrorClass, pFn)
|
|
|
|
**
|
|
|
|
** Register a function to return error-strings in the given class.
|
|
|
|
**
|
|
|
|
** (Note: this could be best done by automatically building a linked list of
|
|
|
|
** diagnostic routines/classes - by simply using a C++ class for error
|
|
|
|
** classes, and a static constructor to link each class into the queue.
|
|
|
|
** However, we've had problems with static constructors within DLL's
|
|
|
|
** that use MFC and DLL's on NT - so we're avoiding them for now.)
|
|
|
|
**
|
|
|
|
** See dberror.cpp (in the database) for an example of an auto-generated diagnostic
|
|
|
|
** map. The error-code to string mapping function implementation can be generated
|
|
|
|
** automatically, but the client must register the function manually.
|
|
|
|
**
|
|
|
|
** There is no limit on how many ranges a given diagnostic function might handle.
|
|
|
|
** The function must be registered once for each class, of course.
|
|
|
|
**
|
|
|
|
** Normally there will be a function for every specific .h that defines error codes
|
|
|
|
** (whether that .h defines one or more classes of error codes). For example,
|
|
|
|
** dberror.h defines 3 error class ranges, so the DB registers one diagnostic function
|
|
|
|
** that handles those 3 classes accordingly.
|
|
|
|
**
|
|
|
|
*/
|
|
|
|
//typedef const char * (msgCALLBACK *msgErrorDiagnosticCallback) (msgERR);
|
|
|
|
|
|
|
|
//extern void RegisterErrorClass (msgErrorClass, msgErrorDiagnosticCallback pFn);
|
|
|
|
|
|
|
|
/*
|
|
|
|
** NOTE: remainder of this file may be multiply-included
|
|
|
|
** place all one-shot definitions above this point
|
|
|
|
*/
|
|
|
|
#endif // __msgERROR_H__
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Within an error-class range, the errors are allocated/declared independently.
|
|
|
|
** See, for example, dberror.h, rperror.h, ecerror.h, etc.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* msgError: wrapper-macro for an error code definition */
|
|
|
|
#ifndef MsgError
|
|
|
|
#define MsgError(errorclass, name, offset) const MsgERR name = (MsgERR) (errorclass + offset);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* msgErrorDiagnostic: causes wrapper-macro to generate a diagnostic string */
|
|
|
|
#ifndef MsgErrorDiagnostic
|
|
|
|
#define MsgErrorDiagnostic(errorclass, name, offset) case ((errorclass)+(offset)): return #name;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
|
|
|
** msgSUCCESS - universal no-error indication (zero).
|
|
|
|
** '! msgERR' is guaranteed to mean success.
|
|
|
|
*/
|
|
|
|
#ifndef MsgErrorBasic
|
|
|
|
#define MsgErrorBasic
|
|
|
|
MsgError (msgErrorOk, eSUCCESS, 0x0000) /* 0 Success */
|
|
|
|
MsgError (msgErrorMisc, eUNKNOWN, 0x0001) // 1 Something weird
|
|
|
|
// happened.
|
|
|
|
#endif
|
|
|
|
|