1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* bonobo-exception.c: a generic exception -> user string converter.
*
* Authors:
* Michael Meeks (michael@helixcode.com)
*
* Copyright 2000 Helix Code, Inc.
*/
#ifndef _BONOBO_EXCEPTION_H_
#define _BONOBO_EXCEPTION_H_
#include <glib.h>
#include <bonobo/Bonobo.h>
#define bonobo_exception_set(opt_ev,repo_id) G_STMT_START{ \
if (opt_ev) { \
CORBA_exception_set (opt_ev, CORBA_USER_EXCEPTION, repo_id, NULL); \
} else { \
g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_CRITICAL, \
"file %s: line %d: bonobo exception: `%s'", \
__FILE__, \
__LINE__, \
bonobo_exception_repoid_to_text (repo_id)); \
} }G_STMT_END
#ifdef G_DISABLE_CHECKS
#define bonobo_return_if_fail(expr,opt_ev) G_STMT_START{ \
if (!(expr)) { \
if (opt_ev) \
CORBA_exception_set (opt_ev, CORBA_USER_EXCEPTION, \
ex_Bonobo_BadArg, NULL); \
return; \
}; }G_STMT_END
#define bonobo_return_val_if_fail(expr,val,opt_ev) G_STMT_START{ \
if (!(expr)) { \
if (opt_ev) \
CORBA_exception_set (opt_ev, CORBA_USER_EXCEPTION, \
ex_Bonobo_BadArg, NULL); \
return val; \
}; }G_STMT_END
#else /* !G_DISABLE_CHECKS */
#ifdef __GNUC__
#define bonobo_return_if_fail(expr,opt_ev) G_STMT_START{ \
if (!(expr)) { \
if (opt_ev) \
CORBA_exception_set (opt_ev, CORBA_USER_EXCEPTION, \
ex_Bonobo_BadArg, NULL); \
g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_CRITICAL, \
"file %s: line %d (%s): assertion `%s' failed.", \
__FILE__, \
__LINE__, \
G_GNUC_PRETTY_FUNCTION, \
#expr); \
return; \
}; }G_STMT_END
#define bonobo_return_val_if_fail(expr,val,opt_ev) G_STMT_START{ \
if (!(expr)) { \
if (opt_ev) \
CORBA_exception_set (opt_ev, CORBA_USER_EXCEPTION, \
ex_Bonobo_BadArg, NULL); \
g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_CRITICAL, \
"file %s: line %d (%s): assertion `%s' failed.", \
__FILE__, \
__LINE__, \
G_GNUC_PRETTY_FUNCTION, \
#expr); \
return val; \
}; }G_STMT_END
#else /* ! __GNUC__ */
#define bonobo_return_if_fail(expr,opt_ev) G_STMT_START{ \
if (!(expr)) { \
if (opt_ev) \
CORBA_exception_set (opt_ev, CORBA_USER_EXCEPTION, \
ex_Bonobo_BadArg, NULL); \
g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_CRITICAL, \
"file %s: line %d: assertion `%s' failed.", \
__FILE__, \
__LINE__, \
#expr); \
return; \
}; }G_STMT_END
#define bonobo_return_val_if_fail(expr,val,opt_ev) G_STMT_START{ \
if (!(expr)) { \
if (opt_ev) \
CORBA_exception_set (opt_ev, CORBA_USER_EXCEPTION, \
ex_Bonobo_BadArg, NULL); \
g_log (G_LOG_DOMAIN, \
G_LOG_LEVEL_CRITICAL, \
"file %s: line %d: assertion `%s' failed.", \
__FILE__, \
__LINE__, \
#expr); \
return val; \
}; }G_STMT_END
#endif /* __GNUC__ */
#endif /* G_DISABLE_CHECKS */
#define BONOBO_EX(ev) ((ev) && (ev)->_major != CORBA_NO_EXCEPTION)
#define BONOBO_USER_EX(ev,id) ((ev) && (ev)->_major == CORBA_USER_EXCEPTION && \
(ev)->_repo_id != NULL && !strcmp ((ev)->_repo_id, id))
#define BONOBO_EX_ID(ev) ((ev)->_repo_id)
#define BONOBO_RET_EX(ev) \
G_STMT_START \
if (BONOBO_EX (ev)) \
return; \
G_STMT_END
#define BONOBO_RET_VAL_EX(ev,v) \
G_STMT_START \
if (BONOBO_EX (ev)) \
return (v); \
G_STMT_END
typedef char *(*BonoboExceptionFn) (CORBA_Environment *ev, gpointer user_data);
char *bonobo_exception_get_text (CORBA_Environment *ev);
char *bonobo_exception_repoid_to_text (const char *repo_id);
void bonobo_exception_add_handler_str (const char *repo_id,
const char *str);
void bonobo_exception_add_handler_fn (const char *repo_id,
BonoboExceptionFn fn,
gpointer user_data,
GDestroyNotify destroy_fn);
#endif /* _BONOBO_EXCEPTION_H_ */
|