* introduce mu_util_g_set_error, a g_set_error wrapper

This commit is contained in:
djcb
2012-04-13 21:58:58 +03:00
parent b63bebfa91
commit ece0bc5bae
3 changed files with 44 additions and 13 deletions

View File

@ -274,7 +274,6 @@ typedef gpointer XapianEnquire;
} while (0)
/**
*
* don't repeat these catch blocks everywhere...
@ -282,8 +281,8 @@ typedef gpointer XapianEnquire;
*/
#define MU_STORE_CATCH_BLOCK_RETURN(GE,R) \
catch (const MuStoreError& merr) { \
g_set_error ((GE), (MU_ERROR_DOMAIN), \
catch (const MuStoreError& merr) { \
mu_util_g_set_error ((GE), \
merr.mu_error(), "%s", \
merr.what().c_str()); \
return (R); \
@ -300,25 +299,25 @@ typedef gpointer XapianEnquire;
#define MU_XAPIAN_CATCH_BLOCK_G_ERROR(GE,E) \
catch (const Xapian::DatabaseLockError &xerr) { \
g_set_error ((GE),(MU_ERROR_DOMAIN), \
mu_util_g_set_error ((GE), \
MU_ERROR_XAPIAN_CANNOT_GET_WRITELOCK, \
"%s: xapian error '%s'", \
__FUNCTION__, xerr.get_msg().c_str()); \
} catch (const Xapian::DatabaseCorruptError &xerr) { \
g_set_error ((GE),(MU_ERROR_DOMAIN),MU_ERROR_XAPIAN_CORRUPTION, \
mu_util_g_set_error ((GE), \
MU_ERROR_XAPIAN_CORRUPTION, \
"%s: xapian error '%s'", \
__FUNCTION__, xerr.get_msg().c_str()); \
} catch (const Xapian::DatabaseError &xerr) { \
g_set_error ((GE),0,MU_ERROR_XAPIAN, \
mu_util_g_set_error ((GE),MU_ERROR_XAPIAN, \
"%s: xapian error '%s'", \
__FUNCTION__, xerr.get_msg().c_str()); \
} catch (const Xapian::Error &xerr) { \
g_set_error ((GE),(MU_ERROR_DOMAIN),(E), \
mu_util_g_set_error ((GE),(E), \
"%s: xapian error '%s'", \
__FUNCTION__, xerr.get_msg().c_str()); \
} catch (...) { \
if ((GE)&&!(*(GE))) \
g_set_error ((GE),(MU_ERROR_DOMAIN),(MU_ERROR_INTERNAL),\
mu_util_g_set_error ((GE),(MU_ERROR_INTERNAL), \
"%s: caught exception", __FUNCTION__); \
}
@ -335,13 +334,13 @@ typedef gpointer XapianEnquire;
#define MU_XAPIAN_CATCH_BLOCK_G_ERROR_RETURN(GE,E,R) \
catch (const Xapian::Error &xerr) { \
g_set_error ((GE),(MU_ERROR_DOMAIN),(E), \
mu_util_g_set_error ((GE),(E), \
"%s: xapian error '%s'", \
__FUNCTION__, xerr.get_msg().c_str()); \
return (R); \
} catch (...) { \
if ((GE)&&!(*(GE))) \
g_set_error ((GE),(MU_ERROR_DOMAIN), \
mu_util_g_set_error ((GE), \
(MU_ERROR_INTERNAL), \
"%s: caught exception", __FUNCTION__); \
return (R); \
@ -438,6 +437,17 @@ enum _MuError {
typedef enum _MuError MuError;
/**
* set an error if it's not already set
*
* @param err errptr, or NULL
* @param errcode error code
* @param frm printf-style format, followed by paremeters
*/
void mu_util_g_set_error (GError **err, MuError errcode, const char *frm, ...)
G_GNUC_PRINTF(3,4);
#define MU_COLOR_RED "\x1b[31m"
#define MU_COLOR_GREEN "\x1b[32m"
#define MU_COLOR_YELLOW "\x1b[33m"