From f0ff4ed477e7c99138ae87df2d2c8fa88fec5310 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Sat, 19 Mar 2011 00:07:23 +0000 Subject: [PATCH] +EAPI Eina_Error eina_error_find(const char *msg) SVN revision: 57863 --- legacy/eina/ChangeLog | 1 + legacy/eina/src/include/eina_error.h | 1 + legacy/eina/src/lib/eina_error.c | 29 ++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/legacy/eina/ChangeLog b/legacy/eina/ChangeLog index 831d36041c..27d46b1cf4 100644 --- a/legacy/eina/ChangeLog +++ b/legacy/eina/ChangeLog @@ -36,3 +36,4 @@ 2011-03-18 Mike Blumenkrantz * Use stringshare for eina_error messages + * add eina_error_find to match an error message with its Eina_Error diff --git a/legacy/eina/src/include/eina_error.h b/legacy/eina/src/include/eina_error.h index 1e4e5a4e4d..3e43112e3a 100644 --- a/legacy/eina/src/include/eina_error.h +++ b/legacy/eina/src/include/eina_error.h @@ -54,6 +54,7 @@ EAPI Eina_Bool eina_error_msg_modify(Eina_Error error, EAPI Eina_Error eina_error_get(void); EAPI void eina_error_set(Eina_Error err); EAPI const char *eina_error_msg_get(Eina_Error error) EINA_PURE; +EAPI Eina_Error eina_error_find(const char *msg) EINA_ARG_NONNULL(1) EINA_PURE; /** * @} diff --git a/legacy/eina/src/lib/eina_error.c b/legacy/eina/src/lib/eina_error.c index ff47405121..34a85a53d8 100644 --- a/legacy/eina/src/lib/eina_error.c +++ b/legacy/eina/src/lib/eina_error.c @@ -459,6 +459,35 @@ eina_error_set(Eina_Error err) _eina_last_error = err; } +/** + * @brief Find the #Eina_Error corresponding to a message string + * @param msg The error message string to match (NOT #NULL) + * @return The #Eina_Error matching @p msg, or 0 on failure + * This function attempts to match @p msg with its corresponding #Eina_Error value. + * If no such value is found, 0 is returned. + */ +EAPI Eina_Error +eina_error_find(const char *msg) +{ + size_t i; + + EINA_SAFETY_ON_NULL_RETURN_VAL(msg, 0); + + for (i = 0; i < _eina_errors_count; i++) + { + if (_eina_errors[i].string_allocated) + { + if (_eina_errors[i].string == msg) + return i; + } + else + { + if (!strcmp(_eina_errors[i].string, msg)) + return i; + } + } + return 0; +} /** * @} */