barbieri pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=9ac1cb4fadadb667483845a1471f091f6a60780c

commit 9ac1cb4fadadb667483845a1471f091f6a60780c
Author: Gustavo Sverzut Barbieri <[email protected]>
Date:   Thu Aug 24 11:13:56 2017 -0300

    eina_value: add helper: eina_value_struct_desc_get().
    
    this helper will validate a struct and fetch its description, also
    checking if the user version matches.
---
 src/lib/eina/eina_inline_value.x | 13 +++++++++++++
 src/lib/eina/eina_value.h        | 10 ++++++++++
 2 files changed, 23 insertions(+)

diff --git a/src/lib/eina/eina_inline_value.x b/src/lib/eina/eina_inline_value.x
index b8614c7ea9..17f9cc4b5b 100644
--- a/src/lib/eina/eina_inline_value.x
+++ b/src/lib/eina/eina_inline_value.x
@@ -1413,6 +1413,19 @@ eina_value_struct_setup(Eina_Value *value, const 
Eina_Value_Struct_Desc *sdesc)
    return EINA_TRUE;
 }
 
+static inline const Eina_Value_Struct_Desc *
+eina_value_struct_desc_get(const Eina_Value *value)
+{
+   const Eina_Value_Struct *st;
+
+   EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, NULL);
+   st = (const Eina_Value_Struct *)eina_value_memory_get(value);
+   if ((!st) || (!st->desc))
+     return NULL;
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(st->desc->version == 
EINA_VALUE_STRUCT_DESC_VERSION, NULL);
+   return st->desc;
+}
+
 static inline void *
 eina_value_struct_member_memory_get(const Eina_Value_Struct *st, const 
Eina_Value_Struct_Member *member)
 {
diff --git a/src/lib/eina/eina_value.h b/src/lib/eina/eina_value.h
index a1ed51df5f..3617bfbea6 100644
--- a/src/lib/eina/eina_value.h
+++ b/src/lib/eina/eina_value.h
@@ -3047,6 +3047,16 @@ static inline Eina_Bool 
eina_value_struct_setup(Eina_Value *value,
                                                 const Eina_Value_Struct_Desc 
*desc) EINA_ARG_NONNULL(1, 2);
 
 /**
+ * @brief Checks for a struct and get its description.
+ * @param value Value object
+ * @return structure description, with all members and size.
+ * on failure, #NULL is returned.
+ *
+ * @since 1.21
+ */
+static inline const Eina_Value_Struct_Desc *eina_value_struct_desc_get(const 
Eina_Value *value) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
+
+/**
  * @brief Sets the generic value in an struct member.
  * @param value Source value object
  * @param name Name to find the member

-- 


Reply via email to