vector.h File Reference


Detailed Description

Contains the API for a generic vector.

Note that vector functions are not thread-safe.

Author:
Jeremy A. Mowery jmowery@tresys.com

Jason Tang jtang@tresys.com

Copyright (C) 2006-2007 Tresys Technology, LLC

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

Definition in file vector.h.

#include <stdlib.h>
#include <qpol/iterator.h>

Go to the source code of this file.


Typedefs

typedef apol_vector apol_vector_t
typedef int( apol_vector_comp_func )(const void *a, const void *b, void *data)
typedef void( apol_vector_free_func )(void *elem)
typedef void *( apol_vector_dup_func )(const void *elem, void *data)

Functions

apol_vector_tapol_vector_create (apol_vector_free_func *fr)
 Allocate and initialize an empty vector with default capacity.
apol_vector_tapol_vector_create_with_capacity (size_t cap, apol_vector_free_func *fr)
 Allocate and initialize an empty vector with starting capacity of cap.
apol_vector_tapol_vector_create_from_iter (qpol_iterator_t *iter, apol_vector_free_func *fr)
 Allocate and return a vector that has been initialized with the contents of a qpol iterator.
apol_vector_tapol_vector_create_from_vector (const apol_vector_t *v, apol_vector_dup_func *dup, void *data, apol_vector_free_func *fr)
 Allocate and return a vector that has been initialized with the contents of another vector.
apol_vector_tapol_vector_create_from_intersection (const apol_vector_t *v1, const apol_vector_t *v2, apol_vector_comp_func *cmp, void *data)
 Allocate and return a vector that has been initialized with the contents common to two other vectors.
void apol_vector_destroy (apol_vector_t **v)
 Free a vector and any memory used by it.
size_t apol_vector_get_size (const apol_vector_t *v)
 Get the number of elements in the vector.
size_t apol_vector_get_capacity (const apol_vector_t *v)
 Get the current capacity of the vector.
void * apol_vector_get_element (const apol_vector_t *v, size_t idx)
 Get the element at the requested index.
int apol_vector_get_index (const apol_vector_t *v, const void *elem, apol_vector_comp_func *cmp, void *data, size_t *i)
 Find an element within a vector, returning its index within the vector.
int apol_vector_append (apol_vector_t *v, void *elem)
 Add an element to the end of a vector.
int apol_vector_append_unique (apol_vector_t *v, void *elem, apol_vector_comp_func *cmp, void *data)
 Add an element to the end of a vector unless that element is equal to an existing element.
int apol_vector_cat (apol_vector_t *dest, const apol_vector_t *src)
 Concatenate two vectors.
int apol_vector_remove (apol_vector_t *v, const size_t idx)
 Remove an element from a vector, and renumber all subsequent elements.
int apol_vector_compare (const apol_vector_t *a, const apol_vector_t *b, apol_vector_comp_func *cmp, void *data, size_t *i)
 Compare two vectors, determining if one is different than the other.
void apol_vector_sort (apol_vector_t *v, apol_vector_comp_func *cmp, void *data)
 Sort the vector's elements within place, using an unstable sorting algorithm.
void apol_vector_sort_uniquify (apol_vector_t *v, apol_vector_comp_func *cmp, void *data)
 Sort the vector's elements within place (see apol_vector_sort()), and then compact vector by removing duplicate entries.

Typedef Documentation

typedef struct apol_vector apol_vector_t
 

Definition at line 37 of file vector.h.

Referenced by apol_attr_get_by_query(), apol_avrule_get_by_query(), apol_avrule_list_to_syn_avrules(), apol_avrule_to_syn_avrules(), apol_bool_get_by_query(), apol_bst_get_vector(), apol_cat_get_by_query(), apol_class_get_by_query(), apol_common_get_by_query(), apol_cond_get_by_query(), apol_constraint_get_by_query(), apol_context_validate_partial(), apol_domain_trans_analysis_do(), apol_domain_trans_result_get_access_rules(), apol_domain_trans_result_get_entrypoint_rules(), apol_domain_trans_result_get_exec_rules(), apol_domain_trans_result_get_proc_trans_rules(), apol_domain_trans_result_get_setexec_rules(), apol_domain_trans_result_get_type_trans_rules(), apol_domain_trans_table_verify_trans(), apol_fs_use_get_by_query(), apol_genfscon_get_by_query(), apol_infoflow_analysis_direct(), apol_infoflow_analysis_direct_expand(), apol_infoflow_analysis_do(), apol_infoflow_analysis_do_more(), apol_infoflow_analysis_trans(), apol_infoflow_analysis_trans_expand(), apol_infoflow_analysis_trans_further(), apol_infoflow_analysis_trans_further_next(), apol_infoflow_analysis_trans_shortest_path(), apol_infoflow_direct_get_result(), apol_infoflow_graph_check_class_perms(), apol_infoflow_graph_connect_nodes(), apol_infoflow_graph_create_nodes(), apol_infoflow_graph_create_required_types(), apol_infoflow_graph_get_nodes_for_type(), apol_infoflow_result_get_steps(), apol_infoflow_results_check_both(), apol_infoflow_step_get_rules(), apol_infoflow_trans_append(), apol_infoflow_trans_define(), apol_infoflow_trans_find_edge(), apol_infoflow_trans_further_shuffle(), apol_infoflow_trans_path(), apol_isid_get_by_query(), apol_level_get_by_query(), apol_mls_level_compare(), apol_mls_level_get_cats(), apol_mls_level_render(), apol_mls_level_validate(), apol_mls_range_get_levels(), apol_netifcon_get_by_query(), apol_nodecon_get_by_query(), apol_obj_perm_get_perm_vector(), apol_perm_get_by_query(), apol_policy_build_domain_trans_table(), apol_policy_create_from_policy_path(), apol_policy_path_create(), apol_policy_path_create_from_file(), apol_policy_path_create_from_string(), apol_policy_path_get_modules(), apol_portcon_get_by_query(), apol_query_append_type(), apol_query_create_candidate_class_list(), apol_query_create_candidate_role_list(), apol_query_create_candidate_syn_type_list(), apol_query_create_candidate_type_list(), apol_query_expand_type(), apol_query_type_set_uses_types_directly(), apol_range_trans_get_by_query(), apol_relabel_analysis_do(), apol_relabel_result_get_both(), apol_relabel_result_get_from(), apol_relabel_result_get_to(), apol_role_allow_get_by_query(), apol_role_get_by_query(), apol_role_trans_get_by_query(), apol_str_join(), apol_str_split(), apol_syn_avrule_get_by_query(), apol_syn_terule_get_by_query(), apol_terule_get_by_query(), apol_terule_list_to_syn_terules(), apol_terule_to_syn_terules(), apol_type_get_by_query(), apol_types_relation_access_append(), apol_types_relation_access_append_rule(), apol_types_relation_access_get_rules(), apol_types_relation_accesses(), apol_types_relation_allows(), apol_types_relation_clone_domaintrans(), apol_types_relation_clone_infoflow(), apol_types_relation_common_attribs(), apol_types_relation_common_roles(), apol_types_relation_common_users(), apol_types_relation_create_access_pools(), apol_types_relation_directflow(), apol_types_relation_domain(), apol_types_relation_result_get_allowrules(), apol_types_relation_result_get_attributes(), apol_types_relation_result_get_directflows(), apol_types_relation_result_get_dissimilar_first(), apol_types_relation_result_get_dissimilar_other(), apol_types_relation_result_get_domainsAB(), apol_types_relation_result_get_domainsBA(), apol_types_relation_result_get_roles(), apol_types_relation_result_get_similar_first(), apol_types_relation_result_get_similar_other(), apol_types_relation_result_get_transflowsAB(), apol_types_relation_result_get_transflowsBA(), apol_types_relation_result_get_typerules(), apol_types_relation_result_get_users(), apol_types_relation_transflow(), apol_types_relation_types(), apol_user_get_by_query(), apol_validatetrans_get_by_query(), apol_vector_append(), apol_vector_append_unique(), apol_vector_cat(), apol_vector_compare(), apol_vector_create(), apol_vector_create_from_intersection(), apol_vector_create_from_iter(), apol_vector_create_from_vector(), apol_vector_create_with_capacity(), apol_vector_destroy(), apol_vector_get_capacity(), apol_vector_get_element(), apol_vector_get_index(), apol_vector_get_size(), apol_vector_grow(), apol_vector_remove(), apol_vector_sort(), apol_vector_sort_uniquify(), append_avrule_to_subject_vector(), append_avrules_to_object_vector(), sefs_fcfile::appendFileList(), attrib_deep_diff(), attrib_get_items(), attrib_get_types(), attribs_wo_rules_get_list(), attribs_wo_rules_run(), attribs_wo_types_get_list(), attribs_wo_types_run(), avc_msg_insert_additional_field_data(), avc_msg_insert_perms(), avc_parse(), avrule_basic_syn(), avrule_deep_diff(), avrule_default(), avrule_enable_line_numbers(), avrule_get_items(), avrule_get_items_allow(), avrule_get_items_auditallow(), avrule_get_items_dontaudit(), avrule_get_items_neverallow(), avrule_get_line_numbers_for_perm(), avrule_new_diff(), avrule_to_string(), bool_get_items(), bool_parse(), bst_node_to_vector(), build_avrule_vecs(), build_category_vecs(), build_component_vecs(), build_level_vecs(), build_nomls_vecs(), build_rangetrans_vecs(), build_roleallow_vecs(), build_roletrans_vecs(), build_terule_vecs(), build_user_vecs(), sefs_filesystem::buildDevMap(), cat_get_items(), class_deep_diff(), class_get_items(), class_get_perms(), common_deep_diff(), common_get_items(), common_get_perms(), components_types_tests(), domain_and_file_run(), domain_trans_table_find_orphan_type_transitions(), domain_trans_table_get_all_forward_trans(), domain_trans_table_get_all_reverse_trans(), domains_wo_roles_run(), dta_forward(), dta_forward_access(), dta_forward_multi_end(), dta_invalid(), dta_reflexive(), dta_reverse(), dta_reverse_regexp(), exists_common_user(), fcfile_open(), fcfile_query(), sefs_fcfile::fileList(), filesystem_is_query_match(), filter_set_vector(), filter_string_vector_print(), filter_string_vector_read(), filter_view_get_policy_classes(), filter_view_get_policy_roles(), filter_view_get_policy_types(), filter_view_get_policy_users(), filter_view_init_context(), filter_view_on_class_context_click(), filter_view_on_entry_focus_out(), filter_view_on_srole_context_click(), filter_view_on_stype_context_click(), filter_view_on_suser_context_click(), filter_view_on_trole_context_click(), filter_view_on_ttype_context_click(), filter_view_on_tuser_context_click(), filters_simple(), find_assoc_types_get_list(), find_avrules_in_node(), find_domains_get_list(), find_domains_init(), find_domains_run(), find_file_types_get_list(), find_file_types_init(), find_file_types_run(), find_net_domains_get_list(), find_net_domains_run(), find_netif_types_get_list(), find_netif_types_run(), find_node_types_get_list(), find_node_types_run(), find_port_types_get_list(), find_port_types_run(), find_result(), find_terules_in_node(), get_rule_modification_str(), get_tokens(), sefs_filesystem::getDevName(), imp_range_trans_run(), inc_dom_trans_run(), inc_mount_run(), inc_net_access_run(), infoflow_direct_overview(), infoflow_trans_overview(), insert_hostname(), insert_standard_msg_header(), insert_time(), sefs_filesystem::isQueryMatch(), level_create_from_apol_mls_level(), level_deep_diff(), level_deep_diff_apol_mls_levels(), level_deep_diff_cats(), level_get_cats(), level_get_items(), level_new_diff(), level_to_string(), load_parse(), load_policy_msg_get_policy_components(), load_policy_msg_is_old_load_policy_string(), log_get_malformed_messages(), log_get_messages(), main(), map_to_vector(), message_view_entire_message(), message_view_export_all_messages(), message_view_export_messages_vector(), message_view_export_selected_messages(), message_view_messages_vector(), message_view_store_get_value(), model_refresh(), model_sort(), modified_mls_range_to_string(), modify_view_on_import_click(), modify_view_update_filter_store(), name_perm_vector_add_perm(), name_perm_vector_has_incomplete_perms(), nomls_tests(), open_policy_build_path(), open_policy_init_value(), open_policy_init_values(), open_policy_on_add_click(), open_policy_on_base_browse_click(), open_policy_on_import_click(), parse_default_contexts(), perform_av_query(), perform_ra_query(), perform_range_query(), perform_rt_query(), perform_te_query(), poldiff_attrib_get_added_types(), poldiff_attrib_get_removed_types(), poldiff_avrule_get_added_perms(), poldiff_avrule_get_mod_line_numbers(), poldiff_avrule_get_mod_line_numbers_for_perm(), poldiff_avrule_get_orig_line_numbers(), poldiff_avrule_get_orig_line_numbers_for_perm(), poldiff_avrule_get_removed_perms(), poldiff_avrule_get_unmodified_perms(), poldiff_build_bsts(), poldiff_class_get_added_perms(), poldiff_class_get_removed_perms(), poldiff_common_get_added_perms(), poldiff_common_get_removed_perms(), poldiff_do_item_diff(), poldiff_get_attrib_vector(), poldiff_get_avrule_vector(), poldiff_get_avrule_vector_allow(), poldiff_get_avrule_vector_auditallow(), poldiff_get_avrule_vector_dontaudit(), poldiff_get_avrule_vector_neverallow(), poldiff_get_bool_vector(), poldiff_get_cat_vector(), poldiff_get_class_vector(), poldiff_get_common_vector(), poldiff_get_level_vector(), poldiff_get_range_trans_vector(), poldiff_get_role_allow_vector(), poldiff_get_role_trans_vector(), poldiff_get_role_vector(), poldiff_get_terule_vector(), poldiff_get_terule_vector_change(), poldiff_get_terule_vector_member(), poldiff_get_terule_vector_trans(), poldiff_get_type_vector(), poldiff_get_user_vector(), poldiff_level_get_added_cats(), poldiff_level_get_removed_cats(), poldiff_level_get_unmodified_cats(), poldiff_range_get_levels(), poldiff_range_get_min_added_cats(), poldiff_range_get_min_removed_cats(), poldiff_range_get_min_unmodified_cats(), poldiff_role_allow_get_added_roles(), poldiff_role_allow_get_removed_roles(), poldiff_role_allow_get_unmodified_roles(), poldiff_role_get_added_types(), poldiff_role_get_removed_types(), poldiff_terule_get_mod_line_numbers(), poldiff_terule_get_orig_line_numbers(), poldiff_type_get_added_attribs(), poldiff_type_get_removed_attribs(), poldiff_type_remap_create(), poldiff_type_remap_entry_get_modified_types(), poldiff_type_remap_entry_get_original_types(), poldiff_type_remap_get_entries(), poldiff_user_get_added_roles(), poldiff_user_get_removed_roles(), poldiff_user_get_unmodified_roles(), policy_21_range_trans_all(), policy_21_range_trans_either(), policy_21_range_trans_lnk_file(), policy_21_range_trans_process(), policy_21_range_trans_socket(), policy_components_view_run(), policy_view_display_avrule_results(), policy_view_populate_combo_boxes(), policy_view_stats_update(), preferences_create(), preferences_get_recent_logs(), preferences_get_recent_policies(), preferences_parse_old_recent_files(), preferences_view_on_browse_click(), preferences_write_to_conf_file(), prefs_add_recent_vector(), print_attribs(), print_av_results(), print_cat_sens(), print_cats(), print_fsuse(), print_genfscon(), print_isids(), print_nodecon(), print_ra_results(), print_range_results(), print_rt_results(), print_rule_diffs(), print_rule_section(), print_sens(), print_stats(), print_syn_av_results(), print_syn_te_results(), print_te_results(), print_test_failure(), print_types(), query_append_type(), query_create_candidate_type(), range_create(), range_deep_diff(), range_trans_get_items(), range_trans_new_diff(), relabel_analysis_compare_type_to_vector(), relabel_analysis_get_type_vector(), relabel_analysis_matchup(), relabel_analysis_object(), relabel_analysis_subject(), relabel_result_get_node(), remap_types_highlight_entries(), remap_types_on_add_click(), remap_types_update(), remap_types_update_view(), report_enforce_toggle_filter_create(), report_print_avc_listing(), report_print_enforce_toggles(), report_print_loaded_view(), report_print_malformed(), report_print_policy_booleans(), report_print_policy_loads(), report_print_stats(), report_window_browse(), result_item_avrule_print_diff(), result_item_avrule_sort(), result_item_get_vector(), result_item_inline_link_event(), result_item_print_diff(), result_item_print_linenos(), result_item_print_modified_range(), result_item_print_rule_diff(), result_item_range_trans_get_buffer(), result_item_terule_print_diff(), result_item_terule_sort(), result_item_user_get_buffer(), result_item_user_print_modified(), role_allow_deep_diff(), role_allow_get_items(), role_basic(), role_deep_diff(), role_get_items(), role_get_types(), role_regex(), role_trans_get_items(), roleallow_to_string(), roles_wo_allow_get_list(), roles_wo_allow_run(), roles_wo_types_run(), roles_wo_users_get_list(), roles_wo_users_run(), rule_select(), run_test(), sefs_fclist::runQuery(), sefs_fcfile::runQueryMap(), seaudit_avc_message_get_perm(), seaudit_filter_create_from_file(), seaudit_filter_get_source_role(), seaudit_filter_get_source_type(), seaudit_filter_get_source_user(), seaudit_filter_get_target_class(), seaudit_filter_get_target_role(), seaudit_filter_get_target_type(), seaudit_filter_get_target_user(), seaudit_filter_set_source_role(), seaudit_filter_set_source_type(), seaudit_filter_set_source_user(), seaudit_filter_set_target_class(), seaudit_filter_set_target_role(), seaudit_filter_set_target_type(), seaudit_filter_set_target_user(), seaudit_get_log_classes(), seaudit_get_log_roles(), seaudit_get_log_types(), seaudit_get_log_users(), seaudit_log_get_classes(), seaudit_log_get_roles(), seaudit_log_get_types(), seaudit_log_get_users(), seaudit_log_parse_line(), seaudit_model_get_filters(), seaudit_model_get_malformed_messages(), seaudit_model_get_messages(), seaudit_parse_command_line(), seaudit_set_log(), sechk_lib_module_clear_option(), sediffx_parse_command_line(), sefs_fcfile::sefs_fcfile(), sefs_fcfile_append_file_list(), sefs_fcfile_create_from_file_list(), sefs_fcfile_get_file_list(), sefs_fclist_run_query(), shallow_copy_str_vec_and_sort(), spurious_audit_run(), string_array_to_vector(), table_add_avrule(), table_add_terule(), terule_basic_syn(), terule_enable_line_numbers(), terule_get_items(), terule_get_items_change(), terule_get_items_member(), terule_get_items_trans(), terule_new_diff(), toplevel_get_log_classes(), toplevel_get_log_roles(), toplevel_get_log_types(), toplevel_get_log_users(), toplevel_on_open_log_activate(), toplevel_on_open_view_activate(), toplevel_set_recent_logs_submenu(), toplevel_set_recent_policies_submenu(), type_deep_diff(), type_get_attrib_names(), type_get_items(), type_get_name(), type_map_build(), type_map_dump(), type_map_get_name(), type_map_infer(), type_map_lookup_reverse(), type_map_prim_aliases_comp(), type_map_vector_free(), type_remap_vector_dump(), types_wo_allow_get_list(), types_wo_allow_run(), unreachable_doms_run(), user_basic(), user_deep_diff_roles(), user_get_items(), user_get_roles(), user_new_diff(), user_regex(), users_wo_roles_run(), util_open_file(), util_policy_path_to_full_string(), util_policy_path_to_string(), vector_set_free_func(), and vector_to_string().

typedef int( apol_vector_comp_func)(const void *a, const void *b, void *data)
 

Definition at line 39 of file vector.h.

typedef void( apol_vector_free_func)(void *elem)
 

Definition at line 40 of file vector.h.

typedef void*( apol_vector_dup_func)(const void *elem, void *data)
 

Definition at line 41 of file vector.h.


Function Documentation

apol_vector_t* apol_vector_create apol_vector_free_func fr  ) 
 

Allocate and initialize an empty vector with default capacity.

Parameters:
fr Function to call when destroying the vector. Each element of the vector will be passed into this function; it should free the memory used by that element. If this parameter is NULL, the elements will not be freed.
Returns:
A pointer to a newly created vector on success and NULL on failure. If the call fails, errno will be set. The caller is responsible for calling apol_vector_destroy() to free memory used.

Definition at line 49 of file vector.c.

References apol_vector_create_with_capacity(), APOL_VECTOR_DFLT_INIT_CAP, and apol_vector_t.

Referenced by apol_attr_get_by_query(), apol_avrule_get_by_query(), apol_avrule_list_to_syn_avrules(), apol_avrule_query_append_class(), apol_avrule_query_append_perm(), apol_avrule_to_syn_avrules(), apol_bool_get_by_query(), apol_cat_get_by_query(), apol_class_get_by_query(), apol_common_get_by_query(), apol_cond_get_by_query(), apol_constraint_get_by_query(), apol_domain_trans_analysis_append_access_type(), apol_domain_trans_analysis_append_class(), apol_domain_trans_analysis_append_perm(), apol_domain_trans_analysis_do(), apol_fs_use_get_by_query(), apol_genfscon_get_by_query(), apol_infoflow_analysis_append_class_perm(), apol_infoflow_analysis_append_intermediate(), apol_infoflow_analysis_direct(), apol_infoflow_analysis_do_more(), apol_infoflow_analysis_trans(), apol_infoflow_analysis_trans_further_next(), apol_infoflow_analysis_trans_further_prepare(), apol_infoflow_direct_define(), apol_infoflow_direct_get_result(), apol_infoflow_graph_create(), apol_infoflow_graph_create_edge(), apol_infoflow_graph_create_node(), apol_infoflow_trans_path(), apol_isid_get_by_query(), apol_level_get_by_query(), apol_mls_level_append_cats(), apol_mls_level_create(), apol_mls_range_get_levels(), apol_netifcon_get_by_query(), apol_nodecon_get_by_query(), apol_obj_perm_append_perm(), apol_obj_perm_create(), apol_perm_get_by_query(), apol_policy_path_create(), apol_portcon_get_by_query(), apol_query_create_candidate_class_list(), apol_query_create_candidate_role_list(), apol_query_create_candidate_syn_type_list(), apol_query_create_candidate_type_list(), apol_query_expand_type(), apol_range_trans_get_by_query(), apol_range_trans_query_append_class(), apol_relabel_analysis_append_class(), apol_relabel_analysis_append_subject(), apol_relabel_analysis_do(), apol_role_allow_get_by_query(), apol_role_get_by_query(), apol_role_trans_get_by_query(), apol_str_split(), apol_syn_avrule_get_by_query(), apol_syn_terule_get_by_query(), apol_terule_get_by_query(), apol_terule_query_append_class(), apol_terule_to_syn_terules(), apol_type_get_by_query(), apol_types_relation_access_append_rule(), apol_types_relation_accesses(), apol_types_relation_common_users(), apol_types_relation_directflow(), apol_types_relation_domain(), apol_types_relation_transflow(), apol_types_relation_types(), apol_user_get_by_query(), apol_validatetrans_get_by_query(), apol_vector_create_from_intersection(), attrib_deep_diff(), attrib_get_items(), attrib_get_types(), attrib_summary_create(), attribs_wo_rules_run(), attribs_wo_types_run(), avrule_create(), avrule_deep_diff(), avrule_get_line_numbers_for_perm(), avrule_new_diff(), bool_create(), bool_message_create(), build_avrule_vecs(), build_rangetrans_vecs(), build_roletrans_vecs(), build_terule_vecs(), sefs_filesystem::buildDevMap(), cat_create(), class_create(), class_get_perms(), common_create(), common_get_perms(), components_types_tests(), dom_node_create(), domain_and_file_run(), domain_trans_result_create(), domain_trans_table_get_all_forward_trans(), domain_trans_table_get_all_reverse_trans(), domains_wo_roles_run(), fcfile_open(), filter_view_get_policy_classes(), filter_view_get_policy_roles(), filter_view_get_policy_types(), filter_view_get_policy_users(), filter_view_on_entry_focus_out(), find_assoc_types_run(), find_avrules_in_node(), find_domains_init(), find_domains_run(), find_file_types_init(), find_file_types_run(), find_net_domains_init(), find_net_domains_run(), find_netif_types_run(), find_node_types_run(), find_port_types_run(), find_terules_in_node(), get_tokens(), imp_range_trans_run(), inc_dom_trans_run(), inc_mount_run(), inc_net_access_run(), level_create(), level_deep_diff_cats(), level_get_cats(), main(), make_diff(), message_view_entire_message(), message_view_export_selected_messages(), model_refresh(), net_state_create(), nomls_tests(), open_policy_build_path(), parse_command_line_args(), poldiff_type_remap_flush(), policy_components_view_run(), policy_view_populate_combo_boxes(), preferences_create(), preferences_write_to_conf_file(), query_create_candidate_type(), range_create(), range_trans_create(), range_trans_get_items(), relabel_result_get_node(), remap_types_update_view(), result_item_avrule_sort(), result_item_terule_sort(), role_allow_create(), role_create(), role_deep_diff(), role_get_types(), role_trans_create(), role_trans_get_items(), roles_wo_allow_run(), roles_wo_types_run(), roles_wo_users_run(), run_test(), sefs_fclist::runQuery(), seaudit_filter_create_from_file(), seaudit_log_clear(), seaudit_log_create(), seaudit_model_create_from_file(), seaudit_parse_command_line(), sechk_lib_module_clear_option(), sechk_lib_new(), sechk_module_new(), sediffx_parse_command_line(), sefs_fcfile::sefs_fcfile(), spurious_audit_run(), string_array_to_vector(), terule_create(), terule_deep_diff(), terule_new_diff(), toplevel_create(), type_get_attrib_names(), type_get_items(), type_map_build(), type_map_create(), type_summary_create(), types_wo_allow_run(), unreachable_doms_init(), unreachable_doms_run(), user_create(), user_get_roles(), users_wo_roles_run(), and util_open_file().

00050 {
00051         return apol_vector_create_with_capacity(APOL_VECTOR_DFLT_INIT_CAP, fr);
00052 }

apol_vector_t* apol_vector_create_with_capacity size_t  cap,
apol_vector_free_func fr
 

Allocate and initialize an empty vector with starting capacity of cap.

Parameters:
cap The starting capacity to allocate for the internal array.
fr Function to call when destroying the vector. Each element of the vector will be passed into this function; it should free the memory used by that element. If this parameter is NULL, the elements will not be freed.
Returns:
A pointer to a newly created vector on success and NULL on failure. If the call fails, errno will be set. The caller is responsible for calling apol_vector_destroy() to free memory used.

Definition at line 54 of file vector.c.

References apol_vector_t, apol_vector::array, apol_vector::capacity, and apol_vector::fr.

Referenced by apol_bst_get_vector(), apol_infoflow_graph_create_nodes(), apol_infoflow_trans_define(), apol_infoflow_trans_further_shuffle(), apol_mls_level_convert(), apol_permmap_create_from_policy(), apol_vector_create(), apol_vector_create_from_iter(), apol_vector_create_from_vector(), avc_message_create(), avrule_get_items(), avrule_new_diff(), filter_string_vector_read(), infoflow_result_create_from_infoflow_result(), level_create_from_apol_mls_level(), make_common_diff(), make_diff(), make_ra_diff(), model_sort(), poldiff_type_remap_create(), poldiff_type_remap_entry_create(), range_create(), relabel_analysis_get_type_vector(), report_enforce_toggle_filter_create(), role_allow_get_items(), seaudit_model_clear_sorts(), seaudit_model_create(), sefs_fcfile::sefs_fcfile(), terule_get_items(), and type_map_build().

00055 {
00056         apol_vector_t *v = NULL;
00057         int error;
00058 
00059         if (cap < 1) {
00060                 cap = 1;
00061         }
00062         v = calloc(1, sizeof(apol_vector_t));
00063         if (!v)
00064                 return NULL;
00065         v->array = calloc((v->capacity = cap), sizeof(void *));
00066         if (!(v->array)) {
00067                 error = errno;
00068                 free(v);
00069                 errno = error;
00070                 return NULL;
00071         }
00072         v->fr = fr;
00073         return v;
00074 }

apol_vector_t* apol_vector_create_from_iter qpol_iterator_t iter,
apol_vector_free_func fr
 

Allocate and return a vector that has been initialized with the contents of a qpol iterator.

This function merely makes a shallow copy of the iterator's contents; any memory ownership restrictions imposed by the iterator apply to this vector as well. Also note that this function begins copying from the iterator's current position, leaving the iterator at its end position afterwards.

Parameters:
iter qpol iterator from which to obtain vector's contents.
fr Function to call when destroying the vector. Each element of the vector will be passed into this function; it should free the memory used by that element. If this parameter is NULL, the elements will not be freed.
Returns:
A pointer to a newly created vector on success and NULL on failure. If the call fails, errno will be set. The caller is responsible for calling apol_vector_destroy() to free memory used.

Definition at line 76 of file vector.c.

References apol_vector_append(), apol_vector_create_with_capacity(), apol_vector_t, qpol_iterator_end(), qpol_iterator_get_item(), qpol_iterator_get_size(), qpol_iterator_next(), and qpol_iterator_t.

Referenced by apol_mls_level_validate(), apol_mls_range_get_levels(), apol_types_relation_common_attribs(), bool_get_items(), cat_get_items(), class_get_items(), common_get_items(), level_get_items(), role_allow_get_items(), role_get_items(), spurious_audit_run(), type_map_prim_aliases_comp(), and user_get_items().

00077 {
00078         size_t iter_size;
00079         apol_vector_t *v;
00080         void *item;
00081         int error;
00082         if (qpol_iterator_get_size(iter, &iter_size) < 0 || (v = apol_vector_create_with_capacity(iter_size, fr)) == NULL) {
00083                 return NULL;
00084         }
00085         for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) {
00086                 if (qpol_iterator_get_item(iter, &item)) {
00087                         error = errno;
00088                         free(v);
00089                         errno = error;
00090                         return NULL;
00091                 }
00092                 apol_vector_append(v, item);
00093         }
00094         return v;
00095 }

apol_vector_t* apol_vector_create_from_vector const apol_vector_t v,
apol_vector_dup_func dup,
void *  data,
apol_vector_free_func fr
 

Allocate and return a vector that has been initialized with the contents of another vector.

Parameters:
v Vector from which to copy.
dup If NULL, then make a shallow copy of the original vector's contents. Otherwise this function will be called upon for each element from the original vector; the return value will be the value stored in the new vector.
data Arbitrary data to pass as dup's second parameter.
fr Function to call when destroying the new vector. Each element of the vector will be passed into this function; it should free the memory used by that element. If this parameter is NULL, the elements will not be freed.
Returns:
A pointer to a newly created vector on success and NULL on failure. If the call fails, errno will be set. The caller is responsible for calling apol_vector_destroy() to free memory used.

Definition at line 97 of file vector.c.

References apol_vector_create_with_capacity(), apol_vector_t, apol_vector::array, apol_vector::capacity, and apol_vector::size.

Referenced by apol_domain_trans_result_create_from_domain_trans_result(), apol_infoflow_trans_define(), apol_mls_level_create_from_mls_level(), apol_mls_level_render(), apol_policy_path_create(), apol_syn_avrule_get_by_query(), apol_types_relation_access_append(), filter_set_vector(), filter_view_init_context(), infoflow_result_create_from_infoflow_result(), level_create_from_apol_mls_level(), level_deep_diff(), level_deep_diff_apol_mls_levels(), level_new_diff(), poldiff_type_remap_entry_get_modified_types(), poldiff_type_remap_entry_get_original_types(), policy_components_view_init_lists(), policy_components_view_run(), print_rule_diffs(), range_create(), seaudit_filter_create_from_filter(), seaudit_model_create_from_model(), seaudit_model_get_malformed_messages(), seaudit_model_get_messages(), shallow_copy_str_vec_and_sort(), and user_new_diff().

00099 {
00100         apol_vector_t *new_v;
00101         size_t i;
00102         if (v == NULL) {
00103                 errno = EINVAL;
00104                 return NULL;
00105         }
00106         if ((new_v = apol_vector_create_with_capacity(v->capacity, fr)) == NULL) {
00107                 return NULL;
00108         }
00109         if (dup == NULL) {
00110                 memcpy(new_v->array, v->array, v->size * sizeof(void *));
00111         } else {
00112                 for (i = 0; i < v->size; i++) {
00113                         new_v->array[i] = dup(v->array[i], data);
00114                 }
00115         }
00116         new_v->size = v->size;
00117         return new_v;
00118 }

apol_vector_t* apol_vector_create_from_intersection const apol_vector_t v1,
const apol_vector_t v2,
apol_vector_comp_func cmp,
void *  data
 

Allocate and return a vector that has been initialized with the contents common to two other vectors.

This function merely makes a shallow copy of the vectors' contents; any memory ownership restrictions imposed by the original vectors apply to this new vector as well. Note that if a source vector contains duplicate elements the returned vector may (or may not) have duplicates as well. If the caller does not want duplicate entries then apol_vector_sort_uniquify() should be called afterwards.

Parameters:
v1 First vector from which to compute the intersection.
v2 Other vector to compute intersection.
cmp A comparison call back for the type of element stored in the vector. The expected return value from this function is less than, equal to, or greater than 0 if the first argument is less than, equal to, or greater than the second respectively. If this is NULL then do pointer address comparison.
data Arbitrary data to pass as the comparison function's third paramater.
Returns:
A pointer to a newly created vector on success and NULL on failure. If the call fails, errno will be set. The caller is responsible for calling apol_vector_destroy() to free memory used.

Definition at line 120 of file vector.c.

References apol_vector_append(), apol_vector_create(), apol_vector_destroy(), apol_vector_t, apol_vector::array, and apol_vector::size.

Referenced by apol_types_relation_common_attribs(), apol_types_relation_common_roles(), components_types_tests(), imp_range_trans_run(), inc_dom_trans_run(), run_test(), spurious_audit_run(), and unreachable_doms_run().

00122 {
00123         apol_vector_t *new_v;
00124         size_t i, j;
00125         if (v1 == NULL || v2 == NULL) {
00126                 errno = EINVAL;
00127                 return NULL;
00128         }
00129         if ((new_v = apol_vector_create(NULL)) == NULL) {
00130                 return NULL;
00131         }
00132         for (i = 0; i < v1->size; i++) {
00133                 for (j = 0; j < v2->size; j++) {
00134                         if ((cmp != NULL && cmp(v1->array[i], v2->array[j], data) == 0) ||
00135                             (cmp == NULL && v1->array[i] == v2->array[j])) {
00136                                 if (apol_vector_append(new_v, v1->array[i]) < 0) {
00137                                         apol_vector_destroy(&new_v);
00138                                         return NULL;
00139                                 }
00140                                 break;
00141                         }
00142                 }
00143         }
00144         return new_v;
00145 }

void apol_vector_destroy apol_vector_t **  v  ) 
 

Free a vector and any memory used by it.

This will recursively invoke the free function that was stored within the vector when it was created.

Parameters:
v Pointer to the vector to free. The pointer will be set to NULL afterwards. If already NULL then this function does nothing.

Definition at line 147 of file vector.c.

References apol_vector_t, apol_vector::array, and apol_vector::fr.

Referenced by apol_attr_get_by_query(), apol_avrule_get_by_query(), apol_avrule_list_to_syn_avrules(), apol_avrule_query_append_class(), apol_avrule_query_append_perm(), apol_avrule_query_destroy(), apol_avrule_to_syn_avrules(), apol_bool_get_by_query(), apol_bst_get_vector(), apol_cat_get_by_query(), apol_class_get_by_query(), apol_common_get_by_query(), apol_cond_get_by_query(), apol_constraint_get_by_query(), apol_context_validate_partial(), apol_domain_trans_analysis_append_access_type(), apol_domain_trans_analysis_append_class(), apol_domain_trans_analysis_append_perm(), apol_domain_trans_analysis_destroy(), apol_domain_trans_analysis_do(), apol_domain_trans_table_verify_trans(), apol_fs_use_get_by_query(), apol_genfscon_get_by_query(), apol_infoflow_analysis_append_class_perm(), apol_infoflow_analysis_append_intermediate(), apol_infoflow_analysis_destroy(), apol_infoflow_analysis_direct(), apol_infoflow_analysis_do_more(), apol_infoflow_analysis_trans(), apol_infoflow_analysis_trans_expand(), apol_infoflow_analysis_trans_further(), apol_infoflow_analysis_trans_further_prepare(), apol_infoflow_edge_free(), apol_infoflow_graph_connect_nodes(), apol_infoflow_graph_create_nodes(), apol_infoflow_graph_create_required_types(), apol_infoflow_graph_destroy(), apol_infoflow_graph_get_nodes_for_type(), apol_infoflow_node_free(), apol_infoflow_step_free(), apol_infoflow_trans_further_shuffle(), apol_infoflow_trans_path(), apol_isid_get_by_query(), apol_level_get_by_query(), apol_mls_level_convert(), apol_mls_level_render(), apol_mls_level_validate(), apol_mls_range_get_levels(), apol_netifcon_get_by_query(), apol_nodecon_get_by_query(), apol_obj_perm_append_perm(), apol_obj_perm_free(), apol_perm_get_by_query(), apol_policy_build_domain_trans_table(), apol_policy_path_create_from_file(), apol_policy_path_create_from_string(), apol_policy_path_destroy(), apol_portcon_get_by_query(), apol_query_create_candidate_class_list(), apol_query_create_candidate_role_list(), apol_query_create_candidate_syn_type_list(), apol_query_create_candidate_type_list(), apol_query_expand_type(), apol_range_trans_get_by_query(), apol_range_trans_query_append_class(), apol_range_trans_query_destroy(), apol_relabel_analysis_append_class(), apol_relabel_analysis_append_subject(), apol_relabel_analysis_destroy(), apol_relabel_analysis_do(), apol_role_allow_get_by_query(), apol_role_get_by_query(), apol_role_trans_get_by_query(), apol_str_split(), apol_syn_avrule_get_by_query(), apol_syn_terule_get_by_query(), apol_terule_get_by_query(), apol_terule_query_append_class(), apol_terule_query_destroy(), apol_terule_to_syn_terules(), apol_type_get_by_query(), apol_types_relation_access_append_rule(), apol_types_relation_access_free(), apol_types_relation_accesses(), apol_types_relation_allows(), apol_types_relation_clone_domaintrans(), apol_types_relation_clone_infoflow(), apol_types_relation_common_attribs(), apol_types_relation_common_roles(), apol_types_relation_common_users(), apol_types_relation_create_access_pools(), apol_types_relation_directflow(), apol_types_relation_domain(), apol_types_relation_result_destroy(), apol_types_relation_transflow(), apol_types_relation_types(), apol_user_get_by_query(), apol_validatetrans_get_by_query(), apol_vector_create_from_intersection(), append_avrule_to_subject_vector(), append_avrules_to_object_vector(), attrib_deep_diff(), attrib_free(), attrib_get_types(), attrib_summary_destroy(), attribs_wo_rules_run(), attribs_wo_types_run(), avc_message_free(), avrule_basic_syn(), avrule_deep_diff(), avrule_default(), avrule_destroy(), avrule_get_items(), avrule_get_line_numbers_for_perm(), bool_destroy(), bool_message_free(), build_avrule_vecs(), build_rangetrans_vecs(), build_roletrans_vecs(), build_terule_vecs(), sefs_filesystem::buildDevMap(), cat_destroy(), class_deep_diff(), class_destroy(), class_free(), class_get_perms(), cleanup_test(), common_deep_diff(), common_destroy(), common_free(), common_get_perms(), components_types_tests(), dom_node_create(), dom_node_free(), domain_trans_result_free(), domain_trans_table_find_orphan_type_transitions(), domain_trans_table_get_all_forward_trans(), domain_trans_table_get_all_reverse_trans(), domains_wo_roles_run(), dta_forward(), dta_forward_access(), dta_forward_multi_end(), dta_invalid(), dta_reflexive(), dta_reverse(), dta_reverse_regexp(), exists_common_user(), fcfile_open(), fcfile_query(), filter_set_vector(), filter_view_destroy_context_vectors(), filter_view_get_policy_classes(), filter_view_get_policy_roles(), filter_view_get_policy_types(), filter_view_get_policy_users(), filter_view_on_class_context_click(), filter_view_on_entry_focus_out(), filter_view_on_srole_context_click(), filter_view_on_stype_context_click(), filter_view_on_suser_context_click(), filter_view_on_trole_context_click(), filter_view_on_ttype_context_click(), filter_view_on_tuser_context_click(), filters_simple(), find_avrules_in_node(), find_domains_data_free(), find_domains_init(), find_domains_run(), find_file_types_data_free(), find_file_types_init(), find_file_types_run(), find_net_domains_data_free(), find_net_domains_run(), find_netif_types_run(), find_node_types_run(), find_port_types_run(), find_terules_in_node(), get_rule_modification_str(), get_tokens(), sefs_filesystem::getDevName(), imp_range_trans_run(), inc_dom_trans_run(), inc_mount_run(), inc_net_access_run(), infoflow_direct_overview(), infoflow_result_free(), infoflow_trans_overview(), level_deep_diff(), level_deep_diff_apol_mls_levels(), level_deep_diff_cats(), level_destroy(), level_free(), level_get_cats(), level_new_diff(), main(), message_view_destroy(), message_view_dialog_response(), message_view_entire_message(), message_view_export_selected_messages(), message_view_messages_vector(), message_view_update_rows(), mls_level_free(), model_refresh(), model_sort(), modify_view_on_import_click(), net_state_destroy(), nomls_tests(), open_policy_build_path(), open_policy_on_add_click(), open_policy_on_base_browse_click(), open_policy_on_import_click(), perform_av_query(), perform_ra_query(), perform_range_query(), perform_rt_query(), perform_te_query(), permmap_class_free(), permmap_destroy(), poldiff_avrule_free(), poldiff_build_bsts(), poldiff_do_item_diff(), poldiff_terule_free(), poldiff_type_remap_flush(), policy_21_range_trans_all(), policy_21_range_trans_either(), policy_21_range_trans_lnk_file(), policy_21_range_trans_process(), policy_21_range_trans_socket(), policy_components_view_run(), policy_view_destroy(), policy_view_on_find_terules_click(), policy_view_populate_combo_boxes(), policy_view_stats_update(), preferences_create(), preferences_destroy(), preferences_parse_old_recent_files(), preferences_view_on_browse_click(), preferences_write_to_conf_file(), print_attribs(), print_cat_sens(), print_cats(), print_fsuse(), print_genfscon(), print_isids(), print_nodecon(), print_rule_diffs(), print_sens(), print_stats(), print_types(), query_create_candidate_type(), range_create(), range_deep_diff(), range_destroy(), range_trans_destroy(), range_trans_get_items(), relabel_analysis_get_type_vector(), relabel_analysis_matchup(), relabel_analysis_object(), relabel_analysis_subject(), relabel_result_free(), remap_types_highlight_entries(), remap_types_on_add_click(), remap_types_update(), remap_types_update_view(), report_enforce_toggle_filter_create(), report_print_avc_listing(), report_print_enforce_toggles(), report_print_loaded_view(), report_print_malformed(), report_print_policy_booleans(), report_print_policy_loads(), report_print_stats(), report_window_browse(), result_item_avrule_print_diff(), result_item_avrule_sort(), result_item_multi_destructor(), result_item_terule_print_diff(), result_item_terule_sort(), role_allow_destroy(), role_allow_free(), role_allow_free_item(), role_allow_get_items(), role_basic(), role_deep_diff(), role_destroy(), role_free(), role_get_types(), role_regex(), role_trans_destroy(), role_trans_get_items(), roles_wo_allow_run(), roles_wo_types_run(), roles_wo_users_run(), run_test(), sefs_fclist::runQuery(), sefs_db::runQueryMap(), sefs_fcfile::runQueryMap(), sefs_filesystem::runQueryMap(), seaudit_filter_create_from_file(), seaudit_filter_destroy(), seaudit_log_clear(), seaudit_log_destroy(), seaudit_log_parse_line(), seaudit_model_clear_sorts(), seaudit_model_create_from_file(), seaudit_model_destroy(), seaudit_parse_command_line(), seaudit_set_log(), sechk_item_free(), sechk_lib_destroy(), sechk_lib_module_clear_option(), sechk_module_free(), sechk_module_new(), sechk_result_destroy(), sediffx_parse_command_line(), sefs_fcfile::sefs_fcfile(), spurious_audit_run(), table_add_avrule(), table_add_terule(), terule_basic_syn(), terule_destroy(), terule_get_items(), toplevel_destroy(), toplevel_on_open_log_activate(), toplevel_on_open_view_activate(), type_deep_diff(), type_destroy(), type_get_attrib_names(), type_map_build(), type_map_destroy(), type_map_infer(), type_map_prim_aliases_comp(), type_map_vector_free(), type_remap_entry_free(), type_remap_vector_dump(), type_summary_destroy(), types_wo_allow_run(), unreachable_doms_data_free(), unreachable_doms_run(), user_basic(), user_deep_diff_roles(), user_destroy(), user_free(), user_get_roles(), user_new_diff(), user_regex(), users_wo_roles_run(), and sefs_fcfile::~sefs_fcfile().

00148 {
00149         size_t i = 0;
00150 
00151         if (!v || !(*v))
00152                 return;
00153 
00154         if ((*v)->fr) {
00155                 for (i = 0; i < (*v)->size; i++) {
00156                         (*v)->fr((*v)->array[i]);
00157                 }
00158         }
00159         free((*v)->array);
00160         (*v)->array = NULL;
00161         free(*v);
00162         *v = NULL;
00163 }

size_t apol_vector_get_size const apol_vector_t v  ) 
 

Get the number of elements in the vector.

Parameters:
v The vector from which to get the number of elements. Must be non-NULL.
Returns:
The number of elements in the vector; if v is NULL, returns 0.

Definition at line 165 of file vector.c.

References apol_vector_t, and apol_vector::size.

Referenced by apol_avrule_get_by_query(), apol_avrule_list_to_syn_avrules(), apol_avrule_to_syn_avrules(), apol_context_validate_partial(), apol_domain_trans_analysis_do(), apol_domain_trans_table_verify_trans(), apol_infoflow_analysis_direct(), apol_infoflow_analysis_trans(), apol_infoflow_analysis_trans_further(), apol_infoflow_analysis_trans_further_next(), apol_infoflow_analysis_trans_shortest_path(), apol_infoflow_direct_define(), apol_infoflow_direct_get_result(), apol_infoflow_graph_check_class_perms(), apol_infoflow_graph_connect_nodes(), apol_infoflow_graph_create_required_types(), apol_infoflow_graph_get_nodes_for_type(), apol_infoflow_graph_trans_further_init(), apol_infoflow_graph_trans_init(), apol_infoflow_results_check_both(), apol_infoflow_trans_append(), apol_infoflow_trans_define(), apol_infoflow_trans_find_edge(), apol_infoflow_trans_further_shuffle(), apol_infoflow_trans_path(), apol_mls_level_compare(), apol_mls_level_render(), apol_mls_level_validate(), apol_mls_range_get_levels(), apol_policy_build_domain_trans_table(), apol_policy_create_from_policy_path(), apol_policy_path_create_from_file(), apol_policy_path_create_from_string(), apol_policy_path_to_file(), apol_policy_path_to_string(), apol_policy_save_permmap(), apol_query_create_candidate_class_list(), apol_query_create_candidate_syn_type_list(), apol_query_create_candidate_type_list(), apol_query_type_set_uses_types_directly(), apol_range_trans_get_by_query(), apol_str_join(), apol_syn_avrule_get_by_query(), apol_syn_terule_get_by_query(), apol_terule_get_by_query(), apol_terule_list_to_syn_terules(), apol_types_relation_access_append_rule(), apol_types_relation_accesses(), apol_types_relation_clone_domaintrans(), apol_types_relation_clone_infoflow(), apol_types_relation_create_access_pools(), apol_types_relation_types(), apol_vector_cat(), apol_vector_compare(), append_avrule_to_subject_vector(), append_avrules_to_object_vector(), sefs_fcfile::appendFile(), sefs_fcfile::appendFileList(), are_all_classes_mapped(), are_all_perms_mapped(), attrib_deep_diff(), attribs_wo_rules_print(), attribs_wo_rules_run(), attribs_wo_types_print(), attribs_wo_types_run(), avc_message_to_string(), avc_message_to_string_html(), avc_msg_insert_additional_field_data(), avc_msg_insert_perms(), avc_parse(), avrule_basic_syn(), avrule_deep_diff(), avrule_default(), avrule_enable_line_numbers(), avrule_get_items(), avrule_new_diff(), bool_message_to_misc_string(), bool_message_to_string(), bool_message_to_string_html(), bool_parse(), build_avrule_vecs(), build_category_vecs(), build_component_vecs(), build_level_vecs(), build_nomls_vecs(), build_rangetrans_vecs(), build_roleallow_vecs(), build_roletrans_vecs(), build_terule_vecs(), build_user_vecs(), class_deep_diff(), common_deep_diff(), components_types_tests(), domain_and_file_print(), domain_and_file_run(), domain_trans_table_find_orphan_type_transitions(), domain_trans_table_get_all_forward_trans(), domain_trans_table_get_all_reverse_trans(), domains_wo_roles_print(), domains_wo_roles_run(), dta_forward(), dta_forward_access(), dta_forward_multi_end(), dta_invalid(), dta_reflexive(), dta_reverse(), dta_reverse_regexp(), exists_common_user(), fcfile_open(), fcfile_query(), filter_perm_accept(), filter_perm_support(), filter_string_vector_print(), filter_view_context_item_to_entry(), filter_view_get_policy_classes(), filter_view_get_policy_roles(), filter_view_get_policy_types(), filter_view_get_policy_users(), filters_simple(), find_assoc_types_print(), find_domains_init(), find_domains_print(), find_domains_run(), find_file_types_init(), find_file_types_print(), find_file_types_run(), find_net_domains_init(), find_net_domains_print(), find_net_domains_run(), find_netif_types_print(), find_netif_types_run(), find_node_types_print(), find_node_types_run(), find_permmap_class(), find_permmap_perm(), find_port_types_print(), find_port_types_run(), find_result(), generate_common_only_proof_text(), generate_tcp_proof_text(), generate_udp_recv_proof_text(), generate_udp_send_proof_text(), get_rule_modification_str(), imp_range_trans_print(), imp_range_trans_run(), inc_dom_trans_print(), inc_dom_trans_run(), inc_mount_print(), inc_mount_run(), inc_net_access_print(), inc_net_access_run(), infoflow_direct_overview(), infoflow_result_create_from_infoflow_result(), infoflow_trans_overview(), insert_hostname(), insert_time(), level_deep_diff_cats(), level_to_string(), load_parse(), load_policy_msg_is_old_load_policy_string(), main(), message_comp(), message_view_clear(), message_view_dialog_response(), message_view_export_messages_vector(), message_view_get_num_log_messages(), message_view_store_get_iter(), message_view_store_get_value(), message_view_store_iter_children(), message_view_store_iter_n_children(), message_view_store_iter_next(), message_view_store_iter_nth_child(), message_view_update_rows(), model_filter_message(), model_recalc_stats(), model_refresh(), model_sort(), modified_mls_range_to_string(), modify_view_on_import_click(), modify_view_update_filter_store(), name_perm_vector_has_incomplete_perms(), open_policy_init_value(), open_policy_init_values(), open_policy_on_add_click(), perform_av_query(), perform_range_query(), perform_te_query(), poldiff_attrib_to_string(), poldiff_avrule_to_string(), poldiff_build_bsts(), poldiff_class_to_string(), poldiff_common_to_string(), poldiff_do_item_diff(), poldiff_level_to_string(), poldiff_level_to_string_brief(), poldiff_range_to_string_brief(), poldiff_role_allow_to_string(), poldiff_role_to_string(), poldiff_type_remap_create(), poldiff_type_to_string(), policy_21_range_trans_all(), policy_21_range_trans_either(), policy_21_range_trans_lnk_file(), policy_21_range_trans_process(), policy_21_range_trans_socket(), policy_components_view_init_lists(), policy_components_view_run(), policy_view_display_avrule_results(), policy_view_populate_combo_boxes(), policy_view_stats_update(), preferences_add_recent_policy(), preferences_create(), preferences_parse_old_recent_files(), preferences_write_to_conf_file(), prefs_add_recent_vector(), print_attribs(), print_av_results(), print_cat_sens(), print_cats(), print_fsuse(), print_genfscon(), print_isids(), print_nodecon(), print_ra_results(), print_range_results(), print_rt_results(), print_rule_section(), print_sens(), print_stats(), print_syn_av_results(), print_syn_te_results(), print_te_results(), print_test_failure(), print_types(), query_create_candidate_type(), range_create(), range_deep_diff(), range_trans_new_diff(), relabel_analysis_get_type_vector(), relabel_analysis_matchup(), relabel_analysis_object(), relabel_analysis_subject(), remap_types_highlight_entries(), remap_types_on_add_click(), remap_types_update(), remap_types_update_view(), report_print_avc_listing(), report_print_enforce_toggles(), report_print_loaded_view(), report_print_malformed(), report_print_policy_booleans(), report_print_policy_loads(), report_print_stats(), result_item_avrule_print_diff(), result_item_avrule_sort(), result_item_inline_link_event(), result_item_print_diff(), result_item_print_linenos(), result_item_print_modified_range(), result_item_print_rule_diff(), result_item_range_trans_get_buffer(), result_item_terule_print_diff(), result_item_terule_sort(), result_item_user_get_buffer(), result_item_user_print_modified(), role_allow_deep_diff(), role_allow_get_items(), role_basic(), role_deep_diff(), role_regex(), roleallow_to_string(), roles_wo_allow_print(), roles_wo_allow_run(), roles_wo_types_print(), roles_wo_types_run(), roles_wo_users_print(), roles_wo_users_run(), rule_select(), run_test(), sefs_fcfile::runQueryMap(), seaudit_log_clear(), seaudit_log_destroy(), seaudit_log_parse(), seaudit_log_parse_buffer(), seaudit_log_parse_line(), seaudit_model_create_from_model(), seaudit_model_destroy(), seaudit_model_save_to_file(), seaudit_set_log(), sechk_lib_check_module_dependencies(), sechk_lib_check_module_requirements(), sechk_lib_check_requirement(), sechk_lib_get_module(), sechk_lib_get_module_function(), sechk_lib_get_module_idx(), sechk_lib_get_module_result(), sechk_lib_init_modules(), sechk_lib_load_profile(), sechk_lib_module_clear_option(), sechk_lib_print_modules_report(), sechk_lib_register_modules(), sechk_lib_run_modules(), sechk_lib_set_outputformat(), sechk_print_list(), sefs_fcfile::sefs_fcfile(), sort_perm_support(), spurious_audit_print(), spurious_audit_run(), table_add_avrule(), table_add_terule(), terule_basic_syn(), terule_enable_line_numbers(), terule_get_items(), terule_new_diff(), toplevel_on_preferences_activate(), toplevel_on_tab_close(), toplevel_set_recent_logs_submenu(), toplevel_set_recent_policies_submenu(), type_deep_diff(), type_get_attrib_names(), type_get_name(), type_map_build(), type_map_dump(), type_map_get_name(), type_map_infer(), type_map_prim_aliases_comp(), type_remap_vector_dump(), types_wo_allow_print(), types_wo_allow_run(), unreachable_doms_print(), unreachable_doms_run(), user_basic(), user_deep_diff_roles(), user_regex(), user_to_modified_string(), users_wo_roles_print(), users_wo_roles_run(), util_policy_path_to_full_string(), util_policy_path_to_string(), vector_to_string(), xx_init(), xx_print(), and xx_run().

00166 {
00167         if (!v) {
00168                 errno = EINVAL;
00169                 return 0;
00170         } else {
00171                 return v->size;
00172         }
00173 }

size_t apol_vector_get_capacity const apol_vector_t v  ) 
 

Get the current capacity of the vector.

Parameters:
v The vector from which to get the current capacity. Must be non-NULL.
Returns:
The capacity of the vector; this value will be greater or equal to the number of elements in the vector. If v is NULL, returns 0.

Definition at line 175 of file vector.c.

References apol_vector_t, and apol_vector::capacity.

00176 {
00177         if (!v) {
00178                 errno = EINVAL;
00179                 return 0;
00180         } else {
00181                 return v->capacity;
00182         }
00183 }

void* apol_vector_get_element const apol_vector_t v,
size_t  idx
 

Get the element at the requested index.

Parameters:
v The vector from which to get the element.
idx The index of the desired element.
Returns:
A pointer to the element requested. If v is NULL or idx is out of range, returns NULL and sets errno.

Definition at line 185 of file vector.c.

References apol_vector_t, apol_vector::array, and apol_vector::size.

Referenced by apol_avrule_list_to_syn_avrules(), apol_domain_trans_analysis_do(), apol_infoflow_analysis_append_class_perm(), apol_infoflow_analysis_direct(), apol_infoflow_analysis_trans(), apol_infoflow_analysis_trans_further(), apol_infoflow_analysis_trans_further_next(), apol_infoflow_analysis_trans_shortest_path(), apol_infoflow_direct_define(), apol_infoflow_direct_get_result(), apol_infoflow_graph_check_class_perms(), apol_infoflow_graph_connect_nodes(), apol_infoflow_graph_create_edge(), apol_infoflow_graph_create_required_types(), apol_infoflow_graph_get_nodes_for_type(), apol_infoflow_graph_trans_further_init(), apol_infoflow_graph_trans_init(), apol_infoflow_results_check_both(), apol_infoflow_trans_append(), apol_infoflow_trans_define(), apol_infoflow_trans_find_edge(), apol_infoflow_trans_further_shuffle(), apol_mls_level_compare(), apol_mls_level_render(), apol_mls_level_validate(), apol_mls_range_get_levels(), apol_policy_build_domain_trans_table(), apol_policy_create_from_policy_path(), apol_policy_path_create_from_file(), apol_policy_path_create_from_string(), apol_policy_path_to_file(), apol_policy_path_to_string(), apol_policy_save_permmap(), apol_query_create_candidate_class_list(), apol_query_create_candidate_syn_type_list(), apol_query_create_candidate_type_list(), apol_str_join(), apol_syn_avrule_get_by_query(), apol_syn_terule_get_by_query(), apol_terule_list_to_syn_terules(), apol_types_relation_access_append_rule(), apol_types_relation_accesses(), apol_types_relation_clone_domaintrans(), apol_types_relation_clone_infoflow(), apol_types_relation_create_access_pools(), apol_types_relation_types(), apol_vector_cat(), append_avrule_to_subject_vector(), append_avrules_to_object_vector(), sefs_fcfile::appendFile(), sefs_fcfile::appendFileList(), are_all_classes_mapped(), are_all_perms_mapped(), attrib_deep_diff(), attribs_wo_rules_print(), attribs_wo_rules_run(), attribs_wo_types_print(), attribs_wo_types_run(), avc_message_to_string(), avc_message_to_string_html(), avc_msg_insert_additional_field_data(), avc_msg_insert_perms(), avc_parse(), avrule_basic_syn(), avrule_enable_line_numbers(), avrule_get_items(), bool_message_to_misc_string(), bool_parse(), build_avrule_vecs(), build_category_vecs(), build_component_vecs(), build_level_vecs(), build_nomls_vecs(), build_rangetrans_vecs(), build_roleallow_vecs(), build_roletrans_vecs(), build_terule_vecs(), build_user_vecs(), class_deep_diff(), common_deep_diff(), components_types_tests(), domain_and_file_print(), domain_and_file_run(), domain_trans_table_find_orphan_type_transitions(), domain_trans_table_get_all_forward_trans(), domain_trans_table_get_all_reverse_trans(), domains_wo_roles_print(), domains_wo_roles_run(), dta_forward(), dta_forward_access(), dta_forward_multi_end(), dta_invalid(), dta_reflexive(), dta_reverse(), dta_reverse_regexp(), exists_common_user(), fcfile_open(), fcfile_query(), filesystem_ftw_handler(), filter_perm_accept(), filter_string_vector_print(), filter_view_context_item_to_entry(), filter_view_get_policy_classes(), filter_view_get_policy_roles(), filter_view_get_policy_types(), filter_view_get_policy_users(), find_assoc_types_print(), find_domains_init(), find_domains_print(), find_domains_run(), find_file_types_init(), find_file_types_print(), find_file_types_run(), find_net_domains_init(), find_net_domains_print(), find_net_domains_run(), find_netif_types_print(), find_netif_types_run(), find_node_types_print(), find_node_types_run(), find_permmap_class(), find_permmap_perm(), find_port_types_print(), find_port_types_run(), find_result(), generate_common_only_proof_text(), generate_tcp_proof_text(), generate_udp_recv_proof_text(), generate_udp_send_proof_text(), get_rule_modification_str(), sefs_filesystem::getDevName(), imp_range_trans_print(), imp_range_trans_run(), inc_dom_trans_print(), inc_dom_trans_run(), inc_mount_print(), inc_mount_run(), inc_net_access_print(), inc_net_access_run(), infoflow_result_create_from_infoflow_result(), insert_hostname(), insert_time(), level_deep_diff_cats(), level_to_string(), load_parse(), load_policy_msg_get_policy_components(), load_policy_msg_is_old_load_policy_string(), main(), message_comp(), message_view_clear(), message_view_dialog_response(), message_view_export_messages_vector(), message_view_store_get_iter(), message_view_store_get_value(), message_view_store_iter_children(), message_view_store_iter_next(), message_view_store_iter_nth_child(), message_view_update_rows(), model_filter_message(), model_recalc_stats(), model_refresh(), model_sort(), modified_mls_range_to_string(), modify_view_on_import_click(), modify_view_update_filter_store(), name_perm_vector_add_perm(), name_perm_vector_has_incomplete_perms(), open_policy_init_value(), open_policy_init_values(), open_policy_on_add_click(), open_policy_on_base_browse_click(), open_policy_on_import_click(), perform_av_query(), perform_range_query(), perform_te_query(), poldiff_attrib_to_string(), poldiff_avrule_to_string(), poldiff_build_bsts(), poldiff_class_to_string(), poldiff_common_to_string(), poldiff_do_item_diff(), poldiff_level_to_string(), poldiff_level_to_string_brief(), poldiff_range_to_string_brief(), poldiff_role_allow_to_string(), poldiff_role_to_string(), poldiff_type_remap_create(), poldiff_type_to_string(), policy_21_range_trans_either(), policy_21_range_trans_lnk_file(), policy_21_range_trans_process(), policy_components_view_init_lists(), policy_components_view_on_to_exc_click(), policy_view_display_avrule_results(), policy_view_populate_combo_boxes(), preferences_add_recent_policy(), preferences_create(), preferences_parse_old_recent_files(), preferences_view_on_browse_click(), preferences_write_to_conf_file(), prefs_add_recent_vector(), print_attribs(), print_av_results(), print_cat_sens(), print_cats(), print_fsuse(), print_genfscon(), print_isids(), print_nodecon(), print_ra_results(), print_range_results(), print_rt_results(), print_rule_section(), print_sens(), print_syn_av_results(), print_syn_te_results(), print_te_results(), print_test_failure(), query_create_candidate_type(), range_create(), range_deep_diff(), relabel_analysis_get_type_vector(), relabel_analysis_matchup(), relabel_analysis_object(), relabel_analysis_subject(), relabel_result_get_node(), remap_types_on_add_click(), remap_types_update(), remap_types_update_view(), report_print_avc_listing(), report_print_enforce_toggles(), report_print_loaded_view(), report_print_malformed(), report_print_policy_booleans(), report_print_policy_loads(), report_window_browse(), result_item_avrule_print_diff(), result_item_avrule_sort(), result_item_inline_link_event(), result_item_print_diff(), result_item_print_linenos(), result_item_print_modified_range(), result_item_print_rule_diff(), result_item_range_trans_get_buffer(), result_item_terule_print_diff(), result_item_terule_sort(), result_item_user_get_buffer(), result_item_user_print_modified(), role_allow_deep_diff(), role_allow_get_items(), role_basic(), role_deep_diff(), role_regex(), roleallow_to_string(), roles_wo_allow_print(), roles_wo_allow_run(), roles_wo_types_print(), roles_wo_types_run(), roles_wo_users_print(), roles_wo_users_run(), rule_select(), sefs_fcfile::runQueryMap(), seaudit_log_clear(), seaudit_log_destroy(), seaudit_log_parse(), seaudit_log_parse_buffer(), seaudit_log_parse_line(), seaudit_model_create_from_model(), seaudit_model_destroy(), seaudit_model_save_to_file(), seaudit_set_log(), sechk_lib_check_module_dependencies(), sechk_lib_check_module_requirements(), sechk_lib_get_module(), sechk_lib_get_module_function(), sechk_lib_get_module_idx(), sechk_lib_get_module_result(), sechk_lib_init_modules(), sechk_lib_load_profile(), sechk_lib_module_clear_option(), sechk_lib_print_modules_report(), sechk_lib_process_xml_node(), sechk_lib_run_modules(), sechk_lib_set_outputformat(), sechk_print_list(), spurious_audit_print(), spurious_audit_run(), table_add_avrule(), table_add_terule(), terule_basic_syn(), terule_enable_line_numbers(), terule_get_items(), toplevel_destroy_views(), toplevel_on_open_log_activate(), toplevel_on_open_view_activate(), toplevel_on_preferences_activate(), toplevel_set_recent_logs_submenu(), toplevel_set_recent_policies_submenu(), type_deep_diff(), type_get_attrib_names(), type_get_name(), type_map_build(), type_map_dump(), type_map_get_name(), type_map_infer(), type_map_lookup_reverse(), type_remap_vector_dump(), types_wo_allow_print(), types_wo_allow_run(), unreachable_doms_print(), unreachable_doms_run(), user_basic(), user_deep_diff_roles(), user_regex(), user_to_modified_string(), users_wo_roles_print(), users_wo_roles_run(), vector_to_string(), xx_init(), and xx_print().

00186 {
00187         if (!v || !(v->array)) {
00188                 errno = EINVAL;
00189                 return NULL;
00190         }
00191 
00192         if (idx >= v->size) {
00193                 errno = ERANGE;
00194                 return NULL;
00195         }
00196 
00197         return v->array[idx];
00198 }

int apol_vector_get_index const apol_vector_t v,
const void *  elem,
apol_vector_comp_func cmp,
void *  data,
size_t *  i
 

Find an element within a vector, returning its index within the vector.

Parameters:
v The vector from which to get the element.
elem The element to find.
cmp A comparison call back for the type of element stored in the vector. The first parameter will be an existing element from the vector; next will be elem and then data. The expected return value from this function is less than, equal to, or greater than 0 if the first argument is less than, equal to, or greater than the second respectively. For use in this function the return value is only checked for 0 or non-zero return. If this is NULL then do pointer address comparison.
data Arbitrary data to pass as the comparison function's third paramater.
i Index into vector where element was found. This value is undefined if the element was not found.
Returns:
0 if element was found, or < 0 if not found.

Definition at line 225 of file vector.c.

References apol_vector_t, apol_vector::array, and apol_vector::size.

Referenced by apol_avrule_list_to_syn_avrules(), apol_avrule_to_syn_avrules(), apol_infoflow_analysis_append_class_perm(), apol_infoflow_analysis_trans_further(), apol_infoflow_graph_check_class_perms(), apol_infoflow_graph_create_edge(), apol_infoflow_graph_get_nodes_for_type(), apol_mls_level_compare(), apol_mls_level_validate(), apol_mls_range_get_levels(), apol_query_type_set_uses_types_directly(), apol_range_trans_get_by_query(), apol_role_allow_get_by_query(), apol_role_trans_get_by_query(), apol_syn_terule_get_by_query(), apol_types_relation_access_append_rule(), apol_types_relation_clone_domaintrans(), apol_types_relation_clone_infoflow(), apol_types_relation_common_users(), apol_types_relation_types(), apol_vector_append_unique(), db_type_compare(), exists_common_user(), filesystem_ftw_handler(), filter_src_role_accept(), filter_src_type_accept(), filter_src_user_accept(), filter_tgt_class_accept(), filter_tgt_role_accept(), filter_tgt_type_accept(), filter_tgt_user_accept(), find_domains_run(), sefs_filesystem::getDevName(), in_def_ctx(), inc_dom_trans_run(), sefs_filesystem::isQueryMatch(), log_remove_model(), model_notify_filter_changed(), model_notify_log_changed(), model_remove_log(), name_perm_vector_add_perm(), poldiff_type_remap_entry_remove(), policy_components_view_init_lists(), policy_components_view_on_to_exc_click(), policy_view_find_terules(), preferences_add_recent_policy(), prefs_add_recent_vector(), relabel_analysis_compare_type_to_vector(), relabel_result_get_node(), remap_types_highlight_entries(), report_print_enforce_toggles(), rule_select(), sefs_fcfile::runQueryMap(), seaudit_model_remove_filter(), sechk_lib_module_clear_option(), spurious_audit_run(), toplevel_on_tab_close(), type_map_infer(), and unreachable_doms_run().

00226 {
00227         if (!v || !i) {
00228                 errno = EINVAL;
00229                 return -1;
00230         }
00231 
00232         for (*i = 0; *i < v->size; (*i)++) {
00233                 if ((cmp != NULL && cmp(v->array[*i], elem, data) == 0) || (cmp == NULL && elem == v->array[*i])) {
00234                         return 0;
00235                 }
00236         }
00237         return -1;
00238 }

int apol_vector_append apol_vector_t v,
void *  elem
 

Add an element to the end of a vector.

Parameters:
v The vector to which to add the element.
elem The element to add. Once added the element will be the last element in the vector.
Returns:
0 on success and < 0 on failure. If the call fails, errno will be set and v will be unchanged.

Definition at line 240 of file vector.c.

References apol_vector_grow(), apol_vector_t, apol_vector::array, apol_vector::capacity, and apol_vector::size.

Referenced by apol_attr_get_by_query(), apol_avrule_list_to_syn_avrules(), apol_avrule_query_append_class(), apol_avrule_query_append_perm(), apol_avrule_to_syn_avrules(), apol_bool_get_by_query(), apol_cat_get_by_query(), apol_class_get_by_query(), apol_common_get_by_query(), apol_cond_get_by_query(), apol_constraint_get_by_query(), apol_domain_trans_analysis_append_access_type(), apol_domain_trans_analysis_append_class(), apol_domain_trans_analysis_append_perm(), apol_domain_trans_analysis_do(), apol_fs_use_get_by_query(), apol_genfscon_get_by_query(), apol_infoflow_analysis_append_class_perm(), apol_infoflow_analysis_append_intermediate(), apol_infoflow_direct_define(), apol_infoflow_direct_get_result(), apol_infoflow_graph_connect_nodes(), apol_infoflow_graph_create_edge(), apol_infoflow_graph_create_nodes(), apol_infoflow_graph_get_nodes_for_type(), apol_infoflow_results_check_both(), apol_infoflow_trans_append(), apol_infoflow_trans_define(), apol_infoflow_trans_further_shuffle(), apol_infoflow_trans_path(), apol_isid_get_by_query(), apol_level_get_by_query(), apol_mls_level_append_cats(), apol_mls_range_get_levels(), apol_netifcon_get_by_query(), apol_nodecon_get_by_query(), apol_permmap_create_from_policy(), apol_policy_path_create_from_file(), apol_policy_path_create_from_string(), apol_portcon_get_by_query(), apol_query_append_type(), apol_query_create_candidate_class_list(), apol_query_create_candidate_role_list(), apol_query_expand_type(), apol_range_trans_get_by_query(), apol_range_trans_query_append_class(), apol_relabel_analysis_append_class(), apol_relabel_analysis_append_subject(), apol_role_allow_get_by_query(), apol_role_get_by_query(), apol_role_trans_get_by_query(), apol_str_split(), apol_terule_query_append_class(), apol_terule_to_syn_terules(), apol_type_get_by_query(), apol_types_relation_access_append(), apol_types_relation_access_append_rule(), apol_types_relation_clone_domaintrans(), apol_types_relation_clone_infoflow(), apol_types_relation_common_users(), apol_types_relation_types(), apol_user_get_by_query(), apol_validatetrans_get_by_query(), apol_vector_append_unique(), apol_vector_cat(), apol_vector_create_from_intersection(), apol_vector_create_from_iter(), append_avrule_to_subject_vector(), append_avrules_to_object_vector(), sefs_fcfile::appendFile(), attrib_deep_diff(), attrib_get_items(), attrib_get_types(), attrib_new_diff(), attribs_wo_rules_register(), attribs_wo_rules_run(), attribs_wo_types_register(), attribs_wo_types_run(), avc_msg_insert_perms(), avrule_deep_diff(), avrule_enable_line_numbers(), avrule_get_items(), avrule_get_line_numbers_for_perm(), avrule_new_diff(), bool_change_append(), bool_deep_diff(), bool_new_diff(), bst_node_to_vector(), build_avrule_vecs(), build_category_vecs(), build_component_vecs(), build_level_vecs(), build_nomls_vecs(), build_rangetrans_vecs(), build_roleallow_vecs(), build_roletrans_vecs(), build_terule_vecs(), build_user_vecs(), sefs_filesystem::buildDevMap(), cat_new_diff(), class_deep_diff(), class_get_perms(), class_new_diff(), common_deep_diff(), common_get_perms(), common_new_diff(), components_types_tests(), domain_and_file_register(), domain_and_file_run(), domain_trans_table_find_orphan_type_transitions(), domain_trans_table_get_all_forward_trans(), domain_trans_table_get_all_reverse_trans(), domains_wo_roles_register(), domains_wo_roles_run(), fcfile_open(), filter_parse_start_element(), filter_string_vector_read(), filter_view_get_policy_classes(), filter_view_get_policy_roles(), filter_view_get_policy_types(), filter_view_get_policy_users(), filter_view_on_entry_focus_out(), find_assoc_types_register(), find_assoc_types_run(), find_domains_init(), find_domains_register(), find_domains_run(), find_file_types_init(), find_file_types_register(), find_file_types_run(), find_net_domains_init(), find_net_domains_register(), find_net_domains_run(), find_netif_types_register(), find_netif_types_run(), find_node_types_register(), find_node_types_run(), find_port_types_register(), find_port_types_run(), get_tokens(), imp_range_trans_register(), imp_range_trans_run(), inc_dom_trans_register(), inc_dom_trans_run(), inc_mount_register(), inc_mount_run(), inc_net_access_register(), inc_net_access_run(), infoflow_result_create_from_infoflow_result(), level_deep_diff(), level_deep_diff_cats(), level_get_cats(), level_new_diff(), log_append_model(), main(), map_to_vector(), message_create(), message_view_entire_message(), message_view_export_selected_messages(), model_refresh(), model_sort(), name_perm_vector_add_perm(), node_list_map_fn(), open_policy_build_path(), parse_command_line_args(), parse_default_contexts(), sefs_fcfile::parse_line(), perform_av_query(), poldiff_type_remap_create(), poldiff_type_remap_entry_create(), policy_components_view_on_to_inc_click(), policy_view_populate_combo_boxes(), preferences_add_recent_policy(), preferences_parse_new_recent_files(), preferences_parse_old_recent_files(), preferences_write_to_conf_file(), prefs_add_recent_vector(), query_append_type(), range_create(), range_deep_diff(), range_trans_deep_diff(), range_trans_get_items(), range_trans_new_diff(), relabel_analysis_get_type_vector(), relabel_result_get_node(), remap_types_update_view(), report_enforce_toggle_filter_create(), result_item_avrule_sort(), result_item_terule_sort(), role_allow_deep_diff(), role_allow_new_diff(), role_deep_diff(), role_get_types(), role_new_diff(), role_trans_deep_diff(), role_trans_get_items(), role_trans_new_diff(), roles_wo_allow_register(), roles_wo_allow_run(), roles_wo_types_register(), roles_wo_types_run(), roles_wo_users_register(), roles_wo_users_run(), rule_select(), seaudit_log_parse_line(), seaudit_model_append_filter(), seaudit_model_append_log(), seaudit_model_append_sort(), seaudit_model_create(), seaudit_parse_command_line(), sechk_lib_module_clear_option(), sechk_lib_new(), sechk_lib_process_xml_node(), sediffx_parse_command_line(), spurious_audit_register(), spurious_audit_run(), string_array_to_vector(), terule_deep_diff(), terule_enable_line_numbers(), terule_get_items(), terule_new_diff(), toplevel_add_new_view(), type_deep_diff(), type_get_attrib_names(), type_get_items(), type_map_build(), type_map_entry_append_qtypes(), type_new_diff(), types_wo_allow_register(), types_wo_allow_run(), unreachable_doms_register(), unreachable_doms_run(), user_deep_diff(), user_deep_diff_roles(), user_get_roles(), user_new_diff(), users_wo_roles_register(), users_wo_roles_run(), util_open_file(), and xx_register().

00241 {
00242         if (!v) {
00243                 errno = EINVAL;
00244                 return -1;
00245         }
00246 
00247         if (v->size >= v->capacity && apol_vector_grow(v)) {
00248                 return -1;
00249         }
00250 
00251         v->array[v->size] = elem;
00252         v->size++;
00253 
00254         return 0;
00255 }

int apol_vector_append_unique apol_vector_t v,
void *  elem,
apol_vector_comp_func cmp,
void *  data
 

Add an element to the end of a vector unless that element is equal to an existing element.

Parameters:
v The vector to which to add the element.
elem The element to add; must be non-NULL.
cmp A comparison call back for the type of element stored in the vector. The expected return value from this function is less than, equal to, or greater than 0 if the first argument is less than, equal to, or greater than the second respectively. For use in this function the return value is only checked for 0 or non-zero return. If this is NULL then do pointer address comparison.
data Arbitrary data to pass as the comparison function's third paramater.
Returns:
0 on success, < 0 on failure, and > 0 if the element already exists in the vector. If the call fails or the element already exists errno will be set.

Definition at line 257 of file vector.c.

References apol_vector_append(), apol_vector_get_index(), and apol_vector_t.

Referenced by apol_obj_perm_append_perm(), apol_perm_get_by_query(), remap_types_on_add_click(), role_allow_get_items(), and table_add_avrule().

00258 {
00259         size_t i;
00260         if (apol_vector_get_index(v, elem, cmp, data, &i) < 0) {
00261                 return apol_vector_append(v, elem);
00262         }
00263         errno = EEXIST;
00264         return 1;
00265 }

int apol_vector_cat apol_vector_t dest,
const apol_vector_t src
 

Concatenate two vectors.

Appends all elements of src to dest. NOTE: No type checking is done for elements in the two vectors. Elements are not deep copies.

Parameters:
dest Vector to which to append elements.
src Vector containing elements to append.
Returns:
0 on success and < 0 on failure; if the call fails, errno will be set and dest's contents will be reverted.

Definition at line 408 of file vector.c.

References apol_vector_append(), apol_vector_get_element(), apol_vector_get_size(), apol_vector_t, apol_vector::array, apol_vector::capacity, and apol_vector::size.

Referenced by apol_domain_trans_analysis_do(), apol_infoflow_direct_define(), apol_types_relation_allows(), build_avrule_vecs(), build_terule_vecs(), domain_trans_table_find_orphan_type_transitions(), domain_trans_table_get_all_forward_trans(), domain_trans_table_get_all_reverse_trans(), imp_range_trans_run(), model_refresh(), model_sort(), policy_components_view_init_lists(), role_allow_new_diff(), run_test(), spurious_audit_run(), and unreachable_doms_run().

00409 {
00410         size_t i, orig_size, cap;
00411         void **a;
00412         if (!src || !apol_vector_get_size(src)) {
00413                 return 0;              /* nothing to append */
00414         }
00415 
00416         if (!dest) {
00417                 errno = EINVAL;
00418                 return -1;
00419         }
00420         orig_size = apol_vector_get_size(dest);
00421         for (i = 0; i < apol_vector_get_size(src); i++)
00422                 if (apol_vector_append(dest, apol_vector_get_element(src, i))) {
00423                         /* revert if possible */
00424                         if (orig_size == 0) {
00425                                 cap = 1;
00426                         } else {
00427                                 cap = orig_size;
00428                         }
00429                         a = realloc(dest->array, cap * sizeof(*a));
00430                         if (a != NULL) {
00431                                 dest->array = a;
00432                         }
00433                         dest->size = orig_size;
00434                         dest->capacity = cap;
00435                         return -1;
00436                 }
00437 
00438         return 0;
00439 }

int apol_vector_remove apol_vector_t v,
const size_t  idx
 

Remove an element from a vector, and renumber all subsequent elements.

This does not free memory that was used by the removed element; the caller is responsible for doing that.

Parameters:
v Vector containing element.
idx Index to the element to remove.
Returns:
0 on success and < 0 on failure; if the call fails, errno will be set and v's contents will be reverted.

Definition at line 441 of file vector.c.

References apol_vector_t, apol_vector::array, and apol_vector::size.

Referenced by apol_domain_trans_analysis_do(), apol_query_create_candidate_syn_type_list(), apol_query_create_candidate_type_list(), apol_syn_avrule_get_by_query(), apol_syn_terule_get_by_query(), sefs_fcfile::appendFile(), log_remove_model(), model_remove_log(), poldiff_type_remap_entry_remove(), policy_components_view_on_to_exc_click(), preferences_add_recent_policy(), prefs_add_recent_vector(), seaudit_model_remove_filter(), toplevel_destroy_views(), and toplevel_on_tab_close().

00442 {
00443         if (v == NULL || idx >= v->size) {
00444                 errno = EINVAL;
00445                 return -1;
00446         }
00447         memmove(v->array + idx, v->array + idx + 1, sizeof(v->array[0]) * (v->size - idx - 1));
00448         v->size--;
00449         return 0;
00450 }

int apol_vector_compare const apol_vector_t a,
const apol_vector_t b,
apol_vector_comp_func cmp,
void *  data,
size_t *  i
 

Compare two vectors, determining if one is different than the other.

This uses a callback to compare elements across the vectors.

Parameters:
a First vector to compare.
b Second vector to compare.
cmp A comparison call back for the type of element stored in the vector. The expected return value from this function is less than, equal to, or greater than 0 if the first argument is less than, equal to, or greater than the second respectively. If this is NULL then do pointer address comparison.
data Arbitrary data to pass as the comparison function's third paramater.
i Reference to where to store the index of the first detected difference. The value is undefined if vectors are equivalent (return value of 0). Note that the index may be greater than a vector's size if the vectors are of unequal lengths.
Returns:
< 0 if vector A is less than B, > 0 if A is greater than B, or 0 if equivalent.

Definition at line 267 of file vector.c.

References apol_vector_get_size(), apol_vector_t, and apol_vector::array.

Referenced by apol_infoflow_trans_append(), apol_infoflow_trans_step_comp(), apol_policy_path_compare(), build_avrule_vecs(), build_rangetrans_vecs(), build_roletrans_vecs(), build_terule_vecs(), components_types_tests(), nomls_tests(), run_test(), sort_perm_comp(), and type_map_prim_aliases_comp().

00268 {
00269         int compval;
00270         if (a == NULL || b == NULL || i == NULL) {
00271                 errno = EINVAL;
00272                 return 0;
00273         }
00274         size_t a_len = apol_vector_get_size(a);
00275         size_t b_len = apol_vector_get_size(b);
00276         for (*i = 0; *i < a_len && *i < b_len; (*i)++) {
00277                 if (cmp != NULL) {
00278                         compval = cmp(a->array[*i], b->array[*i], data);
00279                 } else {
00280                         compval = (int)((char *)a->array[*i] - (char *)b->array[*i]);
00281                 }
00282                 if (compval != 0) {
00283                         return compval;
00284                 }
00285         }
00286         if (a_len == b_len) {
00287                 return 0;
00288         } else if (a_len < b_len) {
00289                 return -1;
00290         } else {
00291                 return 1;
00292         }
00293 }

void apol_vector_sort apol_vector_t v,
apol_vector_comp_func cmp,
void *  data
 

Sort the vector's elements within place, using an unstable sorting algorithm.

Parameters:
v The vector to sort.
cmp A comparison call back for the type of element stored in the vector. The expected return value from this function is less than, equal to, or greater than 0 if the first argument is less than, equal to, or greater than the second respectively. If this is NULL then treat the vector's contents as unsigned integers and sort in increasing order.
data Arbitrary data to pass as the comparison function's third paramater.

Definition at line 343 of file vector.c.

References apol_vector_t, apol_vector::array, apol_vector::size, and vector_qsort().

Referenced by apol_mls_level_append_cats(), apol_mls_level_render(), apol_mls_range_get_levels(), apol_types_relation_accesses(), apol_vector_sort_uniquify(), attrib_deep_diff(), attrib_get_items(), avrule_deep_diff(), avrule_new_diff(), bool_get_items(), build_avrule_vecs(), build_rangetrans_vecs(), build_roletrans_vecs(), build_terule_vecs(), cat_get_items(), class_deep_diff(), class_get_items(), common_deep_diff(), common_get_items(), components_types_tests(), filter_view_get_policy_classes(), filter_view_get_policy_roles(), filter_view_get_policy_types(), filter_view_get_policy_users(), level_deep_diff(), level_deep_diff_apol_mls_levels(), level_get_items(), model_sort(), nomls_tests(), poldiff_get_avrule_vector(), poldiff_get_terule_vector(), poldiff_get_type_vector(), policy_view_populate_combo_boxes(), print_cat_sens(), print_cats(), print_rule_diffs(), range_deep_diff(), remap_types_update(), result_item_avrule_sort(), result_item_terule_sort(), role_allow_deep_diff(), role_deep_diff(), role_get_items(), run_test(), shallow_copy_str_vec_and_sort(), type_deep_diff(), user_deep_diff_roles(), and user_get_items().

00344 {
00345         if (!v) {
00346                 errno = EINVAL;
00347                 return;
00348         }
00349         if (cmp == NULL) {
00350                 cmp = vector_int_comp;
00351         }
00352         if (v->size > 1) {
00353                 vector_qsort(v->array, 0, v->size - 1, cmp, data);
00354         }
00355 }

void apol_vector_sort_uniquify apol_vector_t v,
apol_vector_comp_func cmp,
void *  data
 

Sort the vector's elements within place (see apol_vector_sort()), and then compact vector by removing duplicate entries.

The vector's free function will be used to free the memory used by non-unique elements.

Parameters:
v The vector to sort.
cmp A comparison call back for the type of element stored in the vector. The expected return value from this function is less than, equal to, or greater than 0 if the first argument is less than, equal to, or greater than the second respectively. If this is NULL then treat the vector's contents as unsigned integers and sort in increasing order.
data Arbitrary data to pass as the comparison function's third paramater.

Definition at line 357 of file vector.c.

References apol_vector_sort(), apol_vector_t, apol_vector::array, apol_vector::capacity, apol_vector::fr, and apol_vector::size.

Referenced by apol_avrule_to_syn_avrules(), apol_policy_path_create(), apol_policy_path_create_from_string(), apol_query_create_candidate_class_list(), apol_query_create_candidate_role_list(), apol_query_create_candidate_syn_type_list(), apol_query_create_candidate_type_list(), apol_terule_to_syn_terules(), attrib_deep_diff(), avrule_enable_line_numbers(), avrule_get_line_numbers_for_perm(), domain_trans_table_find_orphan_type_transitions(), domain_trans_table_get_all_forward_trans(), domain_trans_table_get_all_reverse_trans(), imp_range_trans_run(), poldiff_type_remap_create(), policy_components_view_init_lists(), policy_components_view_on_to_inc_click(), query_create_candidate_type(), range_trans_get_items(), remap_types_update_view(), role_deep_diff(), role_trans_get_items(), terule_enable_line_numbers(), type_get_attrib_names(), type_get_items(), and type_map_prim_aliases_comp().

00358 {
00359         if (!v) {
00360                 errno = EINVAL;
00361                 return;
00362         }
00363         if (cmp == NULL) {
00364                 cmp = vector_int_comp;
00365         }
00366         if (v->size > 1) {
00367                 size_t i, j = 0;
00368                 void **new_array;
00369                 /* sweep through the array, do a quick compaction,
00370                  * then sort */
00371                 for (i = 1; i < v->size; i++) {
00372                         if (cmp(v->array[i], v->array[j], data) != 0) {
00373                                 /* found a unique element */
00374                                 j++;
00375                                 v->array[j] = v->array[i];
00376                         } else {
00377                                 /* found a non-unique element */
00378                                 if (v->fr != NULL) {
00379                                         v->fr(v->array[i]);
00380                                 }
00381                         }
00382                 }
00383                 v->size = j + 1;
00384 
00385                 apol_vector_sort(v, cmp, data);
00386                 j = 0;
00387                 for (i = 1; i < v->size; i++) {
00388                         if (cmp(v->array[i], v->array[j], data) != 0) {
00389                                 /* found a unique element */
00390                                 j++;
00391                                 v->array[j] = v->array[i];
00392                         } else {
00393                                 /* found a non-unique element */
00394                                 if (v->fr != NULL) {
00395                                         v->fr(v->array[i]);
00396                                 }
00397                         }
00398                 }
00399                 /* try to realloc vector to save space */
00400                 v->size = j + 1;
00401                 if ((new_array = realloc(v->array, v->size * sizeof(void *))) != NULL) {
00402                         v->array = new_array;
00403                         v->capacity = v->size;
00404                 }
00405         }
00406 }