26 #include "qoferror-p.h" 27 #include "qofsession-p.h" 33 const gchar * filename;
39 static GHashTable * error_table = NULL;
40 static gint32 count = 0;
46 error_table = g_hash_table_new (g_direct_hash, g_direct_equal);
54 g_free (error->message);
60 clear_table (gpointer key, gpointer value, gpointer user_data)
66 qof_error_close (
void)
68 g_hash_table_foreach (error_table, clear_table, NULL);
69 g_hash_table_destroy (error_table);
85 spec = g_strrstr (err_message,
"%s");
86 use_file = (spec) ? TRUE : FALSE;
88 qerr->use_file = use_file;
89 qerr->message = g_strdup (err_message);
90 g_hash_table_insert (error_table, GINT_TO_POINTER(qerr->id), qerr);
102 qerr = g_hash_table_lookup (error_table, GINT_TO_POINTER(
id));
103 qof_error_free (qerr);
104 result = g_hash_table_remove (error_table,
105 GINT_TO_POINTER(
id));
107 LEAVE (
"unable to remove registered error.");
116 g_return_if_fail (session);
119 DEBUG (
" passed success, not error.");
122 qerr = g_hash_table_lookup (error_table, GINT_TO_POINTER(error));
125 DEBUG (
" failed hash table lookup");
133 qof_session_get_url (session));
136 if (!session->backend)
141 set->message = g_strdup_printf (qerr->message,
144 set->message = g_strdup (qerr->message);
147 session->backend->error_stack =
148 g_list_prepend (session->backend->error_stack,
set);
156 g_return_if_fail (be);
159 qerr = g_hash_table_lookup (error_table, GINT_TO_POINTER(error));
165 set->message = g_strdup_printf (qerr->message, be->
fullpath);
167 set->message = g_strdup (qerr->message);
170 be->error_stack = g_list_prepend (be->error_stack,
176 clear_list (gpointer value, gpointer user_data)
184 g_return_if_fail (session);
185 if (!session->backend)
187 g_list_foreach (session->backend->error_stack, clear_list, NULL);
188 g_list_free (session->backend->error_stack);
189 session->backend->error_stack = NULL;
199 g_return_val_if_fail (session,
QOF_FATAL);
211 if (g_list_length (be->error_stack) == 0)
213 first = g_list_first (be->error_stack);
226 if (g_list_length(be->error_stack) == 0)
228 first = g_list_first (be->error_stack);
244 g_return_val_if_fail (session,
QOF_FATAL);
250 qerr = g_hash_table_lookup (error_table,
251 GINT_TO_POINTER(
id));
254 DEBUG (
" empty QofError value");
273 if (g_list_length (be->error_stack) == 0)
275 first = g_list_first (be->error_stack);
280 g_list_remove (be->error_stack, qerr);
289 g_return_val_if_fail (session, NULL);
290 if (!session->backend)
293 DEBUG (
" msg_1=%s", msg);
303 g_return_val_if_fail (be, NULL);
304 if (g_list_length (be->error_stack) == 0)
306 DEBUG (
" empty error stack");
309 first = g_list_first (be->error_stack);
313 DEBUG (
" empty QofError value");
316 DEBUG (
" qerr->message=%s", qerr->message);
318 g_list_remove (be->error_stack, qerr);
319 return qerr->message;
QofErrorId qof_error_register(const gchar *err_message, gboolean use_file)
Generate and register a new error.
QofTime * qof_error_get_time(QofSession *session)
Alternative for applications.
QofErrorId qof_error_check(QofSession *session)
gint32 QofErrorId
The ID of this error.
QofErrorId qof_error_check_be(QofBackend *be)
Check for errors.
#define LEAVE(format, args...)
QofTime * qof_time_get_current(void)
Get the current QofTime.
QofTime * qof_error_get_time_be(QofBackend *be)
Get the time of the most recent error.
const gchar * qof_error_get_message(QofSession *session)
Alternative for applications.
void qof_error_set(QofSession *session, QofErrorId error)
Add an error to the stack for this session.
struct QofError_s QofError
void qof_time_free(QofTime *qt)
Free a QofTime when no longer required.
#define DEBUG(format, args...)
const gchar * qof_session_get_file_path(QofSession *session)
QofErrorId qof_error_get_id(QofSession *session)
Alternative for applications.
struct QofTime64 QofTime
Use a 64-bit signed int QofTime.
void qof_error_clear(QofSession *session)
clear the error stack for the session.
void qof_error_unregister(QofErrorId id)
Unregister an error.
#define QOF_FATAL
general error value
const gchar * qof_error_get_message_be(QofBackend *be)
Pop the most recent error and get the message.
#define ENTER(format, args...)
const gchar * QofLogModule
QofErrorId qof_error_get_id_be(QofBackend *be)
Pop the most recent error from the backend stack.