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; +} /** * @} */