</para>
-<!-- ##### USER_FUNCTION gras_datadesc_type_cb_int_t ##### -->
-<para>
-
-</para>
-
-@vars:
-@data:
-@Returns:
-<!-- # Unused Parameters # -->
-@p_type:
-
-
-<!-- ##### USER_FUNCTION gras_datadesc_type_cb_void_t ##### -->
-<para>
-
-</para>
-
-@vars:
-@data:
-<!-- # Unused Parameters # -->
-@p_type:
-
-
-<!-- ##### FUNCTION gras_datadesc_by_name ##### -->
-<para>
-
-</para>
-
-@name:
-@Returns:
-<!-- # Unused Parameters # -->
-@type:
-
-
-<!-- ##### MACRO GRAS_DEFINE_TYPE ##### -->
-<para>
-
-</para>
-
-@name:
-@def:
-
-
-<!-- ##### MACRO gras_datadesc_by_symbol ##### -->
-<para>
-
-</para>
-
-@name:
-
-
-<!-- ##### FUNCTION gras_datadesc_array_fixed ##### -->
-<para>
-
-</para>
-
-@name:
-@element_type:
-@fixed_size:
-@dst:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_datadesc_array_dyn ##### -->
-<para>
-
-</para>
-
-@name:
-@element_type:
-@dynamic_size:
-@dst:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_datadesc_ref ##### -->
-<para>
-
-</para>
-
-@name:
-@referenced_type:
-@dst:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_datadesc_ref_generic ##### -->
-<para>
-
-</para>
-
-@name:
-@selector:
-@dst:
-@Returns:
-<!-- # Unused Parameters # -->
-@discriminant:
-
-
-<!-- ##### FUNCTION gras_datadesc_struct ##### -->
-<para>
-
-</para>
-
-@name:
-@dst:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_datadesc_struct_append ##### -->
-<para>
-
-</para>
-
-@struct_type:
-@name:
-@field_type:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_datadesc_struct_close ##### -->
-<para>
-
-</para>
-
-@struct_type:
-
-
-<!-- ##### FUNCTION gras_datadesc_union ##### -->
-<para>
-
-</para>
-
-@name:
-@selector:
-@dst:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_datadesc_union_append ##### -->
-<para>
-
-</para>
-
-@union_type:
-@name:
-@field_type:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_datadesc_union_close ##### -->
-<para>
-
-</para>
-
-@union_type:
-
-
-<!-- ##### FUNCTION gras_datadesc_ref_pop_arr ##### -->
-<para>
-
-</para>
-
-@element_type:
-@dst:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_datadesc_cb_send ##### -->
-<para>
-
-</para>
-
-@type:
-@pre:
-
-
-<!-- ##### FUNCTION gras_datadesc_cb_recv ##### -->
-<para>
-
-</para>
-
-@type:
-@post:
-
-
-<!-- ##### FUNCTION gras_cbps_i_pop ##### -->
-<para>
-
-</para>
-
-@ps:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cbps_i_push ##### -->
-<para>
-
-</para>
-
-@ps:
-@val:
-
-
-<!-- ##### FUNCTION gras_cbps_v_pop ##### -->
-<para>
-
-</para>
-
-@ps:
-@name:
-@ddt:
-@res:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cbps_v_push ##### -->
-<para>
-
-</para>
-
-@ps:
-@name:
-@data:
-@ddt:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cbps_v_set ##### -->
-<para>
-
-</para>
-
-@ps:
-@name:
-@data:
-@ddt:
-
-
-<!-- ##### FUNCTION gras_cbps_v_get ##### -->
-<para>
-
-</para>
-
-@ps:
-@name:
-@ddt:
-
-
-<!-- ##### FUNCTION gras_cbps_block_begin ##### -->
-<para>
-
-</para>
-
-@ps:
-
-
-<!-- ##### FUNCTION gras_cbps_block_end ##### -->
-<para>
-
-</para>
-
-@ps:
-
-
-<!-- ##### FUNCTION gras_arch_selfid ##### -->
-<para>
-
-</para>
-
-@Returns:
-
-
</para>
-<!-- ##### FUNCTION gras_msgtype_declare ##### -->
-<para>
-
-</para>
-
-@name:
-@payload:
-@Returns:
-<!-- # Unused Parameters # -->
-@dst:
-
-
-<!-- ##### FUNCTION gras_msgtype_declare_v ##### -->
-<para>
-
-</para>
-
-@name:
-@version:
-@payload:
-@Returns:
-<!-- # Unused Parameters # -->
-@dst:
-
-
-<!-- ##### FUNCTION gras_msgtype_by_name ##### -->
-<para>
-
-</para>
-
-@name:
-@Returns:
-<!-- # Unused Parameters # -->
-@dst:
-
-
-<!-- ##### FUNCTION gras_msgtype_by_namev ##### -->
-<para>
-
-</para>
-
-@name:
-@version:
-@Returns:
-<!-- # Unused Parameters # -->
-@dst:
-
-
-<!-- ##### USER_FUNCTION gras_cb_t ##### -->
-<para>
-
-</para>
-
-@expeditor:
-@payload:
-@Returns:
-<!-- # Unused Parameters # -->
-@payload_type:
-@payload_data:
-@msg:
-
-
-<!-- ##### FUNCTION gras_cb_register ##### -->
-<para>
-
-</para>
-
-@msgtype:
-@cb:
-@Returns:
-<!-- # Unused Parameters # -->
-@message:
-@TTL:
-
-
-<!-- ##### FUNCTION gras_cb_unregister ##### -->
-<para>
-
-</para>
-
-@msgtype:
-@cb:
-
-
-<!-- ##### FUNCTION gras_msg_send ##### -->
-<para>
-
-</para>
-
-@sock:
-@msgtype:
-@payload:
-@Returns:
-<!-- # Unused Parameters # -->
-@sd:
-@msg:
-@freeDirective:
-
-
-<!-- ##### FUNCTION gras_msg_wait ##### -->
-<para>
-
-</para>
-
-@timeout:
-@msgt_want:
-@expeditor:
-@payload:
-@Returns:
-<!-- # Unused Parameters # -->
-@id:
-@message:
-
-
-<!-- ##### FUNCTION gras_msg_handle ##### -->
-<para>
-
-</para>
-
-@timeOut:
-@Returns:
-
-
</para>
-<!-- ##### FUNCTION gras_socket_client ##### -->
-<para>
-
-</para>
-
-@host:
-@Param2:
-@dst:
-@Returns:
-<!-- # Unused Parameters # -->
-@bufSize:
-@sock:
-
-
-<!-- ##### FUNCTION gras_socket_server ##### -->
-<para>
-
-</para>
-
-@Param1:
-@dst:
-@Returns:
-<!-- # Unused Parameters # -->
-@bufSize:
-
-
-<!-- ##### FUNCTION gras_socket_close ##### -->
-<para>
-
-</para>
-
-@sd:
-<!-- # Unused Parameters # -->
-@sock:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_socket_peer_name ##### -->
-<para>
-
-</para>
-
-@sock:
-@Returns:
-<!-- # Unused Parameters # -->
-@sd:
-
-
-<!-- ##### FUNCTION gras_socket_peer_port ##### -->
-<para>
-
-</para>
-
-@sock:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_socket_my_port ##### -->
-<para>
-
-</para>
-
-@sock:
-@Returns:
-
-
@a4:
@a5:
+<!-- ##### MACRO CCRITICAL6 ##### -->
+<para>
+
+</para>
+
+@c:
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
<!-- ##### MACRO CDEBUG0 ##### -->
<para>
@a4:
@a5:
+<!-- ##### MACRO CDEBUG6 ##### -->
+<para>
+
+</para>
+
+@c:
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
<!-- ##### MACRO CERROR0 ##### -->
<para>
@a4:
@a5:
+<!-- ##### MACRO CERROR6 ##### -->
+<para>
+
+</para>
+
+@c:
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
<!-- ##### MACRO CINFO0 ##### -->
<para>
@a4:
@a5:
+<!-- ##### MACRO CINFO6 ##### -->
+<para>
+
+</para>
+
+@c:
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
<!-- ##### MACRO CLOG0 ##### -->
<para>
@a4:
@a5:
+<!-- ##### MACRO CRITICAL6 ##### -->
+<para>
+
+</para>
+
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
+<!-- ##### MACRO CVERB6 ##### -->
+<para>
+
+</para>
+
+@c:
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
+<!-- ##### MACRO CWARN6 ##### -->
+<para>
+
+</para>
+
+@c:
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
<!-- ##### MACRO CWARNING6 ##### -->
<para>
@childToParent:
@Returns:
+<!-- ##### MACRO DEBUG6 ##### -->
+<para>
+
+</para>
+
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
<!-- ##### FUNCTION DROP_SOCKET ##### -->
<para>
</para>
+<!-- ##### MACRO ERROR6 ##### -->
+<para>
+
+</para>
+
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
<!-- ##### FUNCTION EstablishAnEar ##### -->
<para>
@HOST_FORMAT:
@NETWORK_FORMAT:
+<!-- ##### MACRO GRAS_DEFINE_TYPE ##### -->
+<para>
+
+</para>
+
+@name:
+@def:
+
+<!-- ##### MACRO GRAS_LOG_DEFAULT_CATEGORY ##### -->
+<para>
+
+</para>
+
+@cname:
+
+<!-- ##### MACRO GRAS_LOG_EXTERNAL_CATEGORY ##### -->
+<para>
+
+</para>
+
+@cname:
+
+<!-- ##### MACRO GRAS_LOG_ISENABLED ##### -->
+<para>
+
+</para>
+
+@catName:
+@priority:
+
<!-- ##### MACRO GRAS_LOG_MAYDAY ##### -->
<para>
</para>
+<!-- ##### MACRO GRAS_LOG_NEW_CATEGORY ##### -->
+<para>
+
+</para>
+
+@catName:
+
+<!-- ##### MACRO GRAS_LOG_NEW_DEFAULT_CATEGORY ##### -->
+<para>
+
+</para>
+
+@cname:
+
+<!-- ##### MACRO GRAS_LOG_NEW_DEFAULT_SUBCATEGORY ##### -->
+<para>
+
+</para>
+
+@cname:
+@parent:
+
+<!-- ##### MACRO GRAS_LOG_NEW_SUBCATEGORY ##### -->
+<para>
+
+</para>
+
+@catName:
+@parent:
+
<!-- ##### MACRO GRAS_LOG_ROOT_CAT ##### -->
<para>
</para>
+<!-- ##### MACRO GRAS_LOG_STATIC_THRESHOLD ##### -->
+<para>
+
+</para>
+
+
<!-- ##### MACRO HAVE_DLFCN_H ##### -->
<para>
@format:
@Returns:
+<!-- ##### MACRO INFO6 ##### -->
+<para>
+
+</para>
+
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
<!-- ##### TYPEDEF IPAddress ##### -->
<para>
@sd:
@Returns:
+<!-- ##### MACRO VERB6 ##### -->
+<para>
+
+</para>
+
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
<!-- ##### MACRO VERSION ##### -->
<para>
</para>
+<!-- ##### MACRO WARN6 ##### -->
+<para>
+
+</para>
+
+@f:
+@a1:
+@a2:
+@a3:
+@a4:
+@a5:
+@a6:
+
<!-- ##### MACRO WARNING6 ##### -->
<para>
@ud:
-<!-- ##### FUNCTION gras_datadesc_cb_set_post ##### -->
+<!-- ##### FUNCTION gras_arch_selfid ##### -->
<para>
</para>
-@type:
-@post:
+@Returns:
-<!-- ##### FUNCTION gras_datadesc_cb_set_pre ##### -->
+<!-- ##### FUNCTION gras_cb_register ##### -->
<para>
</para>
-@type:
-@pre:
+@msgtype:
+@cb:
+@Returns:
+@message:
+@TTL:
-<!-- ##### FUNCTION gras_datadesc_cmp ##### -->
+<!-- ##### USER_FUNCTION gras_cb_t ##### -->
<para>
</para>
-@d1:
-@d2:
+@expeditor:
+@payload:
@Returns:
-@dd1:
-@c1:
-@dd2:
-@c2:
+@payload_type:
+@payload_data:
+@msg:
-<!-- ##### FUNCTION gras_datadesc_copy_data ##### -->
+<!-- ##### FUNCTION gras_cb_unregister ##### -->
<para>
</para>
-@dd:
-@c:
-@data:
+@msgtype:
+@cb:
-<!-- ##### MACRO gras_datadesc_declare_array ##### -->
+<!-- ##### FUNCTION gras_cbps_block_begin ##### -->
<para>
</para>
-@name:
-@elm_type:
-@size:
-@code:
+@ps:
-<!-- ##### FUNCTION gras_datadesc_declare_array_cb ##### -->
+<!-- ##### FUNCTION gras_cbps_block_end ##### -->
<para>
</para>
-@name:
-@element_type:
-@fixed_size:
-@dynamic_size:
-@post:
-@code:
-@Returns:
+@ps:
-<!-- ##### FUNCTION gras_datadesc_declare_array_dyn ##### -->
+<!-- ##### FUNCTION gras_cbps_i_pop ##### -->
<para>
</para>
-@name:
-@element_type:
-@dynamic_size:
-@dst:
+@ps:
@Returns:
-@elm_type:
-@code:
-<!-- ##### FUNCTION gras_datadesc_declare_array_fixed ##### -->
+<!-- ##### FUNCTION gras_cbps_i_push ##### -->
<para>
</para>
-@name:
-@element_type:
-@fixed_size:
-@dst:
-@Returns:
+@ps:
+@val:
-<!-- ##### FUNCTION gras_datadesc_declare_ref ##### -->
+<!-- ##### FUNCTION gras_cbps_v_get ##### -->
<para>
</para>
+@ps:
@name:
-@referenced_type:
-@dst:
+@ddt:
+
+<!-- ##### FUNCTION gras_cbps_v_pop ##### -->
+<para>
+
+</para>
+
+@ps:
+@name:
+@ddt:
+@res:
@Returns:
-@ref_type:
-@code:
-<!-- ##### FUNCTION gras_datadesc_declare_ref_cb ##### -->
+<!-- ##### FUNCTION gras_cbps_v_push ##### -->
<para>
</para>
+@ps:
@name:
-@referenced_type:
-@discriminant:
-@post:
-@code:
+@data:
+@ddt:
@Returns:
-<!-- ##### MACRO gras_datadesc_declare_ref_disc ##### -->
+<!-- ##### FUNCTION gras_cbps_v_set ##### -->
<para>
</para>
+@ps:
@name:
-@discriminant:
-@code:
+@data:
+@ddt:
-<!-- ##### FUNCTION gras_datadesc_declare_ref_generic ##### -->
+<!-- ##### FUNCTION gras_cfg_check ##### -->
+<para>
+
+</para>
+
+@cfg:
+@Returns:
+
+<!-- ##### FUNCTION gras_cfg_cpy ##### -->
+<para>
+
+</para>
+
+@whereto:
+@tocopy:
+@Returns:
+
+<!-- ##### FUNCTION gras_cfg_dump ##### -->
<para>
</para>
@name:
-@discriminant:
-@dst:
+@indent:
+@cfg:
+
+<!-- ##### FUNCTION gras_cfg_empty ##### -->
+<para>
+
+</para>
+
+@cfg:
+@name:
@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_struct ##### -->
+<!-- ##### FUNCTION gras_cfg_free ##### -->
+<para>
+
+</para>
+
+@cfg:
+
+<!-- ##### FUNCTION gras_cfg_get_double ##### -->
<para>
</para>
+@cfg:
@name:
-@dst:
+@val:
@Returns:
-@code:
-<!-- ##### MACRO gras_datadesc_declare_struct_add_code ##### -->
+<!-- ##### FUNCTION gras_cfg_get_dynar ##### -->
<para>
</para>
-@struct_code:
-@field_name:
-@field_type_code:
+@cfg:
+@name:
+@dynar:
+@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_struct_add_code_cb ##### -->
+<!-- ##### FUNCTION gras_cfg_get_host ##### -->
<para>
</para>
-@struct_code:
-@field_name:
-@field_code:
-@pre_cb:
-@post_cb:
+@cfg:
+@name:
+@host:
+@port:
@Returns:
-<!-- ##### MACRO gras_datadesc_declare_struct_add_name ##### -->
+<!-- ##### FUNCTION gras_cfg_get_int ##### -->
<para>
</para>
-@struct_code:
-@field_name:
-@field_type_name:
+@cfg:
+@name:
+@val:
+@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_struct_add_name_cb ##### -->
+<!-- ##### FUNCTION gras_cfg_get_string ##### -->
<para>
</para>
-@struct_code:
-@field_name:
-@field_type_name:
-@pre_cb:
-@post_cb:
+@cfg:
+@name:
+@val:
@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_struct_append ##### -->
+<!-- ##### FUNCTION gras_cfg_new ##### -->
<para>
</para>
-@struct_type:
+@whereto:
+@Returns:
+
+<!-- ##### FUNCTION gras_cfg_register ##### -->
+<para>
+
+</para>
+
+@cfg:
@name:
-@field_type:
+@type:
+@min:
+@max:
@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_struct_append_name ##### -->
+<!-- ##### FUNCTION gras_cfg_register_str ##### -->
<para>
</para>
-@struct_type:
+@cfg:
+@entry:
+@Returns:
+
+<!-- ##### FUNCTION gras_cfg_rm_double ##### -->
+<para>
+
+</para>
+
+@cfg:
@name:
-@field_type_name:
+@val:
@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_struct_cb ##### -->
+<!-- ##### FUNCTION gras_cfg_rm_host ##### -->
<para>
</para>
+@cfg:
@name:
-@pre_cb:
-@post_cb:
-@code:
+@host:
+@port:
@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_struct_close ##### -->
+<!-- ##### FUNCTION gras_cfg_rm_int ##### -->
<para>
</para>
-@struct_type:
+@cfg:
+@name:
+@val:
+@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_union ##### -->
+<!-- ##### FUNCTION gras_cfg_rm_string ##### -->
<para>
</para>
+@cfg:
@name:
-@selector:
-@dst:
+@val:
@Returns:
-@code:
-<!-- ##### MACRO gras_datadesc_declare_union_add_code ##### -->
+<!-- ##### FUNCTION gras_cfg_set ##### -->
<para>
</para>
-@union_code:
-@field_name:
-@field_type_code:
+@cfg:
+@Varargs:
+@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_union_add_code_cb ##### -->
+<!-- ##### FUNCTION gras_cfg_set_double ##### -->
<para>
</para>
-@union_code:
-@field_name:
-@field_code:
-@pre_cb:
-@post_cb:
+@cfg:
+@name:
+@val:
@Returns:
-<!-- ##### MACRO gras_datadesc_declare_union_add_name ##### -->
+<!-- ##### FUNCTION gras_cfg_set_host ##### -->
<para>
</para>
-@union_code:
-@field_name:
-@field_type_name:
+@cfg:
+@name:
+@host:
+@port:
+@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_union_add_name_cb ##### -->
+<!-- ##### FUNCTION gras_cfg_set_int ##### -->
<para>
</para>
-@union_code:
-@field_name:
-@field_type_name:
-@pre_cb:
-@post_cb:
+@cfg:
+@name:
+@val:
@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_union_append ##### -->
+<!-- ##### FUNCTION gras_cfg_set_parse ##### -->
<para>
</para>
-@union_type:
+@cfg:
+@options:
+@Returns:
+
+<!-- ##### FUNCTION gras_cfg_set_string ##### -->
+<para>
+
+</para>
+
+@cfg:
@name:
-@field_type:
+@val:
@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_union_append_name ##### -->
+<!-- ##### FUNCTION gras_cfg_set_vargs ##### -->
+<para>
+
+</para>
+
+@cfg:
+@pa:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_array_dyn ##### -->
<para>
</para>
-@union_type:
@name:
-@field_type_name:
+@element_type:
+@dynamic_size:
+@dst:
@Returns:
-<!-- ##### FUNCTION gras_datadesc_declare_union_cb ##### -->
+<!-- ##### FUNCTION gras_datadesc_array_fixed ##### -->
<para>
</para>
@name:
-@field_count:
+@element_type:
+@fixed_size:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_by_name ##### -->
+<para>
+
+</para>
+
+@name:
+@Returns:
+@type:
+
+<!-- ##### MACRO gras_datadesc_by_symbol ##### -->
+<para>
+
+</para>
+
+@name:
+
+<!-- ##### FUNCTION gras_datadesc_cb_recv ##### -->
+<para>
+
+</para>
+
+@type:
@post:
-@code:
+
+<!-- ##### FUNCTION gras_datadesc_cb_send ##### -->
+<para>
+
+</para>
+
+@type:
+@pre:
+
+<!-- ##### FUNCTION gras_datadesc_cb_set_post ##### -->
+<para>
+
+</para>
+
+@type:
+@post:
+
+<!-- ##### FUNCTION gras_datadesc_cb_set_pre ##### -->
+<para>
+
+</para>
+
+@type:
+@pre:
+
+<!-- ##### FUNCTION gras_datadesc_cmp ##### -->
+<para>
+
+</para>
+
+@d1:
+@d2:
@Returns:
+@dd1:
+@c1:
+@dd2:
+@c2:
-<!-- ##### FUNCTION gras_datadesc_declare_union_close ##### -->
+<!-- ##### FUNCTION gras_datadesc_copy_data ##### -->
<para>
</para>
-@union_type:
+@dd:
+@c:
+@data:
+
+<!-- ##### MACRO gras_datadesc_declare_array ##### -->
+<para>
+
+</para>
+
+@name:
+@elm_type:
+@size:
+@code:
+
+<!-- ##### FUNCTION gras_datadesc_declare_array_cb ##### -->
+<para>
+
+</para>
+
+@name:
+@element_type:
+@fixed_size:
+@dynamic_size:
+@post:
+@code:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_array_dyn ##### -->
+<para>
+
+</para>
+
+@name:
+@element_type:
+@dynamic_size:
+@dst:
+@Returns:
+@elm_type:
+@code:
+
+<!-- ##### FUNCTION gras_datadesc_declare_array_fixed ##### -->
+<para>
+
+</para>
+
+@name:
+@element_type:
+@fixed_size:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_ref ##### -->
+<para>
+
+</para>
+
+@name:
+@referenced_type:
+@dst:
+@Returns:
+@ref_type:
+@code:
+
+<!-- ##### FUNCTION gras_datadesc_declare_ref_cb ##### -->
+<para>
+
+</para>
+
+@name:
+@referenced_type:
+@discriminant:
+@post:
+@code:
+@Returns:
+
+<!-- ##### MACRO gras_datadesc_declare_ref_disc ##### -->
+<para>
+
+</para>
+
+@name:
+@discriminant:
+@code:
+
+<!-- ##### FUNCTION gras_datadesc_declare_ref_generic ##### -->
+<para>
+
+</para>
+
+@name:
+@discriminant:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_struct ##### -->
+<para>
+
+</para>
+
+@name:
+@dst:
+@Returns:
+@code:
+
+<!-- ##### MACRO gras_datadesc_declare_struct_add_code ##### -->
+<para>
+
+</para>
+
+@struct_code:
+@field_name:
+@field_type_code:
+
+<!-- ##### FUNCTION gras_datadesc_declare_struct_add_code_cb ##### -->
+<para>
+
+</para>
+
+@struct_code:
+@field_name:
+@field_code:
+@pre_cb:
+@post_cb:
+@Returns:
+
+<!-- ##### MACRO gras_datadesc_declare_struct_add_name ##### -->
+<para>
+
+</para>
+
+@struct_code:
+@field_name:
+@field_type_name:
+
+<!-- ##### FUNCTION gras_datadesc_declare_struct_add_name_cb ##### -->
+<para>
+
+</para>
+
+@struct_code:
+@field_name:
+@field_type_name:
+@pre_cb:
+@post_cb:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_struct_append ##### -->
+<para>
+
+</para>
+
+@struct_type:
+@name:
+@field_type:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_struct_append_name ##### -->
+<para>
+
+</para>
+
+@struct_type:
+@name:
+@field_type_name:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_struct_cb ##### -->
+<para>
+
+</para>
+
+@name:
+@pre_cb:
+@post_cb:
+@code:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_struct_close ##### -->
+<para>
+
+</para>
+
+@struct_type:
+
+<!-- ##### FUNCTION gras_datadesc_declare_union ##### -->
+<para>
+
+</para>
+
+@name:
+@selector:
+@dst:
+@Returns:
+@code:
+
+<!-- ##### MACRO gras_datadesc_declare_union_add_code ##### -->
+<para>
+
+</para>
+
+@union_code:
+@field_name:
+@field_type_code:
+
+<!-- ##### FUNCTION gras_datadesc_declare_union_add_code_cb ##### -->
+<para>
+
+</para>
+
+@union_code:
+@field_name:
+@field_code:
+@pre_cb:
+@post_cb:
+@Returns:
+
+<!-- ##### MACRO gras_datadesc_declare_union_add_name ##### -->
+<para>
+
+</para>
+
+@union_code:
+@field_name:
+@field_type_name:
+
+<!-- ##### FUNCTION gras_datadesc_declare_union_add_name_cb ##### -->
+<para>
+
+</para>
+
+@union_code:
+@field_name:
+@field_type_name:
+@pre_cb:
+@post_cb:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_union_append ##### -->
+<para>
+
+</para>
+
+@union_type:
+@name:
+@field_type:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_union_append_name ##### -->
+<para>
+
+</para>
+
+@union_type:
+@name:
+@field_type_name:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_union_cb ##### -->
+<para>
+
+</para>
+
+@name:
+@field_count:
+@post:
+@code:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_declare_union_close ##### -->
+<para>
+
+</para>
+
+@union_type:
+
+<!-- ##### FUNCTION gras_datadesc_from_nws ##### -->
+<para>
+
+</para>
+
+@name:
+@desc:
+@howmany:
+@code:
+@Returns:
+@dst:
+
+<!-- ##### FUNCTION gras_datadesc_import_nws ##### -->
+<para>
+
+</para>
+
+@name:
+@desc:
+@howmany:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_parse ##### -->
+<para>
+
+</para>
+
+@name:
+@Cdefinition:
+@dst:
+@Returns:
+@code:
+@def:
+
+<!-- ##### FUNCTION gras_datadesc_ref ##### -->
+<para>
+
+</para>
+
+@name:
+@referenced_type:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_ref_generic ##### -->
+<para>
+
+</para>
+
+@name:
+@selector:
+@dst:
+@Returns:
+@discriminant:
+
+<!-- ##### FUNCTION gras_datadesc_ref_pop_arr ##### -->
+<para>
+
+</para>
+
+@element_type:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_struct ##### -->
+<para>
+
+</para>
+
+@name:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_struct_append ##### -->
+<para>
+
+</para>
+
+@struct_type:
+@name:
+@field_type:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_struct_close ##### -->
+<para>
+
+</para>
+
+@struct_type:
+
+<!-- ##### USER_FUNCTION gras_datadesc_type_cb_int_t ##### -->
+<para>
+
+</para>
+
+@vars:
+@data:
+@Returns:
+@p_type:
+
+<!-- ##### USER_FUNCTION gras_datadesc_type_cb_void_t ##### -->
+<para>
+
+</para>
+
+@vars:
+@data:
+@p_type:
+
+<!-- ##### FUNCTION gras_datadesc_union ##### -->
+<para>
+
+</para>
+
+@name:
+@selector:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_union_append ##### -->
+<para>
+
+</para>
+
+@union_type:
+@name:
+@field_type:
+@Returns:
+
+<!-- ##### FUNCTION gras_datadesc_union_close ##### -->
+<para>
+
+</para>
+
+@union_type:
+
+<!-- ##### FUNCTION gras_dd_cbps_block_begin ##### -->
+<para>
+
+</para>
+
+@ps:
+
+<!-- ##### FUNCTION gras_dd_cbps_block_end ##### -->
+<para>
+
+</para>
+
+@ps:
+
+<!-- ##### FUNCTION gras_dd_cbps_get ##### -->
+<para>
+
+</para>
+
+@ps:
+@name:
+@ddt:
+
+<!-- ##### FUNCTION gras_dd_cbps_pop ##### -->
+<para>
+
+</para>
+
+@ps:
+@name:
+@ddt:
+
+<!-- ##### FUNCTION gras_dd_cbps_push ##### -->
+<para>
+
+</para>
+
+@ps:
+@name:
+@data:
+@ddt:
+
+<!-- ##### FUNCTION gras_dd_cbps_set ##### -->
+<para>
+
+</para>
+
+@ps:
+@name:
+@data:
+@ddt:
+
+<!-- ##### FUNCTION gras_ddt_free ##### -->
+<para>
+
+</para>
+
+@type:
+
+<!-- ##### FUNCTION gras_ddt_get_by_code ##### -->
+<para>
+
+</para>
+
+@code:
+@type:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_get_by_name ##### -->
+<para>
+
+</para>
+
+@name:
+@type:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_new_array ##### -->
+<para>
+
+</para>
+
+@name:
+@element_type:
+@fixed_size:
+@dynamic_size:
+@post:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_new_from_nws ##### -->
+<para>
+
+</para>
+
+@name:
+@desc:
+@howmany:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_new_ignored ##### -->
+<para>
+
+</para>
+
+@name:
+@default_value:
+@free_func:
+@size:
+@alignment:
+@post:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_new_parse ##### -->
+<para>
+
+</para>
+
+@name:
+@C_definition:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_new_ref ##### -->
+<para>
+
+</para>
+
+@name:
+@referenced_type:
+@discriminant:
+@post:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_new_scalar ##### -->
+<para>
+
+</para>
+
+@name:
+@type:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_new_struct ##### -->
+<para>
+
+</para>
+
+@name:
+@pre:
+@post:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_new_struct_append ##### -->
+<para>
+
+</para>
+
+@struct_type:
+@name:
+@field_type:
+@pre:
+@post:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_new_union ##### -->
+<para>
+
+</para>
+
+@name:
+@field_count:
+@post:
+@dst:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_new_union_append ##### -->
+<para>
+
+</para>
+
+@union_type:
+@name:
+@field_type:
+@pre:
+@post:
+@Returns:
+
+<!-- ##### FUNCTION gras_ddt_register ##### -->
+<para>
+
+</para>
+
+@type:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_cursor_free ##### -->
+<para>
+
+</para>
+
+@cursor:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_cursor_get_data ##### -->
+<para>
+
+</para>
+
+@cursor:
+@data:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_cursor_get_key ##### -->
+<para>
+
+</para>
+
+@cursor:
+@key:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_cursor_new ##### -->
+<para>
+
+</para>
+
+@head:
+@cursor:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_cursor_next ##### -->
+<para>
+
+</para>
+
+@cursor:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_cursor_rewind ##### -->
+<para>
+
+</para>
+
+@cursor:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_dump ##### -->
+<para>
+
+</para>
+
+@head:
+@output:
+@Returns:
+
+<!-- ##### MACRO gras_dict_foreach ##### -->
+<para>
+
+</para>
+
+@dict:
+@cursor:
+@key:
+@data:
+
+<!-- ##### FUNCTION gras_dict_free ##### -->
+<para>
+
+</para>
+
+@dict:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_get ##### -->
+<para>
+
+</para>
+
+@head:
+@key:
+@data:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_get_ext ##### -->
+<para>
+
+</para>
+
+@head:
+@key:
+@key_len:
+@data:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_insert ##### -->
+<para>
+
+</para>
+
+@head:
+@key:
+@data:
+@free_ctn:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_insert_ext ##### -->
+<para>
+
+</para>
+
+@head:
+@key:
+@key_len:
+@data:
+@free_ctn:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_new ##### -->
+<para>
+
+</para>
+
+@dict:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_print ##### -->
+<para>
+
+</para>
+
+@data:
+
+<!-- ##### FUNCTION gras_dict_prints ##### -->
+<para>
+
+</para>
+
+@data:
+
+<!-- ##### FUNCTION gras_dict_remove ##### -->
+<para>
+
+</para>
+
+@head:
+@key:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_remove_ext ##### -->
+<para>
+
+</para>
+
+@head:
+@key:
+@key_len:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_retrieve ##### -->
+<para>
+
+</para>
+
+@head:
+@key:
+@data:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_retrieve_ext ##### -->
+<para>
+
+</para>
+
+@head:
+@key:
+@key_len:
+@data:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_set ##### -->
+<para>
+
+</para>
+
+@head:
+@key:
+@data:
+@free_ctn:
+@Returns:
+
+<!-- ##### FUNCTION gras_dict_set_ext ##### -->
+<para>
+
+</para>
+
+@head:
+@key:
+@key_len:
+@data:
+@free_ctn:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_cursor_first ##### -->
+<para>
+
+</para>
+
+@dynar:
+@cursor:
+
+<!-- ##### FUNCTION gras_dynar_cursor_get ##### -->
+<para>
+
+</para>
+
+@dynar:
+@cursor:
+@whereto:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_cursor_rm ##### -->
+<para>
+
+</para>
+
+@dynar:
+@cursor:
+
+<!-- ##### FUNCTION gras_dynar_cursor_step ##### -->
+<para>
+
+</para>
+
+@dynar:
+@cursor:
+
+<!-- ##### FUNCTION gras_dynar_first ##### -->
+<para>
+
+</para>
+
+@dynar:
+@cursor:
+@Returns:
+
+<!-- ##### MACRO gras_dynar_foreach ##### -->
+<para>
+
+</para>
+
+@_dynar:
+@_cursor:
+@_data:
+@_whereto:
+
+<!-- ##### FUNCTION gras_dynar_free ##### -->
+<para>
+
+</para>
+
+@dynar:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_free_container ##### -->
+<para>
+
+</para>
+
+@dynar:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_get ##### -->
+<para>
+
+</para>
+
+@dynar:
+@idx:
+@dst:
+@whereto:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_insert_at ##### -->
+<para>
+
+</para>
+
+@dynar:
+@idx:
+@src:
+@Returns:
+@object:
+
+<!-- ##### FUNCTION gras_dynar_length ##### -->
+<para>
+
+</para>
+
+@dynar:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_map ##### -->
+<para>
+
+</para>
+
+@dynar:
+@operator:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_new ##### -->
+<para>
+
+</para>
+
+@whereto:
+@elm_size:
+@free_func:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_next ##### -->
+<para>
+
+</para>
+
+@dynar:
+@cursor:
+@whereto:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_pop ##### -->
+<para>
+
+</para>
+
+@dynar:
+@dst:
+@whereto:
+
+<!-- ##### FUNCTION gras_dynar_push ##### -->
+<para>
+
+</para>
+
+@dynar:
+@src:
+@Returns:
+@object:
+
+<!-- ##### FUNCTION gras_dynar_remove_at ##### -->
+<para>
+
+</para>
+
+@dynar:
+@idx:
+@object:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_remplace ##### -->
+<para>
+
+</para>
+
+@dynar:
+@idx:
+@object:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_reset ##### -->
+<para>
+
+</para>
+
+@dynar:
+@Returns:
+
+<!-- ##### FUNCTION gras_dynar_set ##### -->
+<para>
+
+</para>
+
+@dynar:
+@idx:
+@src:
+@Returns:
+@object:
+
+<!-- ##### FUNCTION gras_dynar_shift ##### -->
+<para>
+
+</para>
+
+@dynar:
+@dst:
+@whereto:
+@Returns:
-<!-- ##### FUNCTION gras_datadesc_from_nws ##### -->
+<!-- ##### FUNCTION gras_dynar_unshift ##### -->
<para>
</para>
-@name:
-@desc:
-@howmany:
-@code:
+@dynar:
+@src:
@Returns:
-@dst:
+@object:
-<!-- ##### FUNCTION gras_datadesc_import_nws ##### -->
+<!-- ##### ENUM gras_error_t ##### -->
<para>
</para>
-@name:
-@desc:
-@howmany:
-@dst:
-@Returns:
+@no_error: no error
+@malloc_error: Well known error
+@mismatch_error: Not found
+@system_error: a syscall did fail
+@network_error: error while sending/receiving data
+@timeout_error: not quick enough, dude
+@thread_error: error while [un]locking
+@unknown_error: no idea
-<!-- ##### FUNCTION gras_datadesc_parse ##### -->
+<!-- ##### FUNCTION gras_lock ##### -->
<para>
</para>
-@name:
-@Cdefinition:
-@dst:
@Returns:
-@code:
-@def:
-<!-- ##### FUNCTION gras_dd_cbps_block_begin ##### -->
+<!-- ##### FUNCTION gras_log_appender_set ##### -->
<para>
</para>
-@ps:
+@cat:
+@app:
-<!-- ##### FUNCTION gras_dd_cbps_block_end ##### -->
+<!-- ##### FUNCTION gras_log_control_set ##### -->
<para>
</para>
-@ps:
+@cs:
+@Returns:
-<!-- ##### FUNCTION gras_dd_cbps_get ##### -->
+<!-- ##### VARIABLE gras_log_default_appender ##### -->
<para>
</para>
-@ps:
-@name:
-@ddt:
-<!-- ##### FUNCTION gras_dd_cbps_pop ##### -->
+<!-- ##### FUNCTION gras_log_parent_set ##### -->
<para>
</para>
-@ps:
-@name:
-@ddt:
+@cat:
+@parent:
-<!-- ##### FUNCTION gras_dd_cbps_push ##### -->
+<!-- ##### ENUM gras_log_priority_t ##### -->
<para>
</para>
-@ps:
-@name:
-@data:
-@ddt:
+@gras_log_priority_none:
+@gras_log_priority_trace:
+@gras_log_priority_debug:
+@gras_log_priority_verbose:
+@gras_log_priority_info:
+@gras_log_priority_warning:
+@gras_log_priority_error:
+@gras_log_priority_critical:
+@gras_log_priority_infinite:
+@gras_log_priority_uninitialized:
-<!-- ##### FUNCTION gras_dd_cbps_set ##### -->
+<!-- ##### FUNCTION gras_log_threshold_set ##### -->
<para>
</para>
-@ps:
-@name:
-@data:
-@ddt:
+@cat:
+@thresholdPriority:
-<!-- ##### FUNCTION gras_ddt_free ##### -->
+<!-- ##### FUNCTION gras_msg_discard ##### -->
<para>
</para>
-@type:
+@sd:
+@size:
-<!-- ##### FUNCTION gras_ddt_get_by_code ##### -->
+<!-- ##### FUNCTION gras_msg_free ##### -->
<para>
</para>
-@code:
-@type:
-@Returns:
+@msg:
-<!-- ##### FUNCTION gras_ddt_get_by_name ##### -->
+<!-- ##### FUNCTION gras_msg_handle ##### -->
<para>
</para>
-@name:
-@type:
+@timeOut:
@Returns:
-<!-- ##### FUNCTION gras_ddt_new_array ##### -->
+<!-- ##### FUNCTION gras_msg_new ##### -->
<para>
</para>
-@name:
-@element_type:
-@fixed_size:
-@dynamic_size:
-@post:
-@dst:
+@msgId:
+@free_data_on_free:
+@seqCount:
+@Varargs:
@Returns:
-<!-- ##### FUNCTION gras_ddt_new_from_nws ##### -->
+<!-- ##### FUNCTION gras_msg_send ##### -->
<para>
</para>
-@name:
-@desc:
-@howmany:
-@dst:
+@sock:
+@msgtype:
+@payload:
@Returns:
+@sd:
+@msg:
+@freeDirective:
-<!-- ##### FUNCTION gras_ddt_new_ignored ##### -->
+<!-- ##### FUNCTION gras_msg_wait ##### -->
<para>
</para>
-@name:
-@default_value:
-@free_func:
-@size:
-@alignment:
-@post:
-@dst:
+@timeout:
+@msgt_want:
+@expeditor:
+@payload:
@Returns:
+@id:
+@message:
-<!-- ##### FUNCTION gras_ddt_new_parse ##### -->
+<!-- ##### FUNCTION gras_msgtype_by_name ##### -->
<para>
</para>
@name:
-@C_definition:
-@dst:
@Returns:
+@dst:
-<!-- ##### FUNCTION gras_ddt_new_ref ##### -->
+<!-- ##### FUNCTION gras_msgtype_by_namev ##### -->
<para>
</para>
@name:
-@referenced_type:
-@discriminant:
-@post:
-@dst:
+@version:
@Returns:
+@dst:
-<!-- ##### FUNCTION gras_ddt_new_scalar ##### -->
+<!-- ##### FUNCTION gras_msgtype_declare ##### -->
<para>
</para>
@name:
-@type:
+@payload:
@Returns:
+@dst:
-<!-- ##### FUNCTION gras_ddt_new_struct ##### -->
+<!-- ##### FUNCTION gras_msgtype_declare_v ##### -->
<para>
</para>
@name:
-@pre:
-@post:
-@dst:
+@version:
+@payload:
@Returns:
+@dst:
-<!-- ##### FUNCTION gras_ddt_new_struct_append ##### -->
+<!-- ##### FUNCTION gras_msgtype_register ##### -->
<para>
</para>
-@struct_type:
+@msgId:
@name:
-@field_type:
-@pre:
-@post:
+@sequence_count:
+@Varargs:
@Returns:
-<!-- ##### FUNCTION gras_ddt_new_union ##### -->
+<!-- ##### FUNCTION gras_os_sleep ##### -->
<para>
</para>
-@name:
-@field_count:
-@post:
-@dst:
-@Returns:
+@Param1:
+@Param2:
-<!-- ##### FUNCTION gras_ddt_new_union_append ##### -->
+<!-- ##### FUNCTION gras_os_time ##### -->
<para>
</para>
-@union_type:
-@name:
-@field_type:
-@pre:
-@post:
@Returns:
-<!-- ##### FUNCTION gras_ddt_register ##### -->
+<!-- ##### FUNCTION gras_set_add ##### -->
<para>
</para>
-@type:
+@set:
+@elm:
+@free_func:
@Returns:
-<!-- ##### FUNCTION gras_dict_cursor_next ##### -->
+<!-- ##### MACRO gras_set_foreach ##### -->
<para>
</para>
+@set:
@cursor:
-@Returns:
+@elm:
-<!-- ##### FUNCTION gras_dict_insert ##### -->
+<!-- ##### FUNCTION gras_set_free ##### -->
<para>
</para>
-@head:
-@key:
-@data:
-@free_ctn:
-@Returns:
+@set:
-<!-- ##### FUNCTION gras_dict_insert_ext ##### -->
+<!-- ##### FUNCTION gras_set_get_by_id ##### -->
<para>
</para>
-@head:
-@key:
-@key_len:
-@data:
-@free_ctn:
+@set:
+@id:
+@dst:
@Returns:
-<!-- ##### FUNCTION gras_dict_retrieve ##### -->
+<!-- ##### FUNCTION gras_set_get_by_name ##### -->
<para>
</para>
-@head:
+@set:
@key:
-@data:
+@dst:
@Returns:
-<!-- ##### FUNCTION gras_dict_retrieve_ext ##### -->
+<!-- ##### FUNCTION gras_set_get_by_name_ext ##### -->
<para>
</para>
-@head:
-@key:
-@key_len:
-@data:
+@set:
+@name:
+@name_len:
+@dst:
@Returns:
-<!-- ##### FUNCTION gras_dynar_first ##### -->
+<!-- ##### FUNCTION gras_set_new ##### -->
<para>
</para>
-@dynar:
-@cursor:
+@dst:
@Returns:
-<!-- ##### FUNCTION gras_dynar_next ##### -->
+<!-- ##### FUNCTION gras_sleep ##### -->
<para>
</para>
-@dynar:
-@cursor:
-@whereto:
-@Returns:
+@Param1:
+@Param2:
-<!-- ##### FUNCTION gras_lock ##### -->
+<!-- ##### FUNCTION gras_sock_client_open ##### -->
<para>
</para>
+@host:
+@Param2:
+@sock:
@Returns:
-<!-- ##### FUNCTION gras_log_parent_set ##### -->
+<!-- ##### FUNCTION gras_sock_close ##### -->
<para>
</para>
-@cat:
-@parent:
+@sock:
+@Returns:
-<!-- ##### FUNCTION gras_log_threshold_set ##### -->
+<!-- ##### FUNCTION gras_sock_get_peer_addr ##### -->
<para>
</para>
-@cat:
-@thresholdPriority:
+@sd:
+@Returns:
-<!-- ##### FUNCTION gras_msg_discard ##### -->
+<!-- ##### FUNCTION gras_sock_get_peer_name ##### -->
<para>
</para>
@sd:
-@size:
+@Returns:
-<!-- ##### FUNCTION gras_msg_free ##### -->
+<!-- ##### FUNCTION gras_sock_server_open ##### -->
<para>
</para>
-@msg:
+@Param1:
+@Param2:
+@sock:
+@Returns:
-<!-- ##### FUNCTION gras_msg_new ##### -->
+<!-- ##### FUNCTION gras_socket_client ##### -->
<para>
</para>
-@msgId:
-@free_data_on_free:
-@seqCount:
-@Varargs:
+@host:
+@Param2:
+@dst:
@Returns:
+@bufSize:
+@sock:
-<!-- ##### FUNCTION gras_msgtype_register ##### -->
+<!-- ##### FUNCTION gras_socket_close ##### -->
<para>
</para>
-@msgId:
-@name:
-@sequence_count:
-@Varargs:
+@sd:
+@sock:
@Returns:
-<!-- ##### FUNCTION gras_sleep ##### -->
+<!-- ##### FUNCTION gras_socket_my_port ##### -->
<para>
</para>
-@Param1:
-@Param2:
+@sock:
+@Returns:
-<!-- ##### FUNCTION gras_sock_client_open ##### -->
+<!-- ##### FUNCTION gras_socket_peer_name ##### -->
<para>
</para>
-@host:
-@Param2:
@sock:
@Returns:
+@sd:
-<!-- ##### FUNCTION gras_sock_close ##### -->
+<!-- ##### FUNCTION gras_socket_peer_port ##### -->
<para>
</para>
@sock:
@Returns:
-<!-- ##### FUNCTION gras_sock_get_peer_addr ##### -->
+<!-- ##### FUNCTION gras_socket_server ##### -->
<para>
</para>
-@sd:
+@Param1:
+@dst:
@Returns:
+@bufSize:
-<!-- ##### FUNCTION gras_sock_get_peer_name ##### -->
+<!-- ##### FUNCTION gras_time ##### -->
<para>
</para>
-@sd:
@Returns:
-<!-- ##### FUNCTION gras_sock_server_open ##### -->
+<!-- ##### FUNCTION gras_unlock ##### -->
<para>
</para>
-@Param1:
-@Param2:
-@sock:
@Returns:
-<!-- ##### FUNCTION gras_time ##### -->
+<!-- ##### FUNCTION gras_userdata_get ##### -->
<para>
</para>
-@Returns:
-<!-- ##### FUNCTION gras_unlock ##### -->
+<!-- ##### MACRO gras_userdata_new ##### -->
<para>
</para>
-@Returns:
+@type:
+
+<!-- ##### FUNCTION gras_userdata_set ##### -->
+<para>
+
+</para>
+
+@ud:
</para>
-<!-- ##### FUNCTION gras_cfg_new ##### -->
-<para>
-
-</para>
-
-@whereto:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_cpy ##### -->
-<para>
-
-</para>
-
-@whereto:
-@tocopy:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_free ##### -->
-<para>
-
-</para>
-
-@cfg:
-
-
-<!-- ##### FUNCTION gras_cfg_dump ##### -->
-<para>
-
-</para>
-
-@name:
-@indent:
-@cfg:
-
-
-<!-- ##### FUNCTION gras_cfg_register ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@type:
-@min:
-@max:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_register_str ##### -->
-<para>
-
-</para>
-
-@cfg:
-@entry:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_check ##### -->
-<para>
-
-</para>
-
-@cfg:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_set_parse ##### -->
-<para>
-
-</para>
-
-@cfg:
-@options:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_set ##### -->
-<para>
-
-</para>
-
-@cfg:
-@Varargs:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_set_vargs ##### -->
-<para>
-
-</para>
-
-@cfg:
-@pa:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_set_int ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@val:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_set_double ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@val:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_set_string ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@val:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_set_host ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@host:
-@port:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_rm_int ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@val:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_rm_double ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@val:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_rm_string ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@val:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_rm_host ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@host:
-@port:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_empty ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_get_int ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@val:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_get_double ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@val:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_get_string ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@val:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_get_host ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@host:
-@port:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_cfg_get_dynar ##### -->
-<para>
-
-</para>
-
-@cfg:
-@name:
-@dynar:
-@Returns:
-
-
</para>
-<!-- ##### FUNCTION gras_dict_new ##### -->
-<para>
-
-</para>
-
-@dict:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_free ##### -->
-<para>
-
-</para>
-
-@dict:
-<!-- # Unused Parameters # -->
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_set ##### -->
-<para>
-
-</para>
-
-@head:
-@key:
-@data:
-@free_ctn:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_set_ext ##### -->
-<para>
-
-</para>
-
-@head:
-@key:
-@key_len:
-@data:
-@free_ctn:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_get ##### -->
-<para>
-
-</para>
-
-@head:
-@key:
-@data:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_get_ext ##### -->
-<para>
-
-</para>
-
-@head:
-@key:
-@key_len:
-@data:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_remove ##### -->
-<para>
-
-</para>
-
-@head:
-@key:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_remove_ext ##### -->
-<para>
-
-</para>
-
-@head:
-@key:
-@key_len:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_dump ##### -->
-<para>
-
-</para>
-
-@head:
-@output:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_print ##### -->
-<para>
-
-</para>
-
-@data:
-
-
-<!-- ##### FUNCTION gras_dict_prints ##### -->
-<para>
-
-</para>
-
-@data:
-
-
-<!-- ##### FUNCTION gras_dict_cursor_get_data ##### -->
-<para>
-
-</para>
-
-@cursor:
-@data:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_cursor_get_key ##### -->
-<para>
-
-</para>
-
-@cursor:
-@key:
-@Returns:
-
-
-<!-- ##### MACRO gras_dict_foreach ##### -->
-<para>
-
-</para>
-
-@dict:
-@cursor:
-@key:
-@data:
-
-
-<!-- ##### FUNCTION gras_dict_cursor_new ##### -->
-<para>
-
-</para>
-
-@head:
-@cursor:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_cursor_free ##### -->
-<para>
-
-</para>
-
-@cursor:
-<!-- # Unused Parameters # -->
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dict_cursor_rewind ##### -->
-<para>
-
-</para>
-
-@cursor:
-@Returns:
-
-
</para>
-<!-- ##### FUNCTION gras_dynar_new ##### -->
-<para>
-
-</para>
-
-@whereto:
-@elm_size:
-@free_func:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_free ##### -->
-<para>
-
-</para>
-
-@dynar:
-<!-- # Unused Parameters # -->
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_free_container ##### -->
-<para>
-
-</para>
-
-@dynar:
-<!-- # Unused Parameters # -->
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_length ##### -->
-<para>
-
-</para>
-
-@dynar:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_reset ##### -->
-<para>
-
-</para>
-
-@dynar:
-<!-- # Unused Parameters # -->
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_get ##### -->
-<para>
-
-</para>
-
-@dynar:
-@idx:
-@dst:
-<!-- # Unused Parameters # -->
-@whereto:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_set ##### -->
-<para>
-
-</para>
-
-@dynar:
-@idx:
-@src:
-@Returns:
-<!-- # Unused Parameters # -->
-@object:
-
-
-<!-- ##### FUNCTION gras_dynar_remplace ##### -->
-<para>
-
-</para>
-
-@dynar:
-@idx:
-@object:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_insert_at ##### -->
-<para>
-
-</para>
-
-@dynar:
-@idx:
-@src:
-@Returns:
-<!-- # Unused Parameters # -->
-@object:
-
-
-<!-- ##### FUNCTION gras_dynar_remove_at ##### -->
-<para>
-
-</para>
-
-@dynar:
-@idx:
-@object:
-<!-- # Unused Parameters # -->
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_map ##### -->
-<para>
-
-</para>
-
-@dynar:
-@operator:
-<!-- # Unused Parameters # -->
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_push ##### -->
-<para>
-
-</para>
-
-@dynar:
-@src:
-@Returns:
-<!-- # Unused Parameters # -->
-@object:
-
-
-<!-- ##### FUNCTION gras_dynar_pop ##### -->
-<para>
-
-</para>
-
-@dynar:
-@dst:
-<!-- # Unused Parameters # -->
-@whereto:
-
-
-<!-- ##### FUNCTION gras_dynar_shift ##### -->
-<para>
-
-</para>
-
-@dynar:
-@dst:
-<!-- # Unused Parameters # -->
-@whereto:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_unshift ##### -->
-<para>
-
-</para>
-
-@dynar:
-@src:
-@Returns:
-<!-- # Unused Parameters # -->
-@object:
-
-
-<!-- ##### MACRO gras_dynar_foreach ##### -->
-<para>
-
-</para>
-
-@_dynar:
-@_cursor:
-@_data:
-<!-- # Unused Parameters # -->
-@_whereto:
-
-
-<!-- ##### FUNCTION gras_dynar_cursor_rm ##### -->
-<para>
-
-</para>
-
-@dynar:
-@cursor:
-
-
-<!-- ##### FUNCTION gras_dynar_cursor_first ##### -->
-<para>
-
-</para>
-
-@dynar:
-@cursor:
-
-
-<!-- ##### FUNCTION gras_dynar_cursor_get ##### -->
-<para>
-
-</para>
-
-@dynar:
-@cursor:
-@whereto:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_dynar_cursor_step ##### -->
-<para>
-
-</para>
-
-@dynar:
-@cursor:
-
-
</para>
-<!-- ##### ENUM gras_error_t ##### -->
-<para>
-
-</para>
-
-@no_error: no error
-@malloc_error: Well known error
-@mismatch_error: Not found
-@system_error: a syscall did fail
-@network_error: error while sending/receiving data
-@timeout_error: not quick enough, dude
-@thread_error: error while [un]locking
-@unknown_error: no idea
-
</para>
-<!-- ##### ENUM gras_log_priority_t ##### -->
-<para>
-
-</para>
-
-@gras_log_priority_none:
-@gras_log_priority_trace:
-@gras_log_priority_debug:
-@gras_log_priority_verbose:
-@gras_log_priority_info:
-@gras_log_priority_warning:
-@gras_log_priority_error:
-@gras_log_priority_critical:
-@gras_log_priority_infinite:
-@gras_log_priority_uninitialized:
-
-<!-- ##### FUNCTION gras_log_control_set ##### -->
-<para>
-
-</para>
-
-@cs:
-@Returns:
-
-
-<!-- ##### MACRO GRAS_LOG_NEW_CATEGORY ##### -->
-<para>
-
-</para>
-
-@catName:
-
-
-<!-- ##### MACRO GRAS_LOG_NEW_SUBCATEGORY ##### -->
-<para>
-
-</para>
-
-@catName:
-@parent:
-
-
-<!-- ##### MACRO GRAS_LOG_NEW_DEFAULT_CATEGORY ##### -->
-<para>
-
-</para>
-
-@cname:
-
-
-<!-- ##### MACRO GRAS_LOG_NEW_DEFAULT_SUBCATEGORY ##### -->
-<para>
-
-</para>
-
-@cname:
-@parent:
-
-
-<!-- ##### MACRO GRAS_LOG_DEFAULT_CATEGORY ##### -->
-<para>
-
-</para>
-
-@cname:
-
-
-<!-- ##### MACRO GRAS_LOG_EXTERNAL_CATEGORY ##### -->
-<para>
-
-</para>
-
-@cname:
-
-
-<!-- ##### MACRO GRAS_LOG_ISENABLED ##### -->
-<para>
-
-</para>
-
-@catName:
-@priority:
-
-
-<!-- ##### MACRO GRAS_LOG_STATIC_THRESHOLD ##### -->
-<para>
-
-</para>
-
-
-
-<!-- ##### FUNCTION gras_log_appender_set ##### -->
-<para>
-
-</para>
-
-@cat:
-@app:
-
-
-<!-- ##### VARIABLE gras_log_default_appender ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### MACRO CDEBUG6 ##### -->
-<para>
-
-</para>
-
-@c:
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO CVERB6 ##### -->
-<para>
-
-</para>
-
-@c:
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO CINFO6 ##### -->
-<para>
-
-</para>
-
-@c:
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO CWARN6 ##### -->
-<para>
-
-</para>
-
-@c:
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO CERROR6 ##### -->
-<para>
-
-</para>
-
-@c:
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO CCRITICAL6 ##### -->
-<para>
-
-</para>
-
-@c:
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO DEBUG6 ##### -->
-<para>
-
-</para>
-
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO VERB6 ##### -->
-<para>
-
-</para>
-
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO INFO6 ##### -->
-<para>
-
-</para>
-
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO WARN6 ##### -->
-<para>
-
-</para>
-
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO ERROR6 ##### -->
-<para>
-
-</para>
-
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
-<!-- ##### MACRO CRITICAL6 ##### -->
-<para>
-
-</para>
-
-@f:
-@a1:
-@a2:
-@a3:
-@a4:
-@a5:
-@a6:
-
-
</para>
-<!-- ##### FUNCTION gras_set_new ##### -->
-<para>
-
-</para>
-
-@dst:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_set_free ##### -->
-<para>
-
-</para>
-
-@set:
-
-
-<!-- ##### FUNCTION gras_set_add ##### -->
-<para>
-
-</para>
-
-@set:
-@elm:
-@free_func:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_set_get_by_name ##### -->
-<para>
-
-</para>
-
-@set:
-@key:
-@dst:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_set_get_by_name_ext ##### -->
-<para>
-
-</para>
-
-@set:
-@name:
-@name_len:
-@dst:
-@Returns:
-
-
-<!-- ##### FUNCTION gras_set_get_by_id ##### -->
-<para>
-
-</para>
-
-@set:
-@id:
-@dst:
-@Returns:
-
-
-<!-- ##### MACRO gras_set_foreach ##### -->
-<para>
-
-</para>
-
-@set:
-@cursor:
-@elm:
-
-
</para>
-<!-- ##### FUNCTION gras_userdata_get ##### -->
-<para>
-
-</para>
-
-
-
-<!-- ##### FUNCTION gras_userdata_set ##### -->
-<para>
-
-</para>
-
-@ud:
-
-
-<!-- ##### MACRO gras_userdata_new ##### -->
-<para>
-
-</para>
-
-@type:
-
-
</para>
-<!-- ##### FUNCTION gras_os_time ##### -->
-<para>
-
-</para>
-
-@Returns:
-
-
-<!-- ##### FUNCTION gras_os_sleep ##### -->
-<para>
-
-</para>
-
-@Param1:
-@Param2:
-
-
} msg_ping_t;
/* Function prototypes */
-gras_error_t register_messages(void);
+void register_messages(void);
/* Code */
-gras_error_t register_messages(void) {
- gras_error_t errcode;
-
- TRY(gras_msgtype_declare("ping", gras_datadesc_by_name("int")));
- TRY(gras_msgtype_declare("pong", gras_datadesc_by_name("int")));
+void register_messages(void) {
- return no_error;
+ gras_msgtype_declare("ping", gras_datadesc_by_name("int"));
+ gras_msgtype_declare("pong", gras_datadesc_by_name("int"));
}
/* **********************************************************************
return 1;
}
- TRYFAIL(register_messages());
- TRYFAIL(register_messages());
- TRYFAIL(gras_cb_register(gras_msgtype_by_name("ping"),&server_cb_ping_handler));
+ register_messages();
+ register_messages();
+ gras_cb_register(gras_msgtype_by_name("ping"),&server_cb_ping_handler);
INFO1("SERVER: >>>>>>>> Listening on port %d <<<<<<<<",
gras_socket_my_port(g->sock));
INFO2("Client: Connected to %s:%d.",host,port);
- TRY(register_messages());
+ register_messages();
INFO2("Client: >>>>>>>> Connected to server which is on %s:%d <<<<<<<<",
gras_socket_peer_name(g->sock),gras_socket_peer_port(g->sock));
**** Declare datadescription yourself ****
******************************************/
-gras_error_t
-gras_datadesc_struct(const char *name,
- gras_datadesc_type_t **dst);
-gras_error_t
-gras_datadesc_struct_append(gras_datadesc_type_t *struct_type,
- const char *name,
- gras_datadesc_type_t *field_type);
+gras_datadesc_type_t *
+ gras_datadesc_struct(const char *name);
+
void
-gras_datadesc_struct_close(gras_datadesc_type_t *struct_type);
-gras_error_t
-gras_datadesc_union(const char *name,
- gras_datadesc_type_cb_int_t selector,
- gras_datadesc_type_t **dst);
-gras_error_t
-gras_datadesc_union_append(gras_datadesc_type_t *union_type,
- const char *name,
- gras_datadesc_type_t *field_type);
+ gras_datadesc_struct_append(gras_datadesc_type_t *struct_type,
+ const char *name,
+ gras_datadesc_type_t *field_type);
void
-gras_datadesc_union_close(gras_datadesc_type_t *union_type);
-gras_error_t
-gras_datadesc_ref(const char *name,
- gras_datadesc_type_t *referenced_type,
- gras_datadesc_type_t **dst);
-gras_error_t
-gras_datadesc_ref_generic(const char *name,
- gras_datadesc_selector_t selector,
- gras_datadesc_type_t **dst);
-gras_error_t
-gras_datadesc_array_fixed(const char *name,
- gras_datadesc_type_t *element_type,
- long int fixed_size,
- gras_datadesc_type_t **dst);
-gras_error_t
-gras_datadesc_array_dyn(const char *name,
- gras_datadesc_type_t *element_type,
- gras_datadesc_type_cb_int_t dynamic_size,
- gras_datadesc_type_t **dst);
-gras_error_t
-gras_datadesc_ref_pop_arr(gras_datadesc_type_t *element_type,
- gras_datadesc_type_t **dst);
+ gras_datadesc_struct_close(gras_datadesc_type_t *struct_type);
+
+gras_datadesc_type_t *
+ gras_datadesc_union(const char *name,
+ gras_datadesc_type_cb_int_t selector);
+void
+ gras_datadesc_union_append(gras_datadesc_type_t *union_type,
+ const char *name,
+ gras_datadesc_type_t *field_type);
+void
+ gras_datadesc_union_close(gras_datadesc_type_t *union_type);
+
+gras_datadesc_type_t *
+ gras_datadesc_ref(const char *name,
+ gras_datadesc_type_t *referenced_type);
+gras_datadesc_type_t *
+ gras_datadesc_ref_generic(const char *name,
+ gras_datadesc_selector_t selector);
+
+gras_datadesc_type_t *
+ gras_datadesc_array_fixed(const char *name,
+ gras_datadesc_type_t *element_type,
+ long int fixed_size);
+gras_datadesc_type_t *
+ gras_datadesc_array_dyn(const char *name,
+ gras_datadesc_type_t *element_type,
+ gras_datadesc_type_cb_int_t dynamic_size);
+
+gras_datadesc_type_t *
+ gras_datadesc_ref_pop_arr(gras_datadesc_type_t *element_type);
/*********************************
* Change stuff within datadescs *
/* msgtype declaration and retrival */
typedef struct s_gras_msgtype gras_msgtype_t;
-gras_error_t gras_msgtype_declare (const char *name,
- gras_datadesc_type_t *payload);
-gras_error_t gras_msgtype_declare_v(const char *name,
- short int version,
- gras_datadesc_type_t *payload);
+void gras_msgtype_declare (const char *name,
+ gras_datadesc_type_t *payload);
+void gras_msgtype_declare_v(const char *name,
+ short int version,
+ gras_datadesc_type_t *payload);
gras_msgtype_t *gras_msgtype_by_name (const char *name);
gras_msgtype_t *gras_msgtype_by_namev(const char *name,
*/
typedef int (*gras_cb_t)(gras_socket_t *expeditor,
void *payload);
-gras_error_t gras_cb_register (gras_msgtype_t *msgtype,
- gras_cb_t cb);
-void gras_cb_unregister(gras_msgtype_t *msgtype,
- gras_cb_t cb);
+void gras_cb_register (gras_msgtype_t *msgtype,
+ gras_cb_t cb);
+void gras_cb_unregister(gras_msgtype_t *msgtype,
+ gras_cb_t cb);
gras_error_t gras_msg_send(gras_socket_t *sock,
gras_msgtype_t *msgtype,
} gras_cfgelm_type_t;
/*----[ Memory management ]-----------------------------------------------*/
-gras_error_t gras_cfg_new (gras_cfg_t **whereto); /* (whereto == NULL) is ok */
-gras_error_t gras_cfg_cpy(gras_cfg_t **whereto, gras_cfg_t *tocopy);
+void gras_cfg_new (gras_cfg_t **whereto); /* (whereto == NULL) is ok */
+void gras_cfg_cpy(gras_cfg_t **whereto, gras_cfg_t *tocopy);
void gras_cfg_free(gras_cfg_t **cfg);
void gras_cfg_dump(const char *name,const char*indent,gras_cfg_t *cfg);
/*----[ Registering stuff ]-----------------------------------------------*/
/* Register a possible cell */
-gras_error_t gras_cfg_register(gras_cfg_t *cfg,
- const char *name, gras_cfgelm_type_t type,
- int min, int max);
+void gras_cfg_register(gras_cfg_t *cfg,
+ const char *name, gras_cfgelm_type_t type,
+ int min, int max);
/* Unregister a possible cell */
gras_error_t gras_cfg_unregister(gras_cfg_t *cfg, const char *name);
/*####[ Simple dict functions ]#############################################*/
-gras_error_t gras_dict_new(gras_dict_t **dict);
-void gras_dict_free(gras_dict_t **dict);
+void gras_dict_new(gras_dict_t **dict);
+void gras_dict_free(gras_dict_t **dict);
-gras_error_t gras_dict_set (gras_dict_t *head,
- const char *key,
- void *data,
- void_f_pvoid_t *free_ctn);
-gras_error_t gras_dict_set_ext(gras_dict_t *head,
- const char *key,
- int key_len,
- void *data,
- void_f_pvoid_t *free_ctn);
+void gras_dict_set (gras_dict_t *head,
+ const char *key,
+ void *data,
+ void_f_pvoid_t *free_ctn);
+void gras_dict_set_ext(gras_dict_t *head,
+ const char *key,
+ int key_len,
+ void *data,
+ void_f_pvoid_t *free_ctn);
/*----[ gras_dict_get ]------------------------------------------------------*/
/* Search the given #key#. data=NULL when not found. */
/*----[ gras_dict_dump ]-----------------------------------------------------*/
/* Outputs the content of the structure. (for debuging purpose) */
/* #output# is a function to output the data.If NULL, data won't be displayed*/
-/* Returns if it was ok or not */
/*---------------------------------------------------------------------------*/
-gras_error_t gras_dict_dump(gras_dict_t *head,
- void (*output)(void*));
+void gras_dict_dump(gras_dict_t *head,
+ void (*output)(void*));
/*----[ gras_dict_print ]----------------------------------------------------*/
/* To dump multicache, this function dump a cache */
/*---------------------------------------------------------------------------*/
/*###########################################################################*/
typedef struct gras_dict_cursor_ gras_dict_cursor_t;
/* creator/destructor */
-gras_error_t gras_dict_cursor_new(const gras_dict_t *head,
- /*OUT*/gras_dict_cursor_t **cursor);
+void gras_dict_cursor_new(const gras_dict_t *head,
+ /*OUT*/gras_dict_cursor_t **cursor);
void gras_dict_cursor_free(gras_dict_cursor_t *cursor);
/* back to first element
it is not enough to reinit the cache after an add/remove in cache*/
-gras_error_t gras_dict_cursor_rewind(gras_dict_cursor_t *cursor);
+void gras_dict_cursor_rewind(gras_dict_cursor_t *cursor);
gras_error_t gras_dict_cursor_get_key (gras_dict_cursor_t *cursor,
typedef void (void_f_ppvoid_t)(void**);
typedef void (void_f_pvoid_t) (void*);
-gras_error_t gras_dynar_new(gras_dynar_t **whereto,
+void gras_dynar_new(gras_dynar_t **whereto,
size_t elm_size,
void_f_pvoid_t *free_func);
void gras_dynar_free(gras_dynar_t *dynar);
/* regular array functions */
-void gras_dynar_get(const gras_dynar_t *dynar,
- int idx, void *dst);
-gras_error_t gras_dynar_set(gras_dynar_t *dynar,
- int idx, const void *src);
-gras_error_t gras_dynar_remplace(gras_dynar_t *dynar,
- int idx, const void *object);
+void gras_dynar_get(const gras_dynar_t *dynar,
+ int idx, void *dst);
+void gras_dynar_set(gras_dynar_t *dynar,
+ int idx, const void *src);
+void gras_dynar_remplace(gras_dynar_t *dynar,
+ int idx, const void *object);
/* perl array function */
-gras_error_t gras_dynar_insert_at(gras_dynar_t *dynar,
- int idx, const void *src);
-void gras_dynar_remove_at(gras_dynar_t *dynar,
- int idx, void *object);
-gras_error_t gras_dynar_push (gras_dynar_t *dynar, const void *src);
-void gras_dynar_pop (gras_dynar_t *dynar, void *dst);
-gras_error_t gras_dynar_unshift (gras_dynar_t *dynar, const void *src);
-void gras_dynar_shift (gras_dynar_t *dynar, void *dst);
-void gras_dynar_map(const gras_dynar_t *dynar, void_f_pvoid_t *operator);
+void gras_dynar_insert_at(gras_dynar_t *dynar,
+ int idx, const void *src);
+void gras_dynar_remove_at(gras_dynar_t *dynar,
+ int idx, void *object);
+void gras_dynar_push (gras_dynar_t *dynar, const void *src);
+void gras_dynar_pop (gras_dynar_t *dynar, void *dst);
+void gras_dynar_unshift (gras_dynar_t *dynar, const void *src);
+void gras_dynar_shift (gras_dynar_t *dynar, void *dst);
+void gras_dynar_map (const gras_dynar_t *dynar, void_f_pvoid_t *operator);
/* cursor functions */
-void gras_dynar_cursor_first (const gras_dynar_t *dynar, int *cursor);
-void gras_dynar_cursor_step (const gras_dynar_t *dynar,
- int *cursor);
-int gras_dynar_cursor_get (const gras_dynar_t *dynar,
- int *cursor, void *whereto);
+void gras_dynar_cursor_first (const gras_dynar_t *dynar, int *cursor);
+void gras_dynar_cursor_step (const gras_dynar_t *dynar,
+ int *cursor);
+int gras_dynar_cursor_get (const gras_dynar_t *dynar,
+ int *cursor, void *whereto);
/**
* gras_dynar_foreach:
typedef enum {
no_error=0, /* succes */
- malloc_error, /* Well known error */
+// malloc_error, /* Well known error */
mismatch_error, /* The provided ID does not match */
system_error, /* a syscall did fail */
network_error, /* error while sending/receiving data */
__FILE__,__LINE__,__FUNCTION__,a1,a2,a3,a4,a5,a6); \
_GRAS_ERR_POST(code)
-#define RAISE_MALLOC RAISE0(malloc_error,"Malloc error")
+//#define RAISE_MALLOC RAISE0(malloc_error,"Malloc error")
#define RAISE_IMPOSSIBLE RAISE0(unknown_error,"The Impossible did happen")
#define RAISE_UNIMPLEMENTED RAISE1(unknown_error,"Function %s unimplemented",__FUNCTION__)
#define gras_assert5(cond,msg,a,b,c,d,e) if (!(cond)) { CRITICAL5(msg,a,b,c,d,e); gras_abort(); }
#define gras_assert6(cond,msg,a,b,c,d,e,f) if (!(cond)) { CRITICAL6(msg,a,b,c,d,e,f); gras_abort(); }
#endif
+
+#define DIE_IMPOSSIBLE gras_assert0(0,"The Impossible did happen (yet again)")
+#define gras_assert_error(a) gras_assert1(errcode == (a), "Error %s unexpected",gras_error_name(errcode))
+
END_DECL
#endif /* GRAS_ERROR_H */
/* Functions you may call */
-extern gras_error_t gras_log_control_set(const char* cs);
+extern void gras_log_control_set(const char* cs);
/* Forward declarations */
typedef struct gras_log_appender_s gras_log_appender_t;
/*####[ Functions ]##########################################################*/
-gras_error_t gras_set_new (gras_set_t **dst);
-void gras_set_free(gras_set_t **set);
+void gras_set_new (gras_set_t **dst);
+void gras_set_free(gras_set_t **set);
-gras_error_t gras_set_add (gras_set_t *set,
- gras_set_elm_t *elm,
- void_f_pvoid_t *free_func);
+void gras_set_add (gras_set_t *set,
+ gras_set_elm_t *elm,
+ void_f_pvoid_t *free_func);
/*----[ gras_set_retrieve ]-------------------------------------------------*/
/* Search the given #key#. data=NULL when not found. */
extern "C"
#endif
+char* gras_strdup (const char *str);
void* gras_malloc (long int bytes);
void* gras_malloc0 (long int bytes);
void* gras_realloc (void *memory, long int bytes);
gras_free(*(void**)d);
}
-gras_error_t
-gras_cbps_new(gras_cbps_t **dst) {
+gras_cbps_t * gras_cbps_new(void) {
gras_error_t errcode;
gras_cbps_t *res;
- if (!(res=gras_new(gras_cbps_t,1)))
- RAISE_MALLOC;
-
- TRY(gras_dynar_new(&(res->lints), sizeof(int), NULL));
+ res=gras_new(gras_cbps_t,1);
- TRY(gras_dict_new(&(res->space)));
+ gras_dynar_new(&(res->lints), sizeof(int), NULL);
+ gras_dict_new(&(res->space));
/* no leak, the content is freed manually on block_end */
- TRY(gras_dynar_new(&(res->frames), sizeof(gras_dynar_t*), NULL));
- TRY(gras_dynar_new(&(res->globals), sizeof(char*), NULL));
+ gras_dynar_new(&(res->frames), sizeof(gras_dynar_t*), NULL);
+ gras_dynar_new(&(res->globals), sizeof(char*), NULL);
gras_cbps_block_begin(res);
- *dst = res;
- return no_error;
+
+ return res;
}
-void
-gras_cbps_free(gras_cbps_t **state) {
+void gras_cbps_free(gras_cbps_t **state) {
gras_dynar_free( (*state)->lints );
*/
gras_error_t
gras_cbps_v_push(gras_cbps_t *ps,
- const char *name,
- void *data,
- gras_datadesc_type_t *ddt) {
+ const char *name,
+ void *data,
+ gras_datadesc_type_t *ddt) {
gras_dynar_t *varstack,*frame;
gras_cbps_elm_t *p_var;
int val) {
gras_error_t errcode;
DEBUG1("push %d as a size",val);
- TRYFAIL(gras_dynar_push(ps->lints,&val));
+ gras_dynar_push(ps->lints,&val);
}
/**
* gras_cbps_i_pop:
VERB0("Initializing DataDesc");
- TRYFAIL(gras_set_new(&gras_datadesc_set_local));
+ gras_set_new(&gras_datadesc_set_local);
- TRYFAIL(gras_datadesc_scalar("signed char",
- gras_ddt_scalar_char,
- e_gras_dd_scalar_encoding_sint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("char",
- gras_ddt_scalar_char,
- e_gras_dd_scalar_encoding_sint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("unsigned char",
- gras_ddt_scalar_char,
- e_gras_dd_scalar_encoding_uint,
- &ddt));
+ ddt = gras_datadesc_scalar("signed char",
+ gras_ddt_scalar_char,
+ e_gras_dd_scalar_encoding_sint);
+ ddt = gras_datadesc_scalar("char",
+ gras_ddt_scalar_char,
+ e_gras_dd_scalar_encoding_sint);
+ ddt = gras_datadesc_scalar("unsigned char",
+ gras_ddt_scalar_char,
+ e_gras_dd_scalar_encoding_uint);
- TRYFAIL(gras_datadesc_scalar("signed short int",
- gras_ddt_scalar_short,
- e_gras_dd_scalar_encoding_sint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("short int",
- gras_ddt_scalar_short,
- e_gras_dd_scalar_encoding_sint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("unsigned short int",
- gras_ddt_scalar_short,
- e_gras_dd_scalar_encoding_uint,
- &ddt));
+ ddt = gras_datadesc_scalar("signed short int",
+ gras_ddt_scalar_short,
+ e_gras_dd_scalar_encoding_sint);
+ ddt = gras_datadesc_scalar("short int",
+ gras_ddt_scalar_short,
+ e_gras_dd_scalar_encoding_sint);
+ ddt = gras_datadesc_scalar("unsigned short int",
+ gras_ddt_scalar_short,
+ e_gras_dd_scalar_encoding_uint);
- TRYFAIL(gras_datadesc_scalar("signed int",
- gras_ddt_scalar_int,
- e_gras_dd_scalar_encoding_sint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("int",
- gras_ddt_scalar_int,
- e_gras_dd_scalar_encoding_sint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("unsigned int",
- gras_ddt_scalar_int,
- e_gras_dd_scalar_encoding_uint,
- &ddt));
+ ddt = gras_datadesc_scalar("signed int",
+ gras_ddt_scalar_int,
+ e_gras_dd_scalar_encoding_sint);
+ ddt = gras_datadesc_scalar("int",
+ gras_ddt_scalar_int,
+ e_gras_dd_scalar_encoding_sint);
+ ddt = gras_datadesc_scalar("unsigned int",
+ gras_ddt_scalar_int,
+ e_gras_dd_scalar_encoding_uint);
- TRYFAIL(gras_datadesc_scalar("signed long int",
- gras_ddt_scalar_long,
- e_gras_dd_scalar_encoding_sint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("long int",
- gras_ddt_scalar_long,
- e_gras_dd_scalar_encoding_sint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("unsigned long int",
- gras_ddt_scalar_long,
- e_gras_dd_scalar_encoding_uint,
- &ddt));
+ ddt = gras_datadesc_scalar("signed long int",
+ gras_ddt_scalar_long,
+ e_gras_dd_scalar_encoding_sint);
+ ddt = gras_datadesc_scalar("long int",
+ gras_ddt_scalar_long,
+ e_gras_dd_scalar_encoding_sint);
+ ddt = gras_datadesc_scalar("unsigned long int",
+ gras_ddt_scalar_long,
+ e_gras_dd_scalar_encoding_uint);
- TRYFAIL(gras_datadesc_scalar("signed long long int",
- gras_ddt_scalar_long_long,
- e_gras_dd_scalar_encoding_sint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("long long int",
- gras_ddt_scalar_long_long,
- e_gras_dd_scalar_encoding_sint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("unsigned long long int",
- gras_ddt_scalar_long_long,
- e_gras_dd_scalar_encoding_uint,
- &ddt));
+ ddt = gras_datadesc_scalar("signed long long int",
+ gras_ddt_scalar_long_long,
+ e_gras_dd_scalar_encoding_sint);
+ ddt = gras_datadesc_scalar("long long int",
+ gras_ddt_scalar_long_long,
+ e_gras_dd_scalar_encoding_sint);
+ ddt = gras_datadesc_scalar("unsigned long long int",
+ gras_ddt_scalar_long_long,
+ e_gras_dd_scalar_encoding_uint);
- TRYFAIL(gras_datadesc_scalar("data pointer",
- gras_ddt_scalar_pdata,
- e_gras_dd_scalar_encoding_uint,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("function pointer",
- gras_ddt_scalar_pfunc,
- e_gras_dd_scalar_encoding_uint,
- &ddt));
+ ddt = gras_datadesc_scalar("data pointer",
+ gras_ddt_scalar_pdata,
+ e_gras_dd_scalar_encoding_uint);
+ ddt = gras_datadesc_scalar("function pointer",
+ gras_ddt_scalar_pfunc,
+ e_gras_dd_scalar_encoding_uint);
- TRYFAIL(gras_datadesc_scalar("float",
- gras_ddt_scalar_float,
- e_gras_dd_scalar_encoding_float,
- &ddt));
- TRYFAIL(gras_datadesc_scalar("double",
- gras_ddt_scalar_double,
- e_gras_dd_scalar_encoding_float,
- &ddt));
-
- TRYFAIL(gras_datadesc_array_dyn("char[]",
- gras_datadesc_by_name("char"),
- _strlen_cb,&ddt));
- TRYFAIL(gras_datadesc_ref("string",
- gras_datadesc_by_name("char[]"),
- &ddt));
+ ddt = gras_datadesc_scalar("float",
+ gras_ddt_scalar_float,
+ e_gras_dd_scalar_encoding_float);
+ ddt = gras_datadesc_scalar("double",
+ gras_ddt_scalar_double,
+ e_gras_dd_scalar_encoding_float);
+
+ ddt = gras_datadesc_array_dyn("char[]",
+ gras_datadesc_by_name("char"),
+ _strlen_cb);
+ ddt = gras_datadesc_ref("string",ddt);
}
***************************/
void gras_datadesc_free(gras_datadesc_type_t *type);
-gras_error_t
-gras_datadesc_scalar(const char *name,
- gras_ddt_scalar_type_t type,
- enum e_gras_dd_scalar_encoding encoding,
- gras_datadesc_type_t **dst);
+gras_datadesc_type_t *
+ gras_datadesc_scalar(const char *name,
+ gras_ddt_scalar_type_t type,
+ enum e_gras_dd_scalar_encoding encoding);
/****************************************************
* Callback persistant state constructor/destructor *
****************************************************/
-gras_error_t
-gras_cbps_new(gras_cbps_t **dst);
-void
-gras_cbps_free(gras_cbps_t **state);
+gras_cbps_t *gras_cbps_new(void);
+void gras_cbps_free(gras_cbps_t **state);
/***************
* Convertions *
}
}
-static gras_error_t
+static void
gras_ddt_new(const char *name,
gras_datadesc_type_t **dst) {
gras_error_t errcode;
GRAS_IN1("(%s)",name);
res=gras_new0(gras_datadesc_type_t,1);
- if (!res)
- RAISE_MALLOC;
res->name = (char*)strdup(name);
res->name_len = strlen(name);
*dst=res;
- TRY(gras_set_add(gras_datadesc_set_local,
- (gras_set_elm_t*)res,&gras_ddt_freev));
+ gras_set_add(gras_datadesc_set_local,
+ (gras_set_elm_t*)res,&gras_ddt_freev);
GRAS_OUT;
- return no_error;
}
/**
*
* Create a new scalar and give a pointer to it
*/
-gras_error_t
-gras_datadesc_scalar(const char *name,
- gras_ddt_scalar_type_t type,
- enum e_gras_dd_scalar_encoding encoding,
- gras_datadesc_type_t **dst) {
+gras_datadesc_type_t *
+ gras_datadesc_scalar(const char *name,
+ gras_ddt_scalar_type_t type,
+ enum e_gras_dd_scalar_encoding encoding) {
- gras_error_t errcode;
gras_datadesc_type_t *res;
long int arch;
gras_assert1(res->category.scalar_data.type == type,
"Redefinition of type %s does not match", name);
VERB1("Discarding redefinition of %s",name);
- *dst=res;
- return no_error;
+ return res;
}
- TRY(gras_ddt_new(name,dst));
- res=*dst;
+ gras_ddt_new(name,&res);
for (arch = 0; arch < gras_arch_count; arch ++) {
long int sz;
res->size[arch] = gras_arches[arch].sizeofs[type];
res->alignment[arch] = gras_arches[arch].boundaries[type];
res->aligned_size[arch] = aligned(res->size[arch], res->alignment[arch]);
+/* FIXME: kill the following after discution with Oli */
#if 0
sz = res->size[arch];
mask = sz;
res->category.scalar_data.encoding = encoding;
res->category.scalar_data.type = type;
GRAS_OUT;
- return no_error;
+
+ return res;
}
*
* Create a new struct and give a pointer to it
*/
-gras_error_t
-gras_datadesc_struct(const char *name,
- gras_datadesc_type_t **dst) {
+gras_datadesc_type_t *
+ gras_datadesc_struct(const char *name) {
gras_error_t errcode;
gras_datadesc_type_t *res;
gras_assert1(res->category_code == e_gras_datadesc_type_cat_struct,
"Redefinition of type %s does not match", name);
VERB1("Discarding redefinition of %s",name);
- *dst=res;
- return no_error;
+ return res;
}
- TRY(gras_ddt_new(name,dst));
- res=*dst;
+ gras_ddt_new(name,&res);
for (arch=0; arch<gras_arch_count; arch ++) {
res->size[arch] = 0;
res->aligned_size[arch] = 0;
}
res->category_code = e_gras_datadesc_type_cat_struct;
- TRY(gras_dynar_new(&(res->category.struct_data.fields),
- sizeof(gras_dd_cat_field_t*),
- &gras_dd_cat_field_free));
+ gras_dynar_new(&(res->category.struct_data.fields),
+ sizeof(gras_dd_cat_field_t*),
+ &gras_dd_cat_field_free);
GRAS_OUT;
- return no_error;
+ return res;
}
/**
*
* Append a field to the struct
*/
-gras_error_t
+void
gras_datadesc_struct_append(gras_datadesc_type_t *struct_type,
const char *name,
gras_datadesc_type_t *field_type) {
if (struct_type->category.struct_data.closed) {
VERB1("Ignoring request to add field to struct %s (closed. Redefinition?)",
struct_type->name);
- return no_error;
+ return;
}
gras_assert1(field_type->size != 0,
struct_type->name);
field=gras_new(gras_dd_cat_field_t,1);
- if (!field)
- RAISE_MALLOC;
-
field->name = (char*)strdup(name);
DEBUG0("----------------");
field->pre = NULL;
field->post = NULL;
- TRY(gras_dynar_push(struct_type->category.struct_data.fields, &field));
+ gras_dynar_push(struct_type->category.struct_data.fields, &field);
DEBUG3("Push a %s into %s at offset %ld.",
field_type->name, struct_type->name,field->offset[GRAS_THISARCH]);
struct_type->alignment[GRAS_THISARCH],
struct_type->aligned_size[GRAS_THISARCH]);
GRAS_OUT;
- return no_error;
}
+
void
gras_datadesc_struct_close(gras_datadesc_type_t *struct_type) {
GRAS_IN;
*
* Create a new union and give a pointer to it
*/
-gras_error_t
+gras_datadesc_type_t *
gras_datadesc_union(const char *name,
- gras_datadesc_type_cb_int_t selector,
- gras_datadesc_type_t **dst) {
+ gras_datadesc_type_cb_int_t selector) {
gras_error_t errcode;
gras_datadesc_type_t *res;
gras_assert1(res->category.union_data.selector == selector,
"Redefinition of type %s does not match", name);
VERB1("Discarding redefinition of %s",name);
- *dst=res;
- return no_error;
+ return res;
}
- TRY(gras_ddt_new(name,dst));
- res=*dst;
+ gras_ddt_new(name,&res);
for (arch=0; arch<gras_arch_count; arch ++) {
res->size[arch] = 0;
}
res->category_code = e_gras_datadesc_type_cat_union;
- TRY(gras_dynar_new(&(res->category.union_data.fields),
- sizeof(gras_dd_cat_field_t*),
- &gras_dd_cat_field_free));
+ gras_dynar_new(&(res->category.union_data.fields),
+ sizeof(gras_dd_cat_field_t*),
+ &gras_dd_cat_field_free);
res->category.union_data.selector = selector;
- return no_error;
+ return res;
}
/**
*
* Append a field to the union
*/
-gras_error_t
+void
gras_datadesc_union_append(gras_datadesc_type_t *union_type,
const char *name,
gras_datadesc_type_t *field_type) {
- gras_error_t errcode;
gras_dd_cat_field_t *field;
int arch;
if (union_type->category.union_data.closed) {
VERB1("Ignoring request to add field to union %s (closed)",
union_type->name);
- return no_error;
+ return;
}
field=gras_new0(gras_dd_cat_field_t,1);
- if (!field)
- RAISE_MALLOC;
field->name = (char*)strdup(name);
field->type = field_type;
/* All offset are left to 0 in an union */
- TRY(gras_dynar_push(union_type->category.union_data.fields, &field));
+ gras_dynar_push(union_type->category.union_data.fields, &field);
for (arch=0; arch<gras_arch_count; arch ++) {
union_type->size[arch] = max(union_type->size[arch],
union_type->aligned_size[arch] = aligned(union_type->size[arch],
union_type->alignment[arch]);
}
- return no_error;
}
void
*
* Create a new ref to a fixed type and give a pointer to it
*/
-gras_error_t
-gras_datadesc_ref(const char *name,
- gras_datadesc_type_t *referenced_type,
- gras_datadesc_type_t **dst) {
+gras_datadesc_type_t *
+ gras_datadesc_ref(const char *name,
+ gras_datadesc_type_t *referenced_type) {
gras_error_t errcode;
gras_datadesc_type_t *res;
gras_assert1(res->category.ref_data.selector == NULL,
"Redefinition of %s does not match",name);
VERB1("Discarding redefinition of %s",name);
- *dst=res;
- return no_error;
+ return res;
}
- TRY(gras_ddt_new(name,dst));
- res=*dst;
+ gras_ddt_new(name,&res);
gras_assert0(pointer_type, "Cannot get the description of data pointer");
res->category.ref_data.type = referenced_type;
res->category.ref_data.selector = NULL;
- return no_error;
+ return res;
}
/**
* gras_datadesc_ref_generic:
*
* Create a new ref to a type given at use time, and give a pointer to it
*/
-gras_error_t
-gras_datadesc_ref_generic(const char *name,
- gras_datadesc_selector_t selector,
- gras_datadesc_type_t **dst) {
+gras_datadesc_type_t *
+ gras_datadesc_ref_generic(const char *name,
+ gras_datadesc_selector_t selector) {
- gras_error_t errcode;
gras_datadesc_type_t *res;
gras_datadesc_type_t *pointer_type = gras_datadesc_by_name("data pointer");
int arch;
gras_assert1(res->category.ref_data.selector == selector,
"Redefinition of type %s does not match", name);
VERB1("Discarding redefinition of %s",name);
- *dst=res;
- return no_error;
+ return res;
}
- TRY(gras_ddt_new(name,dst));
- res=*dst;
+ gras_ddt_new(name,&res);
gras_assert0(pointer_type, "Cannot get the description of data pointer");
res->category.ref_data.type = NULL;
res->category.ref_data.selector = selector;
- return no_error;
+ return res;
}
/**
*
* Create a new array and give a pointer to it
*/
-gras_error_t
-gras_datadesc_array_fixed(const char *name,
- gras_datadesc_type_t *element_type,
- long int fixed_size,
- gras_datadesc_type_t **dst) {
+gras_datadesc_type_t *
+ gras_datadesc_array_fixed(const char *name,
+ gras_datadesc_type_t *element_type,
+ long int fixed_size) {
- gras_error_t errcode;
gras_datadesc_type_t *res;
int arch;
"Redefinition of type %s does not match", name);
VERB1("Discarding redefinition of %s",name);
- *dst=res;
- return no_error;
+ return res;
}
- TRY(gras_ddt_new(name,dst));
- res=*dst;
+ gras_ddt_new(name,&res);
gras_assert1(fixed_size > 0, "'%s' is a array of null fixed size",name);
for (arch=0; arch<gras_arch_count; arch ++) {
res->category.array_data.fixed_size = fixed_size;
res->category.array_data.dynamic_size = NULL;
- return no_error;
+ return res;
}
/**
* gras_datadesc_array_dyn:
*
* Create a new array and give a pointer to it
*/
-gras_error_t
-gras_datadesc_array_dyn(const char *name,
- gras_datadesc_type_t *element_type,
- gras_datadesc_type_cb_int_t dynamic_size,
- gras_datadesc_type_t **dst) {
+gras_datadesc_type_t *
+ gras_datadesc_array_dyn(const char *name,
+ gras_datadesc_type_t *element_type,
+ gras_datadesc_type_cb_int_t dynamic_size) {
- gras_error_t errcode;
gras_datadesc_type_t *res;
int arch;
"Redefinition of type %s does not match", name);
VERB1("Discarding redefinition of %s",name);
- *dst=res;
- return no_error;
+ return res;
}
- TRY(gras_ddt_new(name,dst));
- res=*dst;
+ gras_ddt_new(name,&res);
for (arch=0; arch<gras_arch_count; arch ++) {
res->size[arch] = 0; /* make sure it indicates "dynamic" */
res->category.array_data.fixed_size = 0;
res->category.array_data.dynamic_size = dynamic_size;
- return no_error;
+ return res;
}
/**
* list when the first field gets transfered.
*
*/
-gras_error_t
-gras_datadesc_ref_pop_arr(gras_datadesc_type_t *element_type,
- gras_datadesc_type_t **dst) {
- gras_error_t errcode;
+gras_datadesc_type_t *
+ gras_datadesc_ref_pop_arr(gras_datadesc_type_t *element_type) {
+
+ gras_datadesc_type_t *res;
char *name=(char*)gras_malloc(strlen(element_type->name) + 4);
sprintf(name,"%s[]",element_type->name);
- TRY(gras_datadesc_array_dyn(name,element_type,
- gras_datadesc_cb_pop, dst));
+ res = gras_datadesc_array_dyn(name,element_type,
+ gras_datadesc_cb_pop);
sprintf(name,"%s[]*",element_type->name);
- TRY(gras_datadesc_ref(name,*dst,dst));
+ res = gras_datadesc_ref(name,res);
gras_free(name);
- return no_error;
+ return res;
}
gras_error_t
gras_datadesc_import_nws(const char *name,
TRY(gras_dd_convert_elm(int_type,1,r_arch, i,i));
} else {
void *ptr = gras_malloc(int_type->size[r_arch]);
- if (!ptr)
- RAISE_MALLOC;
+
TRY(gras_trp_chunk_recv(sock, (char*)ptr, int_type->size[r_arch]));
if (r_arch != GRAS_THISARCH)
TRY(gras_dd_convert_elm(int_type,1,r_arch, ptr,i));
char *l_data = NULL;
gras_assert1(size>0,"Cannot allocate %ld bytes!", size);
- if (! (l_data = gras_malloc((size_t)size)) )
- RAISE_MALLOC;
+ l_data = gras_malloc((size_t)size);
*l_ref = l_data;
DEBUG2("l_data=%p, &l_data=%p",(void*)l_data,(void*)&l_data);
if (r_ref && !gras_dd_is_r_null( r_ref, r_len)) {
gras_error_t errcode;
void *ptr = gras_malloc(sizeof(void *));
- if (!ptr)
- RAISE_MALLOC;
memcpy(ptr,l_ref, sizeof(void *));
gras_cbps_t *state = NULL;
gras_dict_t *refs; /* all references already sent */
- TRY(gras_dict_new(&refs));
- TRY(gras_cbps_new(&state));
+ gras_dict_new(&refs);
+ state = gras_cbps_new();
errcode = gras_datadesc_send_rec(sock,state,refs,type,(char*)src);
TRY(gras_dd_convert_elm(type,1,r_arch, l_data,l_data));
} else {
void *ptr = gras_malloc(type->size[r_arch]);
- if (!ptr)
- RAISE_MALLOC;
+
TRY(gras_trp_chunk_recv(sock, (char*)ptr, type->size[r_arch]));
if (r_arch != GRAS_THISARCH)
TRY(gras_dd_convert_elm(type,1,r_arch, ptr,l_data));
gras_assert(pointer_type);
}
- if (! (r_ref = gras_malloc(pointer_type->size[r_arch])) )
- RAISE_MALLOC;
+ r_ref = gras_malloc(pointer_type->size[r_arch]);
+
TRY(gras_trp_chunk_recv(sock, (char*)r_ref,
pointer_type->size[r_arch]));
TRY(gras_dd_convert_elm(sub_type,count,r_arch, l_data,l_data));
} else {
ptr = gras_malloc(sub_type->aligned_size[r_arch] * count);
- if (!ptr)
- RAISE_MALLOC;
+
TRY(gras_trp_chunk_recv(sock, (char*)ptr,
sub_type->size[r_arch] * count));
if (r_arch != GRAS_THISARCH)
gras_cbps_t *state = NULL; /* callback persistent state */
gras_dict_t *refs; /* all references already sent */
- TRY(gras_dict_new(&refs));
- TRY(gras_cbps_new(&state));
+ gras_dict_new(&refs);
+ state = gras_cbps_new();
errcode = gras_datadesc_recv_rec(sock, state, refs, type,
r_arch, NULL, 0,
GRAS_OUT;
}
-static gras_error_t change_to_fixed_array(gras_dynar_t *dynar, long int size) {
- gras_error_t errcode;
+static void change_to_fixed_array(gras_dynar_t *dynar, long int size) {
identifier_t former,array;
memset(&array,0,sizeof(array));
sprintf(array.type_name,"%s[%ld]",former.type_name,size);
gras_free(former.type_name);
- TRY(gras_datadesc_array_fixed(array.type_name, former.type, size, &array.type)); /* redeclaration are ignored */
-
+ array.type = gras_datadesc_array_fixed(array.type_name, former.type, size); /* redeclaration are ignored */
array.name = former.name;
- TRY(gras_dynar_push(dynar,&array));
+ gras_dynar_push(dynar,&array);
GRAS_OUT;
- return no_error;
}
-static gras_error_t change_to_ref(gras_dynar_t *dynar) {
- gras_error_t errcode;
+static void change_to_ref(gras_dynar_t *dynar) {
identifier_t former,ref;
memset(&ref,0,sizeof(ref));
sprintf(ref.type_name,"%s*",former.type_name);
gras_free(former.type_name);
- TRY(gras_datadesc_ref(ref.type_name, former.type, &ref.type)); /* redeclaration are ignored */
-
+ ref.type = gras_datadesc_ref(ref.type_name, former.type); /* redeclaration are ignored */
ref.name = former.name;
- TRY(gras_dynar_push(dynar,&ref));
+ gras_dynar_push(dynar,&ref);
GRAS_OUT;
- return no_error;
}
-static gras_error_t change_to_ref_pop_array(gras_dynar_t *dynar) {
- gras_error_t errcode;
+static void change_to_ref_pop_array(gras_dynar_t *dynar) {
identifier_t former,ref;
memset(&ref,0,sizeof(ref));
GRAS_IN;
gras_dynar_pop(dynar,&former);
- TRY(gras_datadesc_ref_pop_arr(former.type,&ref.type)); /* redeclaration are ignored */
+ ref.type = gras_datadesc_ref_pop_arr(former.type); /* redeclaration are ignored */
ref.type_name = (char*)strdup(ref.type->name);
ref.name = former.name;
gras_free(former.type_name);
- TRY(gras_dynar_push(dynar,&ref));
+ gras_dynar_push(dynar,&ref);
GRAS_OUT;
- return no_error;
}
static gras_error_t parse_statement(char *definition,
} else if (identifier.tm.is_struct) {
sprintf(buffname,"struct %s",identifier.type_name);
- TRY(gras_datadesc_struct(buffname,&identifier.type)); /* Get created when does not exist */
+ identifier.type = gras_datadesc_struct(buffname); /* Get created when does not exist */
} else if (identifier.tm.is_unsigned) {
if (!strcmp(identifier.type_name,"int")) {
PARSE_ERROR1("Unparsable size of array (found '%c', expected number)",*end);
/* replace the previously pushed type to an array of it */
- TRY(change_to_fixed_array(identifiers,size));
+ change_to_fixed_array(identifiers,size);
/* eat the closing bracket */
gras_ddt_parse_tok_num = gras_ddt_parse_lex_n_dump();
identifier.tm.is_ref--;
if (!strcmp(keyval,"1")) {
- TRY(change_to_ref(identifiers));
+ change_to_ref(identifiers);
gras_free(keyval);
continue;
} else {
if (! isdigit(*p) )
fixed = 0;
if (fixed) {
- TRY(change_to_fixed_array(identifiers,atoi(keyval)));
- TRY(change_to_ref(identifiers));
+ change_to_fixed_array(identifiers,atoi(keyval));
+ change_to_ref(identifiers);
gras_free(keyval);
continue;
} else {
- TRY(change_to_ref_pop_array(identifiers));
- TRY(gras_dynar_push(fields_to_push,&keyval));
+ change_to_ref_pop_array(identifiers);
+ gras_dynar_push(fields_to_push,&keyval);
continue;
}
}
identifier.name=(char*)strdup(gras_ddt_parse_text);
DEBUG1("Found the identifier \"%s\"",identifier.name);
- TRY(gras_dynar_push(identifiers, &identifier));
+ gras_dynar_push(identifiers, &identifier);
DEBUG1("Dynar_len=%lu",gras_dynar_length(identifiers));
expect_id_separator = 1;
continue;
gras_datadesc_type_t *struct_type;
GRAS_IN;
- errcode=gras_dynar_new(&identifiers,sizeof(identifier_t),NULL);
- errcode=gras_dynar_new(&fields_to_push,sizeof(char*),NULL);
- if (errcode != no_error) {
- GRAS_OUT;
- return NULL;
- }
+ gras_dynar_new(&identifiers,sizeof(identifier_t),NULL);
+ gras_dynar_new(&fields_to_push,sizeof(char*),NULL);
/* Create the struct descriptor */
if (gras_ddt_parse_tok_num == GRAS_DDT_PARSE_TOKEN_WORD) {
- TRYFAIL(gras_datadesc_struct(gras_ddt_parse_text,&struct_type));
+ struct_type = gras_datadesc_struct(gras_ddt_parse_text);
VERB1("Parse the struct '%s'", gras_ddt_parse_text);
gras_ddt_parse_tok_num = gras_ddt_parse_lex_n_dump();
} else {
sprintf(buffname,"anonymous struct %d",anonymous_struct++);
VERB1("Parse the anonymous struct nb %d", anonymous_struct);
- TRYFAIL(gras_datadesc_struct(buffname,&struct_type));
+ struct_type = gras_datadesc_struct(buffname);
}
if (gras_ddt_parse_tok_num != GRAS_DDT_PARSE_TOKEN_LA)
field.name,field.tm.is_ref);
VERB2("Append field '%s' to %p",field.name, (void*)struct_type);
- TRYFAIL(gras_datadesc_struct_append(struct_type, field.name, field.type));
+ gras_datadesc_struct_append(struct_type, field.name, field.type);
gras_free(field.name);
gras_free(field.type_name);
VERB0("Initializing Msg");
- TRYFAIL(gras_set_new(&_gras_msgtype_set));
+ gras_set_new(&_gras_msgtype_set);
memcpy(GRAS_header,"GRAS", 4);
GRAS_header[4]=GRAS_PROTOCOL_VERSION;
namev = (char*)gras_malloc(strlen(name)+2+3+1);
- if (namev) {
+ if (namev)
sprintf(namev,"%s_v%d",name,ver);
- }
+
return namev;
}
*
* Registers a message to the GRAS mecanism.
*/
-gras_error_t
-gras_msgtype_declare(const char *name,
- gras_datadesc_type_t *payload) {
- return gras_msgtype_declare_v(name, 0, payload);
+void gras_msgtype_declare(const char *name,
+ gras_datadesc_type_t *payload) {
+ gras_msgtype_declare_v(name, 0, payload);
}
/**
* will be handled as an independent message type, so you can register
* differents for each of them.
*/
-gras_error_t
+void
gras_msgtype_declare_v(const char *name,
short int version,
gras_datadesc_type_t *payload) {
gras_msgtype_t *msgtype;
char *namev=make_namev(name,version);
- if (!namev)
- RAISE_MALLOC;
-
errcode = gras_set_get_by_name(_gras_msgtype_set,
namev,(gras_set_elm_t**)&msgtype);
namev,gras_datadesc_get_name(payload),
gras_datadesc_get_name(msgtype->ctn_type));
- return no_error; /* do really ignore it */
+ return ; /* do really ignore it */
- } else if (errcode == mismatch_error) {
- INFO3("Register version %d of message '%s' (payload: %s).",
- version, name, gras_datadesc_get_name(payload));
- } else {
- return errcode; /* Was expecting for mismatch_error */
}
+ gras_assert_error(mismatch_error); /* expect this error */
+ INFO3("Register version %d of message '%s' (payload: %s).",
+ version, name, gras_datadesc_get_name(payload));
- if (! (msgtype = gras_new(gras_msgtype_t,1)) )
- RAISE_MALLOC;
-
+ msgtype = gras_new(gras_msgtype_t,1);
msgtype->name = (namev == name ? strdup(name) : namev);
msgtype->name_len = strlen(namev);
msgtype->version = version;
msgtype->ctn_type = payload;
- TRY(gras_set_add(_gras_msgtype_set, (gras_set_elm_t*)msgtype,
- &gras_msgtype_free));
-
- return no_error;
+ gras_set_add(_gras_msgtype_set, (gras_set_elm_t*)msgtype,
+ &gras_msgtype_free);
}
/**
msg.type = msgt_got;
msg.payload = payload;
msg.payload_size = payload_size_got;
- TRY(gras_dynar_push(pd->msg_queue,&msg));
+ gras_dynar_push(pd->msg_queue,&msg);
now=gras_os_time();
if (now - start + 0.001 < timeout) {
}
}
-gras_error_t
+void
gras_cb_register(gras_msgtype_t *msgtype,
gras_cb_t cb) {
- gras_error_t errcode;
gras_procdata_t *pd=gras_procdata_get();
gras_cblist_t *list=NULL;
int cpt;
if (!list) {
/* First cb? Create room */
list = gras_new(gras_cblist_t,1);
- if (!list)
- RAISE_MALLOC;
-
list->id = msgtype->code;
- TRY(gras_dynar_new(&(list->cbs), sizeof(gras_cb_t), NULL));
- TRY(gras_dynar_push(pd->cbl_list,&list));
+ gras_dynar_new(&(list->cbs), sizeof(gras_cb_t), NULL);
+ gras_dynar_push(pd->cbl_list,&list);
}
/* Insert the new one into the set */
- TRY(gras_dynar_insert_at(list->cbs,0,&cb));
-
- return no_error;
+ gras_dynar_insert_at(list->cbs,0,&cb);
}
void
RAISE3(system_error,"invalid select: nb fds: %d, timeout: %d.%d",
max_fds, (int)tout.tv_sec,(int) tout.tv_usec);
case ENOMEM:
- RAISE_MALLOC;
+ gras_assert0(0,"Malloc error during the select");
default:
RAISE2(system_error,"Error during select: %s (%d)",
strerror(errno),errno);
TRY(gras_trp_plugin_get_by_name("buf",&trp));
- TRY(gras_trp_socket_new(1,dst));
+ gras_trp_socket_new(1,dst);
(*dst)->plugin = trp;
(*dst)->incoming = 1;
(*dst)->port = -1;
- if (!(sockdata = gras_new(gras_trp_sg_sock_data_t,1)))
- RAISE_MALLOC;
-
+ sockdata = gras_new(gras_trp_sg_sock_data_t,1);
sockdata->from_PID = MSG_process_self_PID();
sockdata->to_PID = r_pid;
sockdata->to_host = MSG_process_get_host(MSG_process_from_PID(r_pid));
static void gras_trp_socket_free(void *s); /* free one socket */
-gras_error_t
-gras_trp_plugin_new(const char *name, gras_trp_setup_t setup);
-
-gras_error_t
+static void
gras_trp_plugin_new(const char *name, gras_trp_setup_t setup) {
gras_error_t errcode;
DEBUG1("Create plugin %s",name);
- if (!plug)
- RAISE_MALLOC;
-
- plug->name=(char*)strdup(name);
- if (!plug->name)
- RAISE_MALLOC;
+ plug->name=gras_strdup(name);
errcode = setup(plug);
switch (errcode) {
break;
case no_error:
- TRY(gras_dict_set(_gras_trp_plugins,
- name, plug, gras_trp_plugin_free));
+ gras_dict_set(_gras_trp_plugins,
+ name, plug, gras_trp_plugin_free);
break;
default:
- gras_free(plug);
- return errcode;
+ DIE_IMPOSSIBLE;
}
- return no_error;
+
}
-gras_error_t
+void
gras_trp_init(void){
- gras_error_t errcode;
/* make room for all plugins */
- TRY(gras_dict_new(&_gras_trp_plugins));
+ gras_dict_new(&_gras_trp_plugins);
/* Add them */
- TRY(gras_trp_plugin_new("tcp", gras_trp_tcp_setup));
- TRY(gras_trp_plugin_new("file",gras_trp_file_setup));
- TRY(gras_trp_plugin_new("sg",gras_trp_sg_setup));
+ gras_trp_plugin_new("tcp", gras_trp_tcp_setup);
+ gras_trp_plugin_new("file",gras_trp_file_setup);
+ gras_trp_plugin_new("sg",gras_trp_sg_setup);
/* buf is composed, so it must come after the others */
- TRY(gras_trp_plugin_new("buf", gras_trp_buf_setup));
+ gras_trp_plugin_new("buf", gras_trp_buf_setup);
- return no_error;
}
void
*
* Malloc a new socket, and initialize it with defaults
*/
-gras_error_t gras_trp_socket_new(int incoming,
- gras_socket_t **dst) {
+void gras_trp_socket_new(int incoming,
+ gras_socket_t **dst) {
- gras_socket_t *sock;
+ gras_socket_t *sock=gras_new(gras_socket_t,1);
- if (! (sock=gras_new(gras_socket_t,1)) )
- RAISE_MALLOC;
DEBUG1("Create a new socket (%p)", (void*)sock);
sock->plugin = NULL;
*dst = sock;
- return gras_dynar_push(gras_socketset_get(),dst);
+ gras_dynar_push(gras_socketset_get(),dst);
}
TRY(gras_trp_plugin_get_by_name("buf",&trp));
/* defaults settings */
- TRY(gras_trp_socket_new(1,&sock));
+ gras_trp_socket_new(1,&sock);
sock->plugin= trp;
sock->port=port;
sock->bufSize = bufSize;
DEBUG1("Create a client socket from plugin %s",gras_if_RL() ? "tcp" : "sg");
/* defaults settings */
- TRY(gras_trp_socket_new(0,&sock));
+ gras_trp_socket_new(0,&sock);
sock->plugin= trp;
sock->peer_port = port;
sock->peer_name = (char*)strdup(host?host:"localhost");
int buffsize;
};
-gras_error_t gras_trp_buf_init_sock(gras_socket_t *sock) {
+void gras_trp_buf_init_sock(gras_socket_t *sock) {
gras_trp_bufdata_t *data=gras_new(gras_trp_bufdata_t,1);
GRAS_IN;
- if (!data)
- RAISE_MALLOC;
- data->in.size = 0;
data->buffsize = 100 * 1024 ; /* 100k */
- if (!(data->in.data = (char*)gras_malloc(data->buffsize)))
- RAISE_MALLOC;
+ data->in.size = 0;
+ data->in.data = gras_malloc(data->buffsize);
data->in.pos = 0; /* useless, indeed, since size==pos */
+
data->out.size = 0;
- if (!(data->out.data = (char*)gras_malloc(data->buffsize)))
- RAISE_MALLOC;
+ data->out.data = gras_malloc(data->buffsize);
data->out.pos = 0;
+
sock->bufdata = data;
- return no_error;
}
gras_trp_buf_setup(gras_trp_plugin_t *plug) {
gras_error_t errcode;
gras_trp_buf_plug_data_t *data =gras_new(gras_trp_buf_plug_data_t,1);
- if (!data)
- RAISE_MALLOC;
GRAS_IN;
TRY(gras_trp_plugin_get_by_name(gras_if_RL() ? "tcp" : "sg",
GRAS_IN;
TRY(super->socket_client(super,sock));
sock->plugin = self;
- TRY(gras_trp_buf_init_sock(sock));
+ gras_trp_buf_init_sock(sock);
return no_error;
}
GRAS_IN;
TRY(super->socket_server(super,sock));
sock->plugin = self;
- TRY(gras_trp_buf_init_sock(sock));
+ gras_trp_buf_init_sock(sock);
return no_error;
}
GRAS_IN;
TRY(super->socket_accept(sock,dst));
(*dst)->plugin = sock->plugin;
- TRY(gras_trp_buf_init_sock(*dst));
+ gras_trp_buf_init_sock(*dst);
return no_error;
}
gras_trp_file_setup(gras_trp_plugin_t *plug) {
gras_trp_file_plug_data_t *file = gras_new(gras_trp_file_plug_data_t,1);
- if (!file)
- RAISE_MALLOC;
FD_ZERO(&(file->incoming_socks));
plug->socket_close = gras_trp_file_close;
-
plug->chunk_send = gras_trp_file_chunk_send;
plug->chunk_recv = gras_trp_file_chunk_recv;
-
plug->data = (void*)file;
return no_error;
gras_assert0(gras_if_RL(),
"Cannot use file as socket in the simulator");
- TRY(gras_trp_socket_new(0,dst));
+ gras_trp_socket_new(0,dst);
TRY(gras_trp_plugin_get_by_name("file",&trp));
(*dst)->plugin=trp;
gras_assert0(gras_if_RL(),
"Cannot use file as socket in the simulator");
- TRY(gras_trp_socket_new(1,dst));
+ gras_trp_socket_new(1,dst);
TRY(gras_trp_plugin_get_by_name("file",&trp));
(*dst)->plugin=trp;
gras_trp_sg_plug_data_t *data=gras_new(gras_trp_sg_plug_data_t,1);
- if (!data)
- RAISE_MALLOC;
-
plug->data = data;
plug->socket_client = gras_trp_sg_socket_client;
}
/* create the socket */
- if (!(data = gras_new(gras_trp_sg_sock_data_t,1)))
- RAISE_MALLOC;
-
+ data = gras_new(gras_trp_sg_sock_data_t,1);
data->from_PID = MSG_process_self_PID();
data->to_PID = hd->proc[ pr.tochan ];
data->to_host = peer;
pr.tochan = sock->raw ? pd->rawChan : pd->chan;
pr.port = sock->port;
pr.raw = sock->raw;
- TRY(gras_dynar_push(hd->ports,&pr));
+ gras_dynar_push(hd->ports,&pr);
default:
return errcode;
}
/* Create the socket */
- if (!(data = gras_new(gras_trp_sg_sock_data_t,1)))
- RAISE_MALLOC;
-
+ data = gras_new(gras_trp_sg_sock_data_t,1);
data->from_PID = -1;
data->to_PID = MSG_process_self_PID();
data->to_host = MSG_host_self();
sprintf(name,"Chunk[%d]",count++);
- if (!(task_data=gras_new(sg_task_data_t,1)))
- RAISE_MALLOC;
- if (!(task_data->data=(void*)gras_malloc(size)))
- RAISE_MALLOC;
+ task_data=gras_new(sg_task_data_t,1);
+ task_data->data=(void*)gras_malloc(size);
task_data->size = size;
memcpy(task_data->data,data,size);
/***
*** Code
***/
-gras_error_t
-gras_trp_tcp_setup(gras_trp_plugin_t *plug) {
+gras_error_t gras_trp_tcp_setup(gras_trp_plugin_t *plug) {
gras_trp_tcp_plug_data_t *data = gras_new(gras_trp_tcp_plug_data_t,1);
- if (!data)
- RAISE_MALLOC;
FD_ZERO(&(data->msg_socks));
FD_ZERO(&(data->raw_socks));
int tmp_errno;
int size;
- TRY(gras_trp_socket_new(1,&res));
+ gras_trp_socket_new(1,&res);
sd = accept(sock->sd, (struct sockaddr *)&peer_in, &peer_in_len);
tmp_errno = errno;
struct timeval timeOut;
- if (!(chunk = (char *)gras_malloc(msg_size)))
- RAISE_MALLOC;
+ chunk = gras_malloc(msg_size);
for (exp_sofar=0; exp_sofar < exp_size; exp_size += msg_sofar) {
for(msg_sofar=0; msg_sofar < msg_size; msg_size += res_last) {
gras_trp_bufdata_t *bufdata;
};
-gras_error_t gras_trp_socket_new(int incomming,
- gras_socket_t **dst);
+void gras_trp_socket_new(int incomming,
+ gras_socket_t **dst);
/* The drivers */
typedef gras_error_t (*gras_trp_setup_t)(gras_trp_plugin_t *dst);
*/
-gras_error_t gras_trp_buf_init_sock(gras_socket_t *sock);
+void gras_trp_buf_init_sock(gras_socket_t *sock);
/* Data exchange over raw sockets */
pd->userdata = ud;
}
-gras_error_t
+void
gras_procdata_init() {
- gras_error_t errcode;
gras_procdata_t *pd=gras_procdata_get();
pd->userdata = NULL;
- TRY(gras_dynar_new(&(pd->msg_queue), sizeof(gras_msg_t), NULL));
- TRY(gras_dynar_new(&(pd->cbl_list), sizeof(gras_cblist_t *),gras_cbl_free));
- TRY(gras_dynar_new(&(pd->sockets), sizeof(gras_socket_t*), NULL));
- return no_error;
+ gras_dynar_new(&(pd->msg_queue), sizeof(gras_msg_t), NULL);
+ gras_dynar_new(&(pd->cbl_list), sizeof(gras_cblist_t *),gras_cbl_free);
+ gras_dynar_new(&(pd->sockets), sizeof(gras_socket_t*), NULL);
}
void
static gras_procdata_t *_gras_procdata = NULL;
gras_error_t gras_process_init() {
- gras_error_t errcode;
-
- if (!(_gras_procdata=gras_new(gras_procdata_t,1)))
- RAISE_MALLOC;
-
- TRY(gras_procdata_init());
+ _gras_procdata=gras_new(gras_procdata_t,1);
+ gras_procdata_init();
return no_error;
}
gras_error_t gras_process_exit() {
gras_sg_portrec_t prraw,pr;
int i;
- if (!(pd=gras_new(gras_procdata_t,1)))
- RAISE_MALLOC;
+ pd=gras_new(gras_procdata_t,1);
- if (MSG_process_set_data(MSG_process_self(),(void*)pd) != MSG_OK) {
+ if (MSG_process_set_data(MSG_process_self(),(void*)pd) != MSG_OK)
return unknown_error;
- }
- TRY(gras_procdata_init());
+ gras_procdata_init();
if (!hd) {
- if (!(hd=gras_new(gras_hostdata_t,1)))
- RAISE_MALLOC;
-
- TRY(gras_dynar_new(&(hd->ports),sizeof(gras_sg_portrec_t),NULL));
+ hd=gras_new(gras_hostdata_t,1);
+ gras_dynar_new(&(hd->ports),sizeof(gras_sg_portrec_t),NULL);
memset(hd->proc, 0, sizeof(hd->proc[0]) * GRAS_MAX_CHANNEL);
- if (MSG_host_set_data(MSG_host_self(),(void*)hd) != MSG_OK) {
+ if (MSG_host_set_data(MSG_host_self(),(void*)hd) != MSG_OK)
return unknown_error;
- }
}
/* take a free channel for this process */
pr.port = -1;
pr.tochan = i;
pr.raw = 0;
- TRY(gras_dynar_push(hd->ports,&pr));
+ gras_dynar_push(hd->ports,&pr);
/* take a free RAW channel for this process */
for (i=0; i<GRAS_MAX_CHANNEL && hd->proc[i]; i++);
prraw.port = -1;
prraw.tochan = i;
prraw.raw = 1;
- TRY(gras_dynar_push(hd->ports,&prraw));
+ gras_dynar_push(hd->ports,&prraw);
VERB2("Creating process '%s' (%d)",
MSG_process_get_name(MSG_process_self()),
/* FIXME: mv to _private? */
gras_procdata_t *gras_procdata_get(void);
-gras_error_t gras_procdata_init(void);
+void gras_procdata_init(void);
void gras_procdata_exit(void);
#endif /* GRAS_VIRTU_INTERFACE_H */
/* modules initialization functions */
void gras_msg_init(void);
void gras_msg_exit(void);
-gras_error_t gras_trp_init(void); /* FIXME */
-void gras_trp_exit(void);
+void gras_trp_init(void);
+void gras_trp_exit(void);
void gras_datadesc_init(void);
void gras_datadesc_exit(void);
*/
-gras_error_t gras_cfg_new(gras_cfg_t **whereto) {
- return gras_dict_new((gras_dict_t**)whereto);
+void gras_cfg_new(gras_cfg_t **whereto) {
+ gras_dict_new((gras_dict_t**)whereto);
}
/**
*
*/
-gras_error_t
+void
gras_cfg_cpy(gras_cfg_t **whereto, gras_cfg_t *tocopy) {
gras_dict_cursor_t *cursor=NULL;
gras_cfgelm_t *cell=NULL;
char *name=NULL;
- int errcode=no_error;
*whereto=NULL;
gras_assert0(tocopy,"cannot copy NULL config");
gras_dict_foreach((gras_dict_t*)tocopy,cursor,name,cell) {
- if ((errcode=gras_cfg_register(*whereto, name, cell->type,
- cell->min, cell->max)) != no_error) {
- if (cursor) gras_dict_cursor_free(cursor);
- if (*whereto) gras_cfg_free(whereto);
- return errcode;
- }
+ gras_cfg_register(*whereto, name, cell->type, cell->min, cell->max);
}
-
- return errcode;
}
void gras_cfg_free(gras_cfg_t **cfg) {
* register an element within a config set
*/
-gras_error_t
+void
gras_cfg_register(gras_cfg_t *cfg,
const char *name, gras_cfgelm_type_t type,
int min, int max){
gras_error_t errcode;
DEBUG4("Register cfg elm %s (%d to %d %s)",name,min,max,gras_cfgelm_type_name[type]);
- TRYCATCH(mismatch_error,gras_dict_get((gras_dict_t*)cfg,name,(void**)&res));
+ errcode = gras_dict_get((gras_dict_t*)cfg,name,(void**)&res);
- if (errcode != mismatch_error) {
+ if (errcode == no_error) {
WARN1("Config elem %s registered twice.",name);
/* Will be removed by the insertion of the new one */
}
+ gras_assert_error(mismatch_error);
res=gras_new(gras_cfgelm_t,1);
- if (!res)
- RAISE_MALLOC;
res->type=type;
res->min=min;
switch (type) {
case gras_cfgelm_int:
- TRY(gras_dynar_new(&(res->content), sizeof(int), NULL));
+ gras_dynar_new(&(res->content), sizeof(int), NULL);
break;
case gras_cfgelm_double:
- TRY(gras_dynar_new(&(res->content), sizeof(double), NULL));
+ gras_dynar_new(&(res->content), sizeof(double), NULL);
break;
case gras_cfgelm_string:
- TRY(gras_dynar_new(&(res->content),sizeof(char*),&gras_cfg_str_free));
+ gras_dynar_new(&(res->content),sizeof(char*),&gras_cfg_str_free);
break;
case gras_cfgelm_host:
- TRY(gras_dynar_new(&(res->content),sizeof(gras_host_t*),&gras_cfg_host_free));
+ gras_dynar_new(&(res->content),sizeof(gras_host_t*),&gras_cfg_host_free);
break;
default:
ERROR1("%d is an invalide type code",type);
}
- return gras_dict_set((gras_dict_t*)cfg,name,res,&gras_cfgelm_free);
+ gras_dict_set((gras_dict_t*)cfg,name,res,&gras_cfgelm_free);
}
/**
gras_error_t
gras_cfg_register_str(gras_cfg_t *cfg,const char *entry) {
- char *entrycpy=(char*)strdup(entry);
+ char *entrycpy=gras_strdup(entry);
char *tok;
int min,max;
gras_cfgelm_type_t type;
- gras_error_t errcode;
-
tok=strchr(entrycpy, ':');
if (!tok) {
ERROR3("%s%s%s",
gras_abort();
}
- TRYCLEAN(gras_cfg_register(cfg,entrycpy,type,min,max),
- gras_free(entrycpy));
+ gras_cfg_register(cfg,entrycpy,type,min,max);
gras_free(entrycpy); /* strdup'ed by dict mechanism, but cannot be const */
return no_error;
if (!options || !strlen(options)) { /* nothing to do */
return no_error;
}
- optionlist_cpy=(char*)strdup(options);
+ optionlist_cpy=gras_strdup(options);
DEBUG1("List to parse and set:'%s'",options);
option=optionlist_cpy;
TRY (gras_cfgelm_get(cfg,name,gras_cfgelm_int,&cell));
if (cell->max > 1) {
- return gras_dynar_push(cell->content,&val);
+ gras_dynar_push(cell->content,&val);
} else {
- return gras_dynar_set(cell->content,0,&val);
+ gras_dynar_set(cell->content,0,&val);
}
+ return no_error;
}
/**
TRY (gras_cfgelm_get(cfg,name,gras_cfgelm_double,&cell));
if (cell->max > 1) {
- return gras_dynar_push(cell->content,&val);
+ gras_dynar_push(cell->content,&val);
} else {
- return gras_dynar_set(cell->content,0,&val);
+ gras_dynar_set(cell->content,0,&val);
}
+ return no_error;
}
/**
gras_cfg_set_string(gras_cfg_t *cfg,const char*name, const char*val) {
gras_cfgelm_t *cell;
gras_error_t errcode;
- char *newval = (char*)strdup(val);
+ char *newval = gras_strdup(val);
VERB2("Configuration setting: %s=%s",name,val);
TRY (gras_cfgelm_get(cfg,name,gras_cfgelm_string,&cell));
if (cell->max > 1) {
- return gras_dynar_push(cell->content,&newval);
+ gras_dynar_push(cell->content,&newval);
} else {
- return gras_dynar_set(cell->content,0,&newval);
+ gras_dynar_set(cell->content,0,&newval);
}
+ return no_error;
}
/**
gras_host_t *val=gras_new(gras_host_t,1);
VERB3("Configuration setting: %s=%s:%d",name,host,port);
- if (!val)
- RAISE_MALLOC;
- val->name = (char*)strdup(name);
+
+ val->name = gras_strdup(name);
val->port = port;
TRY (gras_cfgelm_get(cfg,name,gras_cfgelm_host,&cell));
if (cell->max > 1) {
- return gras_dynar_push(cell->content,&val);
+ gras_dynar_push(cell->content,&val);
} else {
- return gras_dynar_set(cell->content,0,&val);
+ gras_dynar_set(cell->content,0,&val);
}
+ return no_error;
}
/* ---- [ Removing ] ---- */
*
* Creates and initialize a new dictionnary
*/
-gras_error_t
+void
gras_dict_new(gras_dict_t **whereto) {
- gras_dict_t *dict;
-
- if (!(dict = calloc(1, sizeof(gras_dict_t))))
- RAISE_MALLOC;
- dict->head=NULL;
+ (*whereto) = gras_new(gras_dict_t,1);
+ (*whereto)->head=NULL;
- *whereto = dict;
-
- return no_error;
}
/**
* gras_dict_free:
* set the @data in the structure under the @key, which can be any kind
* of data, as long as its length is provided in @key_len.
*/
-gras_error_t
+void
gras_dict_set_ext(gras_dict_t *p_dict,
- const char *key,
- int key_len,
- void *data,
- void_f_pvoid_t *free_ctn) {
+ const char *key,
+ int key_len,
+ void *data,
+ void_f_pvoid_t *free_ctn) {
gras_assert(p_dict);
- return gras_dictelm_set_ext(&(p_dict->head),
- key, key_len, data, free_ctn);
+ gras_dictelm_set_ext(&(p_dict->head),
+ key, key_len, data, free_ctn);
}
/**
* set the @data in the structure under the @key, which is a
* null terminated string.
*/
-gras_error_t
+void
gras_dict_set(gras_dict_t *p_dict,
const char *key,
void *data,
gras_assert(p_dict);
- return gras_dictelm_set(&(p_dict->head), key, data, free_ctn);
+ gras_dictelm_set(&(p_dict->head), key, data, free_ctn);
}
/**
* function to output the data. If NULL, data won't be displayed.
*/
-gras_error_t
+void
gras_dict_dump(gras_dict_t *dict,
void_f_pvoid_t *output) {
printf("Dict %p:\n", (void*)dict);
- return gras_dictelm_dump(dict ? dict->head: NULL, output);
+ gras_dictelm_dump(dict ? dict->head: NULL, output);
}
#include "gras_private.h"
#include "dict_private.h"
-#include <stdlib.h> /* malloc() */
#include <string.h> /* strlen() */
GRAS_LOG_EXTERNAL_CATEGORY(dict);
gras_dictelm_t *head;
};
-static _GRAS_INLINE
-gras_error_t
+static _GRAS_INLINE void
_cursor_push_keys(gras_dict_cursor_t *p_cursor,
gras_dictelm_t *p_elm);
*
* Structure creator
*/
-gras_error_t
+void
gras_dict_cursor_new(const gras_dict_t *p_head,
/*OUT*/gras_dict_cursor_t **pp_cursor) {
gras_error_t errcode = no_error;
gras_dict_cursor_t *p_cursor = NULL;
- p_cursor = malloc(sizeof(gras_dict_cursor_t));
- if (!p_cursor)
- RAISE_MALLOC;
+ p_cursor = gras_new(gras_dict_cursor_t,1);
- TRY(gras_dynar_new(&p_cursor->keys, sizeof(char **), NULL));
- TRY(gras_dynar_new(&p_cursor->key_lens, sizeof(int *), NULL));
+ gras_dynar_new(&p_cursor->keys, sizeof(char **), NULL);
+ gras_dynar_new(&p_cursor->key_lens, sizeof(int *), NULL);
p_cursor->pos = 0;
p_cursor->pos_len = 0;
p_cursor->head = p_head ? p_head->head : NULL;
- TRY(gras_dict_cursor_rewind(p_cursor));
+ gras_dict_cursor_rewind(p_cursor);
*pp_cursor = p_cursor;
- return errcode;
}
/**
gras_dynar_free(p_cursor->keys);
gras_dynar_free(p_cursor->key_lens);
memset(p_cursor, 0, sizeof(gras_dict_cursor_t));
- free(p_cursor);
+ gras_free(p_cursor);
}
}
static _GRAS_INLINE
-gras_error_t
+void
_cursor_push_keys(gras_dict_cursor_t *p_cursor,
gras_dictelm_t *p_elm) {
gras_error_t errcode = no_error;
CDEBUG1(dict_cursor, "Push childs of %p in the cursor", (void*)p_elm);
if (p_elm->content) {
- TRY(gras_dynar_push(p_cursor->keys, &p_elm->key ));
- TRY(gras_dynar_push(p_cursor->key_lens, &p_elm->key_len));
+ gras_dynar_push(p_cursor->keys, &p_elm->key );
+ gras_dynar_push(p_cursor->key_lens, &p_elm->key_len);
count++;
}
gras_dynar_foreach(p_elm->sub, i, p_child) {
if (p_child)
- TRY(_cursor_push_keys(p_cursor, p_child));
+ _cursor_push_keys(p_cursor, p_child);
}
CDEBUG1(dict_cursor, "Count = %d", count);
-
- return errcode;
}
/**
*
* back to the first element
*/
-gras_error_t
+void
gras_dict_cursor_rewind(gras_dict_cursor_t *p_cursor) {
gras_error_t errcode = no_error;
gras_dynar_reset(p_cursor->key_lens);
if (!p_cursor->head)
- return no_error;
+ return ;
- TRY(_cursor_push_keys(p_cursor, p_cursor->head));
+ _cursor_push_keys(p_cursor, p_cursor->head);
gras_dynar_cursor_first(p_cursor->keys, &p_cursor->pos );
gras_dynar_cursor_first(p_cursor->key_lens, &p_cursor->pos_len);
- return errcode;
}
/**
*/
void gras_dict_cursor_first (const gras_dict_t *dict,
gras_dict_cursor_t **cursor){
- gras_error_t errcode;
if (!*cursor) {
DEBUG0("Create the cursor on first use");
- errcode = gras_dict_cursor_new(dict,cursor);
- gras_assert1(errcode == no_error, "Unable to create the cursor, got error %s",
- gras_error_name(errcode));
+ gras_dict_cursor_new(dict,cursor);
}
- errcode = gras_dict_cursor_rewind(*cursor);
- gras_assert1(errcode == no_error, "Unable to rewind the cursor before use, got error %s",
- gras_error_name(errcode));
+ gras_dict_cursor_rewind(*cursor);
}
#include "gras_private.h"
#include "dict_private.h" /* prototypes of this module */
-#include <stdlib.h> /* malloc() */
-#include <string.h> /* strlen() */
-
-#include <stdio.h>
-
GRAS_LOG_EXTERNAL_CATEGORY(dict);
GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(dict_elm,dict,"Dictionaries internals");
/*####[ Private prototypes ]#################################################*/
-static _GRAS_INLINE gras_error_t _gras_dictelm_alloc(char *key,
- int offset,
- int key_len,
- void *data,
- void_f_pvoid_t *free_ctn,
- /*OUT*/gras_dictelm_t **where);
+static _GRAS_INLINE void _gras_dictelm_alloc(char *key,
+ int offset,
+ int key_len,
+ void *data,
+ void_f_pvoid_t *free_ctn,
+ /*OUT*/gras_dictelm_t **where);
static void _dictelm_wrapper_free(void*);
static _GRAS_INLINE void _str_prefix_lgr(const char *key1,
- int key_len1,
- const char *key2,
- int key_len2,
- int *offset,
- int *match);
+ int key_len1,
+ const char *key2,
+ int key_len2,
+ int *offset,
+ int *match);
-static gras_error_t _gras_dictelm_dump_rec(gras_dictelm_t *head,
- int offset,
- void_f_pvoid_t *output);
+static void _gras_dictelm_dump_rec(gras_dictelm_t *head,
+ int offset,
+ void_f_pvoid_t *output);
-static gras_error_t _gras_dictelm_set_rec(gras_dictelm_t *head,
- char *key,
- int key_len,
- int offset,
- void *data,
- void_f_pvoid_t *free_ctn);
+static void _gras_dictelm_set_rec(gras_dictelm_t *head,
+ char *key,
+ int key_len,
+ int offset,
+ void *data,
+ void_f_pvoid_t *free_ctn);
static gras_error_t _gras_dictelm_get_rec(gras_dictelm_t *head,
const char *key,
int key_len,
static _GRAS_INLINE
void *
-memdup(const void * const ptr,
- const size_t length) {
+gras_memdup(const void * const ptr,
+ const size_t length) {
void * new_ptr = NULL;
- new_ptr = malloc(length);
-
- if (new_ptr) {
- memcpy(new_ptr, ptr, length);
- }
-
+ new_ptr = gras_malloc(length);
+ memcpy(new_ptr, ptr, length);
+
return new_ptr;
}
*
* Alloc a dict element with no child.
*/
-static
-_GRAS_INLINE
-gras_error_t
+static _GRAS_INLINE
+void
_gras_dictelm_alloc(char *key,
int key_len,
int offset,
gras_error_t errcode = no_error;
gras_dictelm_t *p_elm = NULL;
- if (!(p_elm = calloc(1, sizeof(gras_dictelm_t)))) {
- if (free_ctn && data) {
- free_ctn(data);
- }
-
- RAISE_MALLOC;
- }
+ p_elm = gras_new(gras_dictelm_t,1);
p_elm->key = key;
p_elm->key_len = key_len;
p_elm->content = data;
p_elm->free_ctn = free_ctn;
- errcode = gras_dynar_new(&(p_elm->sub), sizeof(gras_dictelm_t*),
- _dictelm_wrapper_free);
- if (errcode != no_error) {
- if (free_ctn && data) {
- free_ctn(data);
- }
- free(p_elm);
- return errcode;
- }
+ gras_dynar_new(&(p_elm->sub), sizeof(gras_dictelm_t*), _dictelm_wrapper_free);
*pp_elm = p_elm;
- return errcode;
}
/**
gras_dynar_free(p_elm->sub);
if (p_elm->key) {
- free(p_elm->key);
+ gras_free(p_elm->key);
}
if (p_elm->free_ctn && p_elm->content) {
memset(p_elm, 0, sizeof (*p_elm));
- free(p_elm);
+ gras_free(p_elm);
*pp_elm = NULL;
}
}
* This is a helper function to gras_dict_set which locks the struct and
* strdup the key before action.
*/
-gras_error_t
+void
_gras_dictelm_set_rec(gras_dictelm_t *p_head,
char *key,
int key_len,
int offset,
void *data,
void_f_pvoid_t *free_ctn) {
- gras_error_t errcode = no_error;
int match = 0;
int pos = 0;
const int old_offset = offset;
CDEBUG0(dict_add, "--> Change the value of head");
_gras_dictelm_change_value(p_head, data, free_ctn);
- free(key); /* Keep the key used in the tree */
+ gras_free(key); /* Keep the key used in the tree */
- return errcode;
+ return;
}
/*** Search where to add this child, and how ***/
{
gras_dictelm_t *p_child = NULL;
- TRY(_gras_dictelm_alloc(key, key_len, offset, data, free_ctn, &p_child));
+ _gras_dictelm_alloc(key, key_len, offset, data, free_ctn, &p_child);
CDEBUG1(dict_add, "-> Add a child %p", (void*)p_child);
- TRY(gras_dynar_insert_at(p_head->sub, pos, &p_child));
+ gras_dynar_insert_at(p_head->sub, pos, &p_child);
- return errcode;
+ return;
}
case 1: /* A child have exactly this key => change its value*/
CDEBUG1(dict_add, "-> Change the value of the child %p", (void*)p_child);
_gras_dictelm_change_value(p_child, data, free_ctn);
- free(key);
+ gras_free(key);
- return errcode;
+ return;
}
case 2: /* A child constitutes a prefix of the key => recurse */
gras_dynar_get(p_head->sub, pos, &p_child);
CDEBUG2(dict_add,"-> Recurse on %p (offset=%d)", (void*)p_child, offset);
- return _gras_dictelm_set_rec(p_child, key, key_len,
- offset, data, free_ctn);
+ _gras_dictelm_set_rec(p_child, key, key_len,
+ offset, data, free_ctn);
+ return;
}
case 3: /* The key is a prefix of the child => child becomes child of p_new */
gras_dictelm_t *p_child = NULL;
gras_dynar_get(p_head->sub, pos, &p_child);
- TRY(_gras_dictelm_alloc(key, key_len, old_offset, data, free_ctn, &p_new));
+ _gras_dictelm_alloc(key, key_len, old_offset, data, free_ctn, &p_new);
CDEBUG2(dict_add, "-> The child %p become child of new dict (%p)",
(void*)p_child, (void*)p_new);
- TRY(gras_dynar_push(p_new->sub, &p_child));
+ gras_dynar_push(p_new->sub, &p_child);
p_child->offset = offset;
- TRY(gras_dynar_set(p_head->sub, pos, &p_new));
+ gras_dynar_set(p_head->sub, pos, &p_new);
- return errcode;
+ return;
}
case 4: /* A child share a common prefix with this key => Common ancestor */
char *anc_key = NULL;
int anc_key_len = offset;
- TRY(_gras_dictelm_alloc(key, key_len, offset, data, free_ctn, &p_new));
+ _gras_dictelm_alloc(key, key_len, offset, data, free_ctn, &p_new);
gras_dynar_get(p_head->sub, pos, &p_child);
- anc_key = memdup(key, anc_key_len);
+ anc_key = gras_memdup(key, anc_key_len);
- TRY(_gras_dictelm_alloc(anc_key, anc_key_len, old_offset,
- NULL, NULL, &p_anc));
+ _gras_dictelm_alloc(anc_key, anc_key_len, old_offset, NULL, NULL, &p_anc);
CDEBUG3(dict_add, "-> Make a common ancestor %p (%.*s)",
(void*)p_anc, anc_key_len, anc_key);
if (key[offset] < p_child->key[offset]) {
- TRY(gras_dynar_push(p_anc->sub, &p_new));
- TRY(gras_dynar_push(p_anc->sub, &p_child));
+ gras_dynar_push(p_anc->sub, &p_new);
+ gras_dynar_push(p_anc->sub, &p_child);
} else {
- TRY(gras_dynar_push(p_anc->sub, &p_child));
- TRY(gras_dynar_push(p_anc->sub, &p_new));
+ gras_dynar_push(p_anc->sub, &p_child);
+ gras_dynar_push(p_anc->sub, &p_new);
}
p_child->offset = offset;
- TRY(gras_dynar_set(p_head->sub, pos, &p_anc));
+ gras_dynar_set(p_head->sub, pos, &p_anc);
- return errcode;
+ return;
}
default:
- RAISE_IMPOSSIBLE;
+ DIE_IMPOSSIBLE;
}
-
}
/**
* set the @data in the structure under the @key, which can be any kind
* of data, as long as its length is provided in @key_len.
*/
-gras_error_t
+void
gras_dictelm_set_ext(gras_dictelm_t **pp_head,
const char *_key,
int key_len,
void *data,
void_f_pvoid_t *free_ctn) {
- gras_error_t errcode = no_error;
gras_dictelm_t *p_head = *pp_head;
char *key = NULL;
- key = memdup(_key, key_len);
- if (!key)
- RAISE_MALLOC;
+ key = gras_memdup(_key, key_len);
/* there is no head, create it */
if (!p_head) {
CDEBUG0(dict_add, "Create an head");
/* The head is priviledged by being the only one with a NULL key */
- TRY(_gras_dictelm_alloc(NULL, 0, 0, NULL, NULL, &p_head));
+ _gras_dictelm_alloc(NULL, 0, 0, NULL, NULL, &p_head);
- TRY(_gras_dictelm_alloc(key, key_len, 0, data, free_ctn, &p_child));
- TRY(gras_dynar_insert_at(p_head->sub, 0, &p_child));
+ _gras_dictelm_alloc(key, key_len, 0, data, free_ctn, &p_child);
+ gras_dynar_insert_at(p_head->sub, 0, &p_child);
*pp_head = p_head;
- return errcode;
+ return;
}
- return _gras_dictelm_set_rec(p_head, key, key_len, 0, data, free_ctn);
+ _gras_dictelm_set_rec(p_head, key, key_len, 0, data, free_ctn);
}
/**
* set the @data in the structure under the @key, which is a
* null terminated string.
*/
-gras_error_t
+void
gras_dictelm_set(gras_dictelm_t **pp_head,
const char *_key,
void *data,
void_f_pvoid_t *free_ctn) {
- return gras_dictelm_set_ext(pp_head, _key, 1+strlen(_key), data, free_ctn);
+ gras_dictelm_set_ext(pp_head, _key, 1+strlen(_key), data, free_ctn);
}
/**
p_head->content = p_child->content;
p_head->free_ctn = p_child->free_ctn;
- free(p_head->key);
+ gras_free(p_head->key);
p_head->key = p_child->key;
p_head->key_len = p_child->key_len;
gras_dynar_free_container(p_head->sub) ;
p_head->sub = p_child->sub;
- free(p_child);
+ gras_free(p_child);
}
/**
/* private function to do the job of gras_dict_dump recursively */
/*---------------------------------------------------------------------------*/
static
-gras_error_t
+void
_gras_dictelm_dump_rec(gras_dictelm_t *p_head,
int offset,
void_f_pvoid_t *output) {
- gras_error_t errcode = no_error;
gras_dictelm_t *p_child = NULL;
char *key = NULL;
int key_len = 0;
int i = 0;
if (!p_head)
- return no_error;
+ return;
printf("[%p] ", (void*)p_head);
key = p_head->key;
key_len = p_head->key_len;
- if (key_len) {
+ if (key_len)
printf (" ");
- }
- for (i = 0; i < offset; i++) {
+ for (i = 0; i < offset; i++)
printf("-");
- }
fflush(stdout);
} else {
char *key_string = NULL;
- key_string = malloc(key_len*2+1);
- if (!key_string)
- RAISE_MALLOC;
-
+ key_string = gras_malloc(key_len*2+1);
_gras_bytes_to_string(key, key_len, key_string);
printf("%.*s|(%d)", key_len-offset, key_string + offset, offset);
- free(key_string);
+ gras_free(key_string);
}
}
printf(" \t\t\t[ %lu child(s) ]\n", gras_dynar_length(p_head->sub));
gras_dynar_foreach(p_head->sub, i, p_child)
- TRY(_gras_dictelm_dump_rec(p_child, p_child->offset, output));
+ _gras_dictelm_dump_rec(p_child, p_child->offset, output);
- return errcode;
}
/**
* function to output the data. If NULL, data won't be displayed.
*/
-gras_error_t
+void
gras_dictelm_dump(gras_dictelm_t *p_head,
void_f_pvoid_t *output) {
- return _gras_dictelm_dump_rec(p_head, 0, output);
+ _gras_dictelm_dump_rec(p_head, 0, output);
}
/**
};
/*####[ Function prototypes ]################################################*/
-void gras_dictelm_free (gras_dictelm_t **pp_elm);
-
-gras_error_t gras_dictelm_set (gras_dictelm_t **pp_head,
- const char *_key,
- void *data,
- void_f_pvoid_t *free_ctn);
-gras_error_t gras_dictelm_set_ext (gras_dictelm_t **pp_head,
- const char *_key,
- int key_len,
- void *data,
- void_f_pvoid_t *free_ctn);
+void gras_dictelm_free (gras_dictelm_t **pp_elm);
+
+void gras_dictelm_set (gras_dictelm_t **pp_head,
+ const char *_key,
+ void *data,
+ void_f_pvoid_t *free_ctn);
+void gras_dictelm_set_ext (gras_dictelm_t **pp_head,
+ const char *_key,
+ int key_len,
+ void *data,
+ void_f_pvoid_t *free_ctn);
gras_error_t gras_dictelm_get (gras_dictelm_t *p_head,
const char *key,
const char *key,
int key_len);
-gras_error_t gras_dictelm_dump (gras_dictelm_t *p_head,
+void gras_dictelm_dump (gras_dictelm_t *p_head,
void_f_pvoid_t *output);
void gras_dictelm_print_fct (void *data);
char * const new_data = gras_malloc0(elmsize*new_size);
DEBUG3("expend %p from %lu to %d elements", (void*)dynar, (unsigned long)old_size, nb);
- if (!new_data)
- RAISE_MALLOC;
if (old_data) {
memcpy(new_data, old_data, used_length);
* @whereto: pointer to where the dynar should be created
* @elm_size: size of each element in the dynar
* @free_func: function to call each time we want to get rid of an element (or NULL if nothing to do).
- * @Returns: malloc_error or no_error
*
* Creates a new dynar. If a free_func is provided, the elements have to be
* pointer of pointer. That is to say that dynars can contain either base
* types (int, char, double, etc) or pointer of pointers (struct **).
*/
-gras_error_t
+void
gras_dynar_new(gras_dynar_t ** const p_dynar,
const size_t elmsize,
void_f_pvoid_t * const free_func) {
- gras_error_t errcode = no_error;
- gras_dynar_t *dynar = NULL;
-
- if (!(dynar = gras_new0(gras_dynar_t,1)))
- RAISE_MALLOC;
+
+ gras_dynar_t *dynar = gras_new0(gras_dynar_t,1);
dynar->size = 0;
dynar->used = 0;
dynar->free = free_func;
*p_dynar = dynar;
-
- return errcode;
}
/**
* @dynar:
* @idx:
* @src: What will be feeded to the dynar
- * @Returns: malloc_error or no_error
*
* Set the Nth element of a dynar, expanding the dynar if needed, BUT NOT freeing
* the previous value at this position. If you want to free the previous content,
* use gras_dynar_remplace().
*/
-gras_error_t
+void
gras_dynar_set(gras_dynar_t * const dynar,
const int idx,
const void * const src) {
- gras_error_t errcode = no_error;
__sanity_check_dynar(dynar);
__sanity_check_idx(idx);
- TRY(_gras_dynar_expand(dynar, idx+1));
+ _gras_dynar_expand(dynar, idx+1);
if (idx >= dynar->used) {
dynar->used = idx+1;
}
_gras_dynar_put_elm(dynar, idx, src);
-
- return errcode;
}
/**
* @dynar:
* @idx:
* @object:
- * @Returns: malloc_error or no_error
*
* Set the Nth element of a dynar, expanding the dynar if needed, AND DO
* free the previous value at this position. If you don't want to free the
* previous content, use gras_dynar_set().
*/
-gras_error_t
+void
gras_dynar_remplace(gras_dynar_t * const dynar,
const int idx,
const void * const object) {
- gras_error_t errcode = no_error;
__sanity_check_dynar(dynar);
__sanity_check_idx(idx);
dynar->free(old_object);
}
- errcode = gras_dynar_set(dynar, idx, object);
-
- return errcode;
+ gras_dynar_set(dynar, idx, object);
}
/**
* @dynar:
* @idx:
* @src: What will be feeded to the dynar
- * @Returns: malloc_error or no_error
*
* Set the Nth element of a dynar, expanding the dynar if needed, and
* moving the previously existing value and all subsequent ones to one
* position right in the dynar.
*/
-gras_error_t
+void
gras_dynar_insert_at(gras_dynar_t * const dynar,
const int idx,
const void * const src) {
- gras_error_t errcode = no_error;
__sanity_check_dynar(dynar);
__sanity_check_idx(idx);
const size_t old_used = dynar->used;
const size_t new_used = old_used + 1;
- TRY(_gras_dynar_expand(dynar, new_used));
+ _gras_dynar_expand(dynar, new_used);
{
const size_t nb_shift = old_used - idx;
_gras_dynar_put_elm(dynar, idx, src);
dynar->used = new_used;
}
-
- return errcode;
}
/**
* gras_dynar_push:
* @dynar:
* @src:
- * @Returns: malloc_error or no_error
*
* Add an element at the end of the dynar
*/
-gras_error_t
+void
gras_dynar_push(gras_dynar_t * const dynar,
const void * const src) {
__sanity_check_dynar(dynar);
- return gras_dynar_insert_at(dynar, dynar->used, src);
+ gras_dynar_insert_at(dynar, dynar->used, src);
}
/**
* gras_dynar_unshift:
* @dynar:
* @src:
- * @Returns: malloc_error or no_error
*
* Add an element at the begining of the dynar (rather long, Use
* gras_dynar_push() when possible)
*/
-gras_error_t
+void
gras_dynar_unshift(gras_dynar_t * const dynar,
const void * const src) {
__sanity_check_dynar(dynar);
- return gras_dynar_insert_at(dynar, 0, src);
+ gras_dynar_insert_at(dynar, 0, src);
}
/**
switch (errcode) {
case no_error: return "success";
- case malloc_error: return "malloc";
case mismatch_error: return "mismatch";
case system_error: return "system";
case network_error: return "network";
under the terms of the license (GNU LGPL) which comes with this package. */
-#include "gros_interface.h"
+#include "xbt_interface.h"
#include "gras_private.h"
#include <stdarg.h>
#include <assert.h>
_set_inherited_thresholds(cat);
}
-static gras_error_t _gras_log_parse_setting(const char* control_string,
- gras_log_setting_t *set) {
+static void _gras_log_parse_setting(const char* control_string,
+ gras_log_setting_t *set) {
const char *name, *dot, *eq;
set->catname=NULL;
if (!*control_string)
- return no_error;
+ return;
DEBUG1("Parse log setting '%s'",control_string);
control_string += strspn(control_string, " ");
if (!strncmp(dot + 1, "thresh", min(eq - dot - 1,strlen("thresh")))) {
int i;
- char *neweq=(char*)strdup(eq+1);
+ char *neweq=gras_strdup(eq+1);
char *p=neweq-1;
while (*(++p) != '\0') {
snprintf(buff,min(512,eq - dot - 1),"%s",dot+1);
gras_assert1(FALSE,"Unknown setting of the log category: %s",buff);
}
- if (!(set->catname=(char*)gras_malloc(dot - name+1)))
- RAISE_MALLOC;
+ set->catname=(char*)gras_malloc(dot - name+1);
strncpy(set->catname,name,dot-name);
set->catname[dot-name]='\0'; /* Just in case */
DEBUG1("This is for cat '%s'", set->catname);
- return no_error;
}
static gras_error_t _gras_log_cat_searchsub(gras_log_category_t *cat,char *name,gras_log_category_t**whereto) {
/**
* gras_log_control_set:
* @cs: What to parse
- * @Returns: malloc_error or no_error
*
* Typically passed a command-line argument. The string has the syntax:
*
* This routine may only be called once and that must be before any other
* logging command! Typically, this is done from main().
*/
-gras_error_t gras_log_control_set(const char* control_string) {
+void gras_log_control_set(const char* control_string) {
gras_error_t errcode;
gras_log_setting_t *set;
char *cs;
DEBUG1("Parse log settings '%s'",control_string);
if (control_string == NULL)
- return no_error;
+ return;
if (gras_log_settings == NULL)
- TRY(gras_dynar_new(&gras_log_settings,sizeof(gras_log_setting_t*),
- _free_setting));
+ gras_dynar_new(&gras_log_settings,sizeof(gras_log_setting_t*),
+ _free_setting);
- if (! (set = gras_new(gras_log_setting_t,1)) )
- RAISE_MALLOC;
+ set = gras_new(gras_log_setting_t,1);
+ cs=gras_strdup(control_string);
- if (!(cs=(char*)strdup(control_string)))
- RAISE_MALLOC;
_cleanup_double_spaces(cs);
while (!done) {
p=cs;
done = 1;
}
- errcode = _gras_log_parse_setting(p,set);
- if (errcode != no_error) {
- gras_free(set);
- gras_free(cs);
- }
+ _gras_log_parse_setting(p,set);
- TRYCATCH(_gras_log_cat_searchsub(&_GRAS_LOGV(root),set->catname,&cat),
- mismatch_error);
+ errcode = _gras_log_cat_searchsub(&_GRAS_LOGV(root),set->catname,&cat);
if (errcode == mismatch_error) {
DEBUG0("Store for further application");
DEBUG1("push %p to the settings",(void*)set);
- TRY(gras_dynar_push(gras_log_settings,&set));
+ gras_dynar_push(gras_log_settings,&set);
/* malloc in advance the next slot */
- if (!(set = gras_new(gras_log_setting_t,1))) {
- gras_free(cs);
- RAISE_MALLOC;
- }
+ set = gras_new(gras_log_setting_t,1);
} else {
DEBUG0("Apply directly");
gras_free(set->catname);
}
gras_free(set);
gras_free(cs);
- return no_error;
}
void gras_log_appender_set(gras_log_category_t* cat, gras_log_appender_t* app) {
found = 1;
opt=strchr(argv[i],'=');
opt++;
- TRYFAIL(gras_log_control_set(opt));
+ gras_log_control_set(opt);
DEBUG1("Did apply '%s' as log setting",opt);
/*remove this from argv*/
for (j=i+1; j<*argc; j++) {
}
}
if (!found && defaultlog) {
- TRYFAIL(gras_log_control_set(defaultlog));
+ gras_log_control_set(defaultlog);
}
gras_process_init(); /* calls procdata_init, which calls dynar_new */
*
* Creates a new set.
*/
-gras_error_t gras_set_new (gras_set_t **dst) {
+void gras_set_new (gras_set_t **dst) {
gras_set_t *res=gras_new(gras_set_t,1);
gras_error_t errcode;
- if (!res)
- RAISE_MALLOC;
-
- TRY(gras_dict_new (&(res->dict)));
- TRY(gras_dynar_new(&(res->dynar), sizeof(void*),NULL));
+ gras_dict_new (&(res->dict));
+ gras_dynar_new(&(res->dynar), sizeof(void*),NULL);
*dst=res;
- return no_error;
}
/**
* elm->name_len is used as is unless it's <= 0 (in which case it's recomputed);
* elm->ID is attributed automatically.
*/
-gras_error_t gras_set_add (gras_set_t *set,
- gras_set_elm_t *elm,
- void_f_pvoid_t *free_func) {
+void gras_set_add (gras_set_t *set,
+ gras_set_elm_t *elm,
+ void_f_pvoid_t *free_func) {
gras_error_t errcode;
gras_set_elm_t *found_in_dict;
if (elm == found_in_dict) {
DEBUG2("Ignoring request to insert the same element twice (key %s ; id %d)",
elm->name, elm->ID);
- return no_error;
+ return;
} else {
elm->ID=found_in_dict->ID;
DEBUG2("Reinsertion of key %s (id %d)", elm->name, elm->ID);
- TRY(gras_dict_set_ext(set->dict, elm->name, elm->name_len, elm, free_func));
- TRY(gras_dynar_set(set->dynar, elm->ID, &elm));
- return no_error;
+ gras_dict_set_ext(set->dict, elm->name, elm->name_len, elm, free_func);
+ gras_dynar_set(set->dynar, elm->ID, &elm);
+ return;
}
- } else if (errcode != mismatch_error) {
- return errcode; /* I expected mismatch_error */
+ } else {
+ gras_assert_error(mismatch_error);
}
elm->ID = gras_dynar_length( set->dynar );
- TRY(gras_dict_set_ext(set->dict, elm->name, elm->name_len, elm, free_func));
- TRY(gras_dynar_set(set->dynar, elm->ID, &elm));
+ gras_dict_set_ext(set->dict, elm->name, elm->name_len, elm, free_func);
+ gras_dynar_set(set->dynar, elm->ID, &elm);
DEBUG2("Insertion of key '%s' (id %d)", elm->name, elm->ID);
- return no_error;
}
/**
****/
void* gras_malloc (long int bytes) {
- return bytes == 0 ? NULL : (void*) malloc ((size_t) bytes);
+ void *ptr = (bytes == 0 ? NULL : (void*) malloc ((size_t) bytes));
+ gras_assert1(ptr, "Malloc of %ld bytes failed",bytes);
+ return ptr;
}
void* gras_malloc0 (long int bytes) {
- return bytes == 0 ? NULL : (void*) calloc ((size_t) bytes, 1);
+ void *ptr = (bytes == 0 ? NULL : (void*) calloc ((size_t) bytes, 1));
+ gras_assert1(ptr, "Malloc of %ld bytes failed",bytes);
+ return ptr;
}
void* gras_realloc (void *memory, long int bytes) {
gras_free(memory);
return NULL;
} else {
- return (void*) realloc (memory, (size_t) bytes);
+ void *ptr = (void*) realloc (memory, (size_t) bytes);
+ gras_assert1(ptr, "Realloc of %ld bytes failed",bytes);
+ return ptr;
}
}
+char* gras_strdup (const char* str) {
+ char *ret = (char*)strdup(str);
+ gras_assert0(ret, "String duplication failed");
+ return ret;
+}
void gras_free (void *memory) {
- if (memory) {
- free (memory);
- }
+ if (memory)
+ free (memory);
}
/****
/* This program is free software; you can redistribute it and/or modify it
under the terms of the license (GNU LGPL) which comes with this package. */
-#ifndef GRAS_CORE_INTERFACE_H
-#define GRAS_CORE_INTERFACE_H
+#ifndef XBT_INTERFACE_H
+#define XBT_INTERFACE_H
/* Modules definitions */
void gras_log_exit(void);
-#endif /* GRAS_CORE_INTERFACE_H */
+#endif /* XBT_INTERFACE_H */
INFO0("---- Test on fixed array ----");
- TRY(gras_datadesc_array_fixed("fixed int array",
- gras_datadesc_by_name("int"),
- SIZE, &my_type));
+ my_type=gras_datadesc_array_fixed("fixed int array",
+ gras_datadesc_by_name("int"),
+ SIZE);
TRY(write_read(my_type, &i,&j, sock,direction));
if (direction == READ || direction == RW) {
gras_datadesc_type_t *my_type;
int *i,*j;
- if (! (i=gras_new(int,1)) )
- RAISE_MALLOC;
+ i=gras_new(int,1);
*i=12345;
INFO1("---- Test on a reference to an integer (%p) ----",i);
- TRY(gras_datadesc_ref("int*",gras_datadesc_by_name("int"),&my_type));
+ my_type = gras_datadesc_ref("int*",gras_datadesc_by_name("int"));
TRY(write_read(my_type, &i,&j, sock,direction));
if (direction == READ || direction == RW) {
***/
gras_error_t test_string(gras_socket_t *sock, int direction) {
gras_error_t errcode;
- char *i=strdup("Some data"), *j=NULL;
+ char *i=gras_strdup("Some data"), *j=NULL;
int cpt;
INFO0("---- Test on string (ref to dynamic array) ----");
INFO0("---- Test on homogeneous structure ----");
/* create descriptor */
- TRY(gras_datadesc_struct("homostruct",&my_type));
- TRY(gras_datadesc_struct_append(my_type,"a",
- gras_datadesc_by_name("signed int")));
- TRY(gras_datadesc_struct_append(my_type,"b",
- gras_datadesc_by_name("int")));
- TRY(gras_datadesc_struct_append(my_type,"c",
- gras_datadesc_by_name("int")));
- TRY(gras_datadesc_struct_append(my_type,"d",
- gras_datadesc_by_name("int")));
+ my_type=gras_datadesc_struct("homostruct");
+ gras_datadesc_struct_append(my_type,"a",
+ gras_datadesc_by_name("signed int"));
+ gras_datadesc_struct_append(my_type,"b",
+ gras_datadesc_by_name("int"));
+ gras_datadesc_struct_append(my_type,"c",
+ gras_datadesc_by_name("int"));
+ gras_datadesc_struct_append(my_type,"d",
+ gras_datadesc_by_name("int"));
gras_datadesc_struct_close(my_type);
- TRY(gras_datadesc_ref("homostruct*",
- gras_datadesc_by_name("homostruct"),
- &my_type));
+ my_type=gras_datadesc_ref("homostruct*",
+ gras_datadesc_by_name("homostruct"));
/* init a value, exchange it and check its validity*/
- if (! (i=gras_new(homostruct,1)) )
- RAISE_MALLOC;
+ i=gras_new(homostruct,1);
i->a = 2235; i->b = 433425;
i->c = -23423; i->d = -235235;
INFO0("---- Test on heterogeneous structure ----");
/* create descriptor */
- TRY(gras_datadesc_struct("hetestruct",&my_type));
- TRY(gras_datadesc_struct_append(my_type,"c1",
- gras_datadesc_by_name("unsigned char")));
- TRY(gras_datadesc_struct_append(my_type,"l1",
- gras_datadesc_by_name("unsigned long int")));
- TRY(gras_datadesc_struct_append(my_type,"c2",
- gras_datadesc_by_name("unsigned char")));
- TRY(gras_datadesc_struct_append(my_type,"l2",
- gras_datadesc_by_name("unsigned long int")));
+ my_type=gras_datadesc_struct("hetestruct");
+ gras_datadesc_struct_append(my_type,"c1",
+ gras_datadesc_by_name("unsigned char"));
+ gras_datadesc_struct_append(my_type,"l1",
+ gras_datadesc_by_name("unsigned long int"));
+ gras_datadesc_struct_append(my_type,"c2",
+ gras_datadesc_by_name("unsigned char"));
+ gras_datadesc_struct_append(my_type,"l2",
+ gras_datadesc_by_name("unsigned long int"));
gras_datadesc_struct_close(my_type);
- TRY(gras_datadesc_ref("hetestruct*", gras_datadesc_by_name("hetestruct"),
- &my_type));
+ my_type=gras_datadesc_ref("hetestruct*", gras_datadesc_by_name("hetestruct"));
+
/* init a value, exchange it and check its validity*/
- if (! (i=gras_new(hetestruct,1)) )
- RAISE_MALLOC;
+ i=gras_new(hetestruct,1);
i->c1 = 's'; i->l1 = 123455;
i->c2 = 'e'; i->l2 = 774531;
INFO0("---- Test on nested structures ----");
/* create descriptor */
- TRY(gras_datadesc_struct("nestedstruct",&my_type));
+ my_type=gras_datadesc_struct("nestedstruct");
- TRY(gras_datadesc_struct_append(my_type,"hete",
- gras_datadesc_by_name("hetestruct")));
- TRY(gras_datadesc_struct_append(my_type,"homo",
- gras_datadesc_by_name("homostruct")));
+ gras_datadesc_struct_append(my_type,"hete",
+ gras_datadesc_by_name("hetestruct"));
+ gras_datadesc_struct_append(my_type,"homo",
+ gras_datadesc_by_name("homostruct"));
gras_datadesc_struct_close(my_type);
- TRY(gras_datadesc_ref("nestedstruct*", gras_datadesc_by_name("nestedstruct"),
- &my_type));
+ my_type=gras_datadesc_ref("nestedstruct*", gras_datadesc_by_name("nestedstruct"));
/* init a value, exchange it and check its validity*/
- if (! (i=gras_new(nestedstruct,1)) )
- RAISE_MALLOC;
+ i=gras_new(nestedstruct,1);
i->homo.a = 235231; i->homo.b = -124151;
i->homo.c = 211551; i->homo.d = -664222;
i->hete.c1 = 's'; i->hete.l1 = 123455;
gras_error_t errcode;
gras_datadesc_type_t *my_type,*ref_my_type;
- TRY(gras_datadesc_struct("chained_list_t",&my_type));
- TRY(gras_datadesc_ref("chained_list_t*",my_type,&ref_my_type));
+ my_type=gras_datadesc_struct("chained_list_t");
+ ref_my_type=gras_datadesc_ref("chained_list_t*",my_type);
- TRY(gras_datadesc_struct_append(my_type,"v", gras_datadesc_by_name("int")));
- TRY(gras_datadesc_struct_append(my_type,"l", ref_my_type));
+ gras_datadesc_struct_append(my_type,"v", gras_datadesc_by_name("int"));
+ gras_datadesc_struct_append(my_type,"l", ref_my_type);
gras_datadesc_struct_close(my_type);
return no_error;
INFO0("---- Test on struct containing dynamic array and its size (cbps test) ----");
/* create and fill the struct */
- if (! (i=gras_new(Clause,1)) )
- RAISE_MALLOC;
+ i=gras_new(Clause,1);
i->num_lits = 5432;
- if (! (i->literals = gras_new(int, i->num_lits)) )
- RAISE_MALLOC;
+ i->literals = gras_new(int, i->num_lits);
for (cpt=0; cpt<i->num_lits; cpt++)
i->literals[cpt] = cpt * cpt - ((cpt * cpt) / 2);
DEBUG3("created data=%p (within %p @%p)",&(i->num_lits),i,&i);
ddt = gras_datadesc_by_symbol(s_clause);
/* gras_datadesc_type_dump(ddt); */
- TRYFAIL(gras_datadesc_ref("Clause*",ddt,&ddt));
+ ddt=gras_datadesc_ref("Clause*",ddt);
TRY(write_read(ddt, &i,&j, sock,direction));
if (direction == READ || direction == RW) {
gras_cfg_t *set=NULL;
gras_error_t errcode;
- TRYFAIL(gras_cfg_new(&set));
+ gras_cfg_new(&set);
TRYFAIL(gras_cfg_register_str(set,"speed:1_to_2_int"));
TRYFAIL(gras_cfg_register_str(set,"hostname:1_to_1_string"));
TRYFAIL(gras_cfg_register_str(set,"user:1_to_10_string"));
printf(" (a point is a test)\n");
for (i=0;i<20;i++) {
- TRYFAIL(gras_dict_new(&head));
+ gras_dict_new(&head);
if (i%10) printf("."); else printf("%d",i/10); fflush(stdout);
nb=0;
for (j=0;j<1000;j++) {
key[k]=rand() % ('z' - 'a') + 'a';
key[k]='\0';
/* printf("[%d %s]\n",j,key); */
- TRYFAIL(gras_dict_set(head,key,key,&free));
+ gras_dict_set(head,key,key,&free);
}
nb=0;
/* gras_dict_dump(head,(void (*)(void*))&printf); */
}
- TRYFAIL(gras_dict_new(&head));
+ gras_dict_new(&head);
printf("\n Fill 20 000 elements, with keys being the number of element\n");
printf(" (a point is 1 000 elements)\n");
for (j=0;j<NB_ELM;j++) {
}
sprintf(key,"%d",j);
- TRYFAIL(gras_dict_set(head,key,key,&free));
+ gras_dict_set(head,key,key,&free);
}
printf("\n Count the elements (retrieving the key and data for each): \n");
GRAS_LOG_EXTERNAL_CATEGORY(dict);
GRAS_LOG_NEW_DEFAULT_CATEGORY(test,"Logging specific to this test");
-static gras_error_t fill(gras_dict_t **head);
-static gras_error_t debuged_add(gras_dict_t *head,const char*key);
+static void fill(gras_dict_t **head);
+static void debuged_add(gras_dict_t *head,const char*key);
static gras_error_t search(gras_dict_t *head,const char*key);
static gras_error_t debuged_remove(gras_dict_t *head,const char*key);
static gras_error_t traverse(gras_dict_t *head);
printf("%s",(char*)str);
}
-static gras_error_t fill(gras_dict_t **head) {
- gras_error_t errcode;
+static void fill(gras_dict_t **head) {
printf("\n Fill in the dictionnary\n");
- TRY(gras_dict_new(head));
- TRY(debuged_add(*head,"12"));
- TRY(debuged_add(*head,"12a"));
- TRY(debuged_add(*head,"12b"));
- TRY(debuged_add(*head,"123"));
- TRY(debuged_add(*head,"123456"));
+ gras_dict_new(head);
+ debuged_add(*head,"12");
+ debuged_add(*head,"12a");
+ debuged_add(*head,"12b");
+ debuged_add(*head,"123");
+ debuged_add(*head,"123456");
/* Child becomes child of what to add */
- TRY(debuged_add(*head,"1234"));
+ debuged_add(*head,"1234");
/* Need of common ancestor */
- TRY(debuged_add(*head,"123457"));
+ debuged_add(*head,"123457");
- return no_error;
}
-static gras_error_t debuged_add(gras_dict_t *head,const char*key)
+static void debuged_add(gras_dict_t *head,const char*key)
{
- gras_error_t errcode;
- char *data=strdup(key);
+ char *data=gras_strdup(key);
printf(" - Add %s\n",key);
- errcode=gras_dict_set(head,key,data,&gras_free);
+ gras_dict_set(head,key,data,&gras_free);
if (GRAS_LOG_ISENABLED(dict,gras_log_priority_debug)) {
gras_dict_dump(head,(void (*)(void*))&printf);
fflush(stdout);
}
- return errcode;
}
static gras_error_t search(gras_dict_t *head,const char*key) {
printf(" Traverse the empty dictionnary\n");
TRYFAIL(traverse(head));
- TRYFAIL(fill(&head));
+ fill(&head);
printf(" Free the dictionnary\n");
gras_dict_free(&head);
printf(" Free the dictionnary again\n");
gras_dict_free(&head);
- TRYFAIL(fill(&head));
+ fill(&head);
printf(" - Change some values\n");
printf(" - Change 123 to 'Changed 123'\n");
- TRYFAIL(gras_dict_set(head,"123",strdup("Changed 123"),&gras_free));
+ gras_dict_set(head,"123",strdup("Changed 123"),&gras_free);
printf(" - Change 123 back to '123'\n");
- TRYFAIL(gras_dict_set(head,"123",strdup("123"),&gras_free));
+ gras_dict_set(head,"123",strdup("123"),&gras_free);
printf(" - Change 12a to 'Dummy 12a'\n");
- TRYFAIL(gras_dict_set(head,"12a",strdup("Dummy 12a"),&gras_free));
+ gras_dict_set(head,"12a",strdup("Dummy 12a"),&gras_free);
printf(" - Change 12a to '12a'\n");
- TRYFAIL(gras_dict_set(head,"12a",strdup("12a"),&gras_free));
+ gras_dict_set(head,"12a",strdup("12a"),&gras_free);
/* gras_dict_dump(head,(void (*)(void*))&printf); */
printf(" - Traverse the resulting dictionnary\n");
TRYFAIL(traverse(head));
printf("\n");
- TRYFAIL(fill(&head));
+ fill(&head);
printf(" - Remove the data (traversing the resulting dictionnary each time)\n");
TRYEXPECT(debuged_remove(head,"Does not exist"),mismatch_error);
TRYFAIL(traverse(head));
TRYCATCH(debuged_remove(head,"12345"),mismatch_error);
printf(" - Remove each data manually (traversing the resulting dictionnary each time)\n");
- TRYFAIL(fill(&head));
+ fill(&head);
TRYFAIL(debuged_remove(head,"12a")); TRYFAIL(traverse(head));
TRYFAIL(debuged_remove(head,"12b")); TRYFAIL(traverse(head));
TRYFAIL(debuged_remove(head,"12")); TRYFAIL(traverse(head));
gras_init_defaultlog(&argc,argv,"dynar.thresh=debug");
INFO0("==== Traverse the empty dynar");
- TRYFAIL(gras_dynar_new(&d,sizeof(int),NULL));
+ gras_dynar_new(&d,sizeof(int),NULL);
gras_dynar_foreach(d,cursor,cpt){
gras_assert0(FALSE,
"Damnit, there is something in the empty dynar");
gras_dynar_free(d);
INFO0("==== Push/shift 5000 doubles");
- TRYFAIL(gras_dynar_new(&d,sizeof(double),NULL));
+ gras_dynar_new(&d,sizeof(double),NULL);
for (cpt=0; cpt< 5000; cpt++) {
d1=(double)cpt;
- TRYFAIL(gras_dynar_push(d,&d1));
+ gras_dynar_push(d,&d1);
}
gras_dynar_foreach(d,cursor,d2){
d1=(double)cursor;
INFO0("==== Unshift/pop 5000 doubles");
- TRYFAIL(gras_dynar_new(&d,sizeof(double),NULL));
+ gras_dynar_new(&d,sizeof(double),NULL);
for (cpt=0; cpt< 5000; cpt++) {
d1=(double)cpt;
- TRYFAIL(gras_dynar_unshift(d,&d1));
+ gras_dynar_unshift(d,&d1);
}
for (cpt=0; cpt< 5000; cpt++) {
d1=(double)cpt;
INFO0("==== Push 5000 doubles, insert 1000 doubles in the middle, shift everything");
- TRYFAIL(gras_dynar_new(&d,sizeof(double),NULL));
+ gras_dynar_new(&d,sizeof(double),NULL);
for (cpt=0; cpt< 5000; cpt++) {
d1=(double)cpt;
- TRYFAIL(gras_dynar_push(d,&d1));
+ gras_dynar_push(d,&d1);
}
for (cpt=0; cpt< 1000; cpt++) {
d1=(double)cpt;
- TRYFAIL(gras_dynar_insert_at(d,2500,&d1));
+ gras_dynar_insert_at(d,2500,&d1);
}
for (cpt=0; cpt< 2500; cpt++) {
INFO0("==== Push 5000 double, remove 2000-4000. free the rest");
- TRYFAIL(gras_dynar_new(&d,sizeof(double),NULL));
+ gras_dynar_new(&d,sizeof(double),NULL);
for (cpt=0; cpt< 5000; cpt++) {
d1=(double)cpt;
- TRYFAIL(gras_dynar_push(d,&d1));
+ gras_dynar_push(d,&d1);
}
for (cpt=2000; cpt< 4000; cpt++) {
d1=(double)cpt;
gras_init_defaultlog(&argc,argv,"dynar.thresh=debug");
INFO0("==== Traverse the empty dynar");
- TRYFAIL(gras_dynar_new(&d,sizeof(int),NULL));
+ gras_dynar_new(&d,sizeof(int),NULL);
gras_dynar_foreach(d,cursor,i){
gras_assert0(0,"Damnit, there is something in the empty dynar");
}
INFO1("==== Push %d int, set them again 3 times, traverse them, shift them",
NB_ELEM);
- TRYFAIL(gras_dynar_new(&d,sizeof(int),NULL));
+ gras_dynar_new(&d,sizeof(int),NULL);
for (cpt=0; cpt< NB_ELEM; cpt++) {
- TRYFAIL(gras_dynar_push(d,&cpt));
+ gras_dynar_push(d,&cpt);
DEBUG2("Push %d, length=%lu",cpt, gras_dynar_length(d));
}
for (cursor=0; cursor< NB_ELEM; cursor++) {
cursor,cpt);
}
for (cpt=0; cpt< NB_ELEM; cpt++)
- TRYFAIL(gras_dynar_set(d,cpt,&cpt));
+ gras_dynar_set(d,cpt,&cpt);
for (cpt=0; cpt< NB_ELEM; cpt++)
- TRYFAIL(gras_dynar_set(d,cpt,&cpt));
+ gras_dynar_set(d,cpt,&cpt);
for (cpt=0; cpt< NB_ELEM; cpt++)
- TRYFAIL(gras_dynar_set(d,cpt,&cpt));
+ gras_dynar_set(d,cpt,&cpt);
cpt=0;
gras_dynar_foreach(d,cursor,i){
INFO1("==== Unshift/pop %d int",NB_ELEM);
- TRYFAIL(gras_dynar_new(&d,sizeof(int),NULL));
+ gras_dynar_new(&d,sizeof(int),NULL);
for (cpt=0; cpt< NB_ELEM; cpt++) {
- TRYFAIL(gras_dynar_unshift(d,&cpt));
+ gras_dynar_unshift(d,&cpt);
DEBUG2("Push %d, length=%lu",cpt, gras_dynar_length(d));
}
for (cpt=0; cpt< NB_ELEM; cpt++) {
INFO1("==== Push %d int, insert 1000 int in the middle, shift everything",NB_ELEM);
- TRYFAIL(gras_dynar_new(&d,sizeof(int),NULL));
+ gras_dynar_new(&d,sizeof(int),NULL);
for (cpt=0; cpt< NB_ELEM; cpt++) {
- TRYFAIL(gras_dynar_push(d,&cpt));
+ gras_dynar_push(d,&cpt);
DEBUG2("Push %d, length=%lu",cpt, gras_dynar_length(d));
}
for (cpt=0; cpt< 1000; cpt++) {
- TRYFAIL(gras_dynar_insert_at(d,2500,&cpt));
+ gras_dynar_insert_at(d,2500,&cpt);
DEBUG2("Push %d, length=%lu",cpt, gras_dynar_length(d));
}
INFO1("==== Push %d int, remove 2000-4000. free the rest",NB_ELEM);
- TRYFAIL(gras_dynar_new(&d,sizeof(int),NULL));
+ gras_dynar_new(&d,sizeof(int),NULL);
for (cpt=0; cpt< NB_ELEM; cpt++)
- TRYFAIL(gras_dynar_push(d,&cpt));
+ gras_dynar_push(d,&cpt);
for (cpt=2000; cpt< 4000; cpt++) {
gras_dynar_remove_at(d,2000,&i);
gras_init_defaultlog(&argc,argv,"dynar.thresh=debug");
INFO0("==== Traverse the empty dynar");
- TRYFAIL(gras_dynar_new(&d,sizeof(char *),&free_string));
+ gras_dynar_new(&d,sizeof(char *),&free_string);
gras_dynar_foreach(d,cpt,s1){
gras_assert0(FALSE,
"Damnit, there is something in the empty dynar");
gras_dynar_free(d);
INFO1("==== Push %d strings, set them again 3 times, shift them",NB_ELEM);
- TRYFAIL(gras_dynar_new(&d,sizeof(char*),&free_string));
+ gras_dynar_new(&d,sizeof(char*),&free_string);
for (cpt=0; cpt< NB_ELEM; cpt++) {
sprintf(buf,"%d",cpt);
s1=strdup(buf);
- TRYFAIL(gras_dynar_push(d,&s1));
+ gras_dynar_push(d,&s1);
}
for (cpt=0; cpt< NB_ELEM; cpt++) {
sprintf(buf,"%d",cpt);
s1=strdup(buf);
- TRYFAIL(gras_dynar_remplace(d,cpt,&s1));
+ gras_dynar_remplace(d,cpt,&s1);
}
for (cpt=0; cpt< NB_ELEM; cpt++) {
sprintf(buf,"%d",cpt);
s1=strdup(buf);
- TRYFAIL(gras_dynar_remplace(d,cpt,&s1));
+ gras_dynar_remplace(d,cpt,&s1);
}
for (cpt=0; cpt< NB_ELEM; cpt++) {
sprintf(buf,"%d",cpt);
s1=strdup(buf);
- TRYFAIL(gras_dynar_remplace(d,cpt,&s1));
+ gras_dynar_remplace(d,cpt,&s1);
}
for (cpt=0; cpt< NB_ELEM; cpt++) {
sprintf(buf,"%d",cpt);
INFO1("==== Unshift, traverse and pop %d strings",NB_ELEM);
- TRYFAIL(gras_dynar_new(&d,sizeof(char**),&free_string));
+ gras_dynar_new(&d,sizeof(char**),&free_string);
for (cpt=0; cpt< NB_ELEM; cpt++) {
sprintf(buf,"%d",cpt);
s1=strdup(buf);
- TRYFAIL(gras_dynar_unshift(d,&s1));
+ gras_dynar_unshift(d,&s1);
}
gras_dynar_foreach(d,cpt,s1) {
sprintf(buf,"%d",NB_ELEM - cpt -1);
INFO2("==== Push %d strings, insert %d strings in the middle, shift everything",NB_ELEM,NB_ELEM/5);
- TRYFAIL(gras_dynar_new(&d,sizeof(char*),&free_string));
+ gras_dynar_new(&d,sizeof(char*),&free_string);
for (cpt=0; cpt< NB_ELEM; cpt++) {
sprintf(buf,"%d",cpt);
s1=strdup(buf);
- TRYFAIL(gras_dynar_push(d,&s1));
+ gras_dynar_push(d,&s1);
}
for (cpt=0; cpt< NB_ELEM/5; cpt++) {
sprintf(buf,"%d",cpt);
s1=strdup(buf);
- TRYFAIL(gras_dynar_insert_at(d,NB_ELEM/2,&s1));
+ gras_dynar_insert_at(d,NB_ELEM/2,&s1);
}
for (cpt=0; cpt< NB_ELEM/2; cpt++) {
INFO3("==== Push %d strings, remove %d-%d. free the rest",NB_ELEM,2*(NB_ELEM/5),4*(NB_ELEM/5));
- TRYFAIL(gras_dynar_new(&d,sizeof(char*),&free_string));
+ gras_dynar_new(&d,sizeof(char*),&free_string);
for (cpt=0; cpt< NB_ELEM; cpt++) {
sprintf(buf,"%d",cpt);
s1=strdup(buf);
- TRYFAIL(gras_dynar_push(d,&s1));
+ gras_dynar_push(d,&s1);
}
for (cpt=2*(NB_ELEM/5); cpt< 4*(NB_ELEM/5); cpt++) {
sprintf(buf,"%d",cpt);
char *data;
}my_elem_t;
-static gras_error_t fill(gras_set_t **set);
-static gras_error_t debuged_add(gras_set_t *set,const char*key);
-static gras_error_t debuged_add_with_data(gras_set_t *set,
- const char *name,
- const char *data);
+static void fill(gras_set_t **set);
+static void debuged_add(gras_set_t *set,const char*key);
+static void debuged_add_with_data(gras_set_t *set,
+ const char *name,
+ const char *data);
static gras_error_t search_name(gras_set_t *set,const char*key);
static gras_error_t search_id(gras_set_t *head,
int id,
}
}
-static gras_error_t debuged_add_with_data(gras_set_t *set,
- const char *name,
- const char *data) {
+static void debuged_add_with_data(gras_set_t *set,
+ const char *name,
+ const char *data) {
- gras_error_t errcode;
my_elem_t *elm;
elm = gras_new(my_elem_t,1);
- elm->name=strdup(name);
+ elm->name=gras_strdup(name);
elm->name_len=0;
- elm->data=strdup(data);
+ elm->data=gras_strdup(data);
printf(" - Add %s ",name);
if (strcmp(name,data)) {
printf("(->%s)",data);
}
printf("\n");
- errcode=gras_set_add(set,
- (gras_set_elm_t*)elm,
- &my_elem_free);
- return errcode;
+ gras_set_add(set, (gras_set_elm_t*)elm,
+ &my_elem_free);
}
-static gras_error_t debuged_add(gras_set_t *set,
- const char *name) {
- return debuged_add_with_data(set, name, name);
+static void debuged_add(gras_set_t *set,
+ const char *name) {
+ debuged_add_with_data(set, name, name);
}
-static gras_error_t fill(gras_set_t **set) {
- gras_error_t errcode;
+static void fill(gras_set_t **set) {
printf("\n Fill in the data set\n");
- TRY(gras_set_new(set));
- TRY(debuged_add(*set,"12"));
- TRY(debuged_add(*set,"12a"));
- TRY(debuged_add(*set,"12b"));
- TRY(debuged_add(*set,"123"));
- TRY(debuged_add(*set,"123456"));
+ gras_set_new(set);
+ debuged_add(*set,"12");
+ debuged_add(*set,"12a");
+ debuged_add(*set,"12b");
+ debuged_add(*set,"123");
+ debuged_add(*set,"123456");
/* Child becomes child of what to add */
- TRY(debuged_add(*set,"1234"));
+ debuged_add(*set,"1234");
/* Need of common ancestor */
- TRY(debuged_add(*set,"123457"));
-
- return no_error;
+ debuged_add(*set,"123457");
}
static gras_error_t search_name(gras_set_t *head,const char*key) {
printf(" Traverse the empty set\n");
TRYFAIL(traverse(set));
- TRYFAIL(fill(&set));
+ fill(&set);
printf(" Free the data set\n");
gras_set_free(&set);
printf(" Free the data set again\n");
gras_set_free(&set);
- TRYFAIL(fill(&set));
+ fill(&set);
printf(" - Change some values\n");
printf(" - Change 123 to 'Changed 123'\n");
- TRYFAIL(debuged_add_with_data(set,"123","Changed 123"));
+ debuged_add_with_data(set,"123","Changed 123");
printf(" - Change 123 back to '123'\n");
- TRYFAIL(debuged_add_with_data(set,"123","123"));
+ debuged_add_with_data(set,"123","123");
printf(" - Change 12a to 'Dummy 12a'\n");
- TRYFAIL(debuged_add_with_data(set,"12a","Dummy 12a"));
+ debuged_add_with_data(set,"12a","Dummy 12a");
printf(" - Change 12a to '12a'\n");
- TRYFAIL(debuged_add_with_data(set,"12a","12a"));
+ debuged_add_with_data(set,"12a","12a");
/* gras_dict_dump(head,(void (*)(void*))&printf); */
printf(" - Traverse the resulting data set\n");
TRYFAIL(traverse(set));
printf(" - Retrive values\n");
- TRYFAIL(gras_set_get_by_name(set,"123",(gras_set_elm_t**)&elm));
+ gras_set_get_by_name(set,"123",(gras_set_elm_t**)&elm);
assert(elm);
TRYFAIL(strcmp("123",elm->data));