* introduce mu_util_g_set_error, a g_set_error wrapper
This commit is contained in:
@ -78,7 +78,7 @@ mu_store_new_read_only (const char* xpath, GError **err)
|
|||||||
return new _MuStore (xpath);
|
return new _MuStore (xpath);
|
||||||
|
|
||||||
} catch (const MuStoreError& merr) {
|
} catch (const MuStoreError& merr) {
|
||||||
g_set_error (err, MU_ERROR_DOMAIN, merr.mu_error(), "%s",
|
mu_util_g_set_error (err, merr.mu_error(), "%s",
|
||||||
merr.what().c_str());
|
merr.what().c_str());
|
||||||
|
|
||||||
} MU_XAPIAN_CATCH_BLOCK_G_ERROR(err, MU_ERROR_XAPIAN);
|
} MU_XAPIAN_CATCH_BLOCK_G_ERROR(err, MU_ERROR_XAPIAN);
|
||||||
|
|||||||
@ -443,6 +443,27 @@ mu_util_fputs_encoded (const char *str, FILE *stream)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
mu_util_g_set_error (GError **err, MuError errcode, const char *frm, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
char *msg;
|
||||||
|
|
||||||
|
/* don't bother with NULL errors, or errors already set */
|
||||||
|
if (!err || *err)
|
||||||
|
return;
|
||||||
|
|
||||||
|
msg = NULL;
|
||||||
|
va_start (ap, frm);
|
||||||
|
g_vasprintf (&msg, frm, ap);
|
||||||
|
va_end (ap);
|
||||||
|
|
||||||
|
g_set_error (err, MU_ERROR_DOMAIN, errcode, "%s", msg);
|
||||||
|
|
||||||
|
g_free (msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
print_args (FILE *stream, const char *frm, va_list args)
|
print_args (FILE *stream, const char *frm, va_list args)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -274,7 +274,6 @@ typedef gpointer XapianEnquire;
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* don't repeat these catch blocks everywhere...
|
* don't repeat these catch blocks everywhere...
|
||||||
@ -283,7 +282,7 @@ typedef gpointer XapianEnquire;
|
|||||||
|
|
||||||
#define MU_STORE_CATCH_BLOCK_RETURN(GE,R) \
|
#define MU_STORE_CATCH_BLOCK_RETURN(GE,R) \
|
||||||
catch (const MuStoreError& merr) { \
|
catch (const MuStoreError& merr) { \
|
||||||
g_set_error ((GE), (MU_ERROR_DOMAIN), \
|
mu_util_g_set_error ((GE), \
|
||||||
merr.mu_error(), "%s", \
|
merr.mu_error(), "%s", \
|
||||||
merr.what().c_str()); \
|
merr.what().c_str()); \
|
||||||
return (R); \
|
return (R); \
|
||||||
@ -300,25 +299,25 @@ typedef gpointer XapianEnquire;
|
|||||||
|
|
||||||
#define MU_XAPIAN_CATCH_BLOCK_G_ERROR(GE,E) \
|
#define MU_XAPIAN_CATCH_BLOCK_G_ERROR(GE,E) \
|
||||||
catch (const Xapian::DatabaseLockError &xerr) { \
|
catch (const Xapian::DatabaseLockError &xerr) { \
|
||||||
g_set_error ((GE),(MU_ERROR_DOMAIN), \
|
mu_util_g_set_error ((GE), \
|
||||||
MU_ERROR_XAPIAN_CANNOT_GET_WRITELOCK, \
|
MU_ERROR_XAPIAN_CANNOT_GET_WRITELOCK, \
|
||||||
"%s: xapian error '%s'", \
|
"%s: xapian error '%s'", \
|
||||||
__FUNCTION__, xerr.get_msg().c_str()); \
|
__FUNCTION__, xerr.get_msg().c_str()); \
|
||||||
} catch (const Xapian::DatabaseCorruptError &xerr) { \
|
} 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'", \
|
"%s: xapian error '%s'", \
|
||||||
__FUNCTION__, xerr.get_msg().c_str()); \
|
__FUNCTION__, xerr.get_msg().c_str()); \
|
||||||
} catch (const Xapian::DatabaseError &xerr) { \
|
} 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'", \
|
"%s: xapian error '%s'", \
|
||||||
__FUNCTION__, xerr.get_msg().c_str()); \
|
__FUNCTION__, xerr.get_msg().c_str()); \
|
||||||
} catch (const Xapian::Error &xerr) { \
|
} catch (const Xapian::Error &xerr) { \
|
||||||
g_set_error ((GE),(MU_ERROR_DOMAIN),(E), \
|
mu_util_g_set_error ((GE),(E), \
|
||||||
"%s: xapian error '%s'", \
|
"%s: xapian error '%s'", \
|
||||||
__FUNCTION__, xerr.get_msg().c_str()); \
|
__FUNCTION__, xerr.get_msg().c_str()); \
|
||||||
} catch (...) { \
|
} catch (...) { \
|
||||||
if ((GE)&&!(*(GE))) \
|
mu_util_g_set_error ((GE),(MU_ERROR_INTERNAL), \
|
||||||
g_set_error ((GE),(MU_ERROR_DOMAIN),(MU_ERROR_INTERNAL),\
|
|
||||||
"%s: caught exception", __FUNCTION__); \
|
"%s: caught exception", __FUNCTION__); \
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,13 +334,13 @@ typedef gpointer XapianEnquire;
|
|||||||
|
|
||||||
#define MU_XAPIAN_CATCH_BLOCK_G_ERROR_RETURN(GE,E,R) \
|
#define MU_XAPIAN_CATCH_BLOCK_G_ERROR_RETURN(GE,E,R) \
|
||||||
catch (const Xapian::Error &xerr) { \
|
catch (const Xapian::Error &xerr) { \
|
||||||
g_set_error ((GE),(MU_ERROR_DOMAIN),(E), \
|
mu_util_g_set_error ((GE),(E), \
|
||||||
"%s: xapian error '%s'", \
|
"%s: xapian error '%s'", \
|
||||||
__FUNCTION__, xerr.get_msg().c_str()); \
|
__FUNCTION__, xerr.get_msg().c_str()); \
|
||||||
return (R); \
|
return (R); \
|
||||||
} catch (...) { \
|
} catch (...) { \
|
||||||
if ((GE)&&!(*(GE))) \
|
if ((GE)&&!(*(GE))) \
|
||||||
g_set_error ((GE),(MU_ERROR_DOMAIN), \
|
mu_util_g_set_error ((GE), \
|
||||||
(MU_ERROR_INTERNAL), \
|
(MU_ERROR_INTERNAL), \
|
||||||
"%s: caught exception", __FUNCTION__); \
|
"%s: caught exception", __FUNCTION__); \
|
||||||
return (R); \
|
return (R); \
|
||||||
@ -438,6 +437,17 @@ enum _MuError {
|
|||||||
typedef enum _MuError 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_RED "\x1b[31m"
|
||||||
#define MU_COLOR_GREEN "\x1b[32m"
|
#define MU_COLOR_GREEN "\x1b[32m"
|
||||||
#define MU_COLOR_YELLOW "\x1b[33m"
|
#define MU_COLOR_YELLOW "\x1b[33m"
|
||||||
|
|||||||
Reference in New Issue
Block a user