libalpm
Arch Linux Package Manager Library
|
Data Structures | |
struct | alpm_list_t |
A doubly linked list. More... | |
Macros | |
#define | FREELIST(p) do { alpm_list_free_inner(p, free); alpm_list_free(p); p = NULL; } while(0) |
Frees a list and its contents. | |
Typedefs | |
typedef void(* | alpm_list_fn_free) (void *item) |
item deallocation callback. | |
typedef int(* | alpm_list_fn_cmp) (const void *, const void *) |
item comparison callback | |
Functions | |
void | alpm_list_free (alpm_list_t *list) |
Free a list, but not the contained data. | |
void | alpm_list_free_inner (alpm_list_t *list, alpm_list_fn_free fn) |
Free the internal data of a list structure but not the list itself. | |
alpm_list_t * | alpm_list_add (alpm_list_t *list, void *data) |
Add a new item to the end of the list. | |
alpm_list_t * | alpm_list_append (alpm_list_t **list, void *data) |
Add a new item to the end of the list. | |
alpm_list_t * | alpm_list_append_strdup (alpm_list_t **list, const char *data) |
Duplicate and append a string to a list. | |
alpm_list_t * | alpm_list_add_sorted (alpm_list_t *list, void *data, alpm_list_fn_cmp fn) |
Add items to a list in sorted order. | |
alpm_list_t * | alpm_list_join (alpm_list_t *first, alpm_list_t *second) |
Join two lists. | |
alpm_list_t * | alpm_list_mmerge (alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn) |
Merge the two sorted sublists into one sorted list. | |
alpm_list_t * | alpm_list_msort (alpm_list_t *list, size_t n, alpm_list_fn_cmp fn) |
Sort a list of size n using mergesort algorithm. | |
alpm_list_t * | alpm_list_remove_item (alpm_list_t *haystack, alpm_list_t *item) |
Remove an item from the list. | |
alpm_list_t * | alpm_list_remove (alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data) |
Remove an item from the list. | |
alpm_list_t * | alpm_list_remove_str (alpm_list_t *haystack, const char *needle, char **data) |
Remove a string from a list. | |
alpm_list_t * | alpm_list_remove_dupes (const alpm_list_t *list) |
Create a new list without any duplicates. | |
alpm_list_t * | alpm_list_strdup (const alpm_list_t *list) |
Copy a string list, including data. | |
alpm_list_t * | alpm_list_copy (const alpm_list_t *list) |
Copy a list, without copying data. | |
alpm_list_t * | alpm_list_copy_data (const alpm_list_t *list, size_t size) |
Copy a list and copy the data. | |
alpm_list_t * | alpm_list_reverse (alpm_list_t *list) |
Create a new list in reverse order. | |
alpm_list_t * | alpm_list_nth (const alpm_list_t *list, size_t n) |
Return nth element from list (starting from 0). | |
alpm_list_t * | alpm_list_next (const alpm_list_t *list) |
Get the next element of a list. | |
alpm_list_t * | alpm_list_previous (const alpm_list_t *list) |
Get the previous element of a list. | |
alpm_list_t * | alpm_list_last (const alpm_list_t *list) |
Get the last item in the list. | |
size_t | alpm_list_count (const alpm_list_t *list) |
Get the number of items in a list. | |
void * | alpm_list_find (const alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn) |
Find an item in a list. | |
void * | alpm_list_find_ptr (const alpm_list_t *haystack, const void *needle) |
Find an item in a list. | |
char * | alpm_list_find_str (const alpm_list_t *haystack, const char *needle) |
Find a string in a list. | |
int | alpm_list_cmp_unsorted (const alpm_list_t *left, const alpm_list_t *right, alpm_list_fn_cmp fn) |
Check if two lists contain the same data, ignoring order. | |
void | alpm_list_diff_sorted (const alpm_list_t *left, const alpm_list_t *right, alpm_list_fn_cmp fn, alpm_list_t **onlyleft, alpm_list_t **onlyright) |
Find the differences between list left and list right | |
alpm_list_t * | alpm_list_diff (const alpm_list_t *lhs, const alpm_list_t *rhs, alpm_list_fn_cmp fn) |
Find the items in list lhs that are not present in list rhs . | |
void * | alpm_list_to_array (const alpm_list_t *list, size_t n, size_t size) |
Copy a list and data into a standard C array of fixed length. | |
Functions to manipulate alpm_list_t lists.
These functions are designed to create, destroy, and modify lists of type alpm_list_t. This is an internal list type used by libalpm that is publicly exposed for use by frontends if desired.
It is exposed so front ends can use it to prevent the need to reimplement lists of their own; however, it is not required that the front end uses it.
struct alpm_list_t |
#define FREELIST | ( | p | ) | do { alpm_list_free_inner(p, free); alpm_list_free(p); p = NULL; } while(0) |
Frees a list and its contents.
Referenced by alpm_db_set_cache_servers(), alpm_db_set_servers(), alpm_db_update(), alpm_fetch_pkgurl(), alpm_list_copy_data(), alpm_list_strdup(), alpm_option_set_architectures(), alpm_option_set_cachedirs(), alpm_option_set_hookdirs(), alpm_pkg_load(), alpm_unregister_all_syncdbs(), check_keyring(), download_files(), free_groupcache(), load_packages(), local_db_read(), mount_point_list_free(), and sync_db_read().
typedef int(* alpm_list_fn_cmp) (const void *, const void *) |
item comparison callback
typedef void(* alpm_list_fn_free) (void *item) |
item deallocation callback.
item | the item to free |
alpm_list_t * alpm_list_add | ( | alpm_list_t * | list, |
void * | data ) |
Add a new item to the end of the list.
list | the list to add to |
data | the new item to be added to the list |
References alpm_list_append().
Referenced by add_conflict(), add_fileconflict(), alpm_add_pkg(), alpm_checkdeps(), alpm_db_add_cache_server(), alpm_db_add_server(), alpm_db_find_file_owners(), alpm_db_update(), alpm_fetch_pkgurl(), alpm_find_group_pkgs(), alpm_initialize(), alpm_list_add_sorted(), alpm_list_diff_sorted(), alpm_option_add_architecture(), alpm_option_add_assumeinstalled(), alpm_option_add_cachedir(), alpm_option_add_hookdir(), alpm_remove_pkg(), alpm_sync_sysupgrade(), check_arch(), check_keyring(), check_replacers(), check_validity(), dep_graph_init(), download_files(), find_dl_candidates(), find_requiredby(), list_depdup(), list_sigsum(), load_grpcache(), load_packages(), local_db_read(), mount_point_list(), parse_descfile(), parse_subpacket(), remove_prepare_cascade(), resolvedep(), and sigsum_test_bit().
alpm_list_t * alpm_list_add_sorted | ( | alpm_list_t * | list, |
void * | data, | ||
alpm_list_fn_cmp | fn ) |
Add items to a list in sorted order.
list | the list to add to |
data | the new item to be added to the list |
fn | the comparison function to use to determine order |
References alpm_list_add(), alpm_list_t::data, alpm_list_t::next, and alpm_list_t::prev.
alpm_list_t * alpm_list_append | ( | alpm_list_t ** | list, |
void * | data ) |
Add a new item to the end of the list.
list | the list to add to |
data | the new item to be added to the list |
References alpm_list_last(), alpm_list_t::data, alpm_list_t::next, and alpm_list_t::prev.
Referenced by alpm_fetch_pkgurl(), alpm_list_add(), alpm_list_append_strdup(), alpm_list_copy(), alpm_list_copy_data(), alpm_list_remove_dupes(), alpm_list_reverse(), find_server_errors(), local_db_read(), parse_descfile(), and sync_db_read().
alpm_list_t * alpm_list_append_strdup | ( | alpm_list_t ** | list, |
const char * | data ) |
Duplicate and append a string to a list.
list | the list to append to |
data | the string to duplicate and append |
References alpm_list_append().
Referenced by alpm_list_strdup().
int alpm_list_cmp_unsorted | ( | const alpm_list_t * | left, |
const alpm_list_t * | right, | ||
alpm_list_fn_cmp | fn ) |
Check if two lists contain the same data, ignoring order.
Lists are considered equal if they both contain the same data regardless of order.
left | the first list |
right | the second list |
fn | the comparison function |
References alpm_list_count(), alpm_list_t::data, and alpm_list_t::next.
Referenced by check_pkg_field_matches_db().
alpm_list_t * alpm_list_copy | ( | const alpm_list_t * | list | ) |
Copy a list, without copying data.
list | the list to copy |
References alpm_list_append(), alpm_list_free(), alpm_list_t::data, and alpm_list_t::next.
Referenced by alpm_list_diff().
alpm_list_t * alpm_list_copy_data | ( | const alpm_list_t * | list, |
size_t | size ) |
Copy a list and copy the data.
Note that the data elements to be copied should not contain pointers and should also be of constant size.
list | the list to copy |
size | the size of each data element |
References alpm_list_append(), alpm_list_t::data, FREELIST, and alpm_list_t::next.
size_t alpm_list_count | ( | const alpm_list_t * | list | ) |
Get the number of items in a list.
list | the list |
References alpm_list_t::next.
Referenced by alpm_fetch_pkgurl(), alpm_list_cmp_unsorted(), alpm_list_diff(), check_keyring(), compute_requiredby(), curl_download_internal(), download_files(), mount_point_list(), resolvedep(), and sync_db_populate().
alpm_list_t * alpm_list_diff | ( | const alpm_list_t * | lhs, |
const alpm_list_t * | rhs, | ||
alpm_list_fn_cmp | fn ) |
Find the items in list lhs
that are not present in list rhs
.
lhs | the first list |
rhs | the second list |
fn | the comparison function |
lhs
not present in rhs
References alpm_list_copy(), alpm_list_count(), alpm_list_diff_sorted(), alpm_list_free(), and alpm_list_msort().
Referenced by dep_graph_init().
void alpm_list_diff_sorted | ( | const alpm_list_t * | left, |
const alpm_list_t * | right, | ||
alpm_list_fn_cmp | fn, | ||
alpm_list_t ** | onlyleft, | ||
alpm_list_t ** | onlyright ) |
Find the differences between list left
and list right
The two lists must be sorted. Items only in list left
are added to the onlyleft
list. Items only in list right
are added to the onlyright
list.
left | the first list |
right | the second list |
fn | the comparison function |
onlyleft | pointer to the first result list |
onlyright | pointer to the second result list |
References alpm_list_add(), alpm_list_t::data, and alpm_list_t::next.
Referenced by alpm_list_diff().
void * alpm_list_find | ( | const alpm_list_t * | haystack, |
const void * | needle, | ||
alpm_list_fn_cmp | fn ) |
Find an item in a list.
needle | the item to search |
haystack | the list |
fn | the comparison function for searching (!= NULL) |
needle
if found, NULL otherwise References alpm_list_t::data, and alpm_list_t::next.
Referenced by alpm_list_find_ptr(), alpm_list_find_str(), alpm_pkg_should_ignore(), and check_keyring().
void * alpm_list_find_ptr | ( | const alpm_list_t * | haystack, |
const void * | needle ) |
Find an item in a list.
Search for the item whose data matches that of the needle
.
needle | the data to search for (== comparison) |
haystack | the list |
needle
if found, NULL otherwise References alpm_list_find(), and ptr_cmp().
Referenced by alpm_list_remove_dupes(), and load_grpcache().
char * alpm_list_find_str | ( | const alpm_list_t * | haystack, |
const char * | needle ) |
Find a string in a list.
needle | the string to search for |
haystack | the list |
needle
if found, NULL otherwise References alpm_list_find().
Referenced by find_requiredby(), and should_skip_file().
void alpm_list_free | ( | alpm_list_t * | list | ) |
Free a list, but not the contained data.
list | the list to free |
References alpm_list_t::next.
Referenced by alpm_checkdeps(), alpm_find_group_pkgs(), alpm_list_copy(), alpm_list_diff(), alpm_list_remove_dupes(), alpm_list_reverse(), alpm_option_set_assumeinstalled(), alpm_trans_prepare(), check_keyring(), check_validity(), dep_graph_init(), download_files(), free_deplist(), remove_prepare_cascade(), remove_prepare_keep_needed(), and resolvedep().
void alpm_list_free_inner | ( | alpm_list_t * | list, |
alpm_list_fn_free | fn ) |
Free the internal data of a list structure but not the list itself.
list | the list to free |
fn | a free function for the internal data |
References alpm_list_t::data, and alpm_list_t::next.
Referenced by alpm_db_update(), alpm_fetch_pkgurl(), alpm_option_set_assumeinstalled(), download_files(), free_deplist(), remove_prepare_cascade(), and remove_prepare_keep_needed().
alpm_list_t * alpm_list_join | ( | alpm_list_t * | first, |
alpm_list_t * | second ) |
Join two lists.
The two lists must be independent. Do not free the original lists after calling this function, as this is not a copy operation. The list pointers passed in should be considered invalid after calling this function.
first | the first list |
second | the second list |
References alpm_list_t::next, and alpm_list_t::prev.
Referenced by alpm_sync_sysupgrade(), and pkghash_add_pkg().
alpm_list_t * alpm_list_last | ( | const alpm_list_t * | list | ) |
Get the last item in the list.
list | the list |
References alpm_list_t::prev.
Referenced by alpm_list_append(), and alpm_list_reverse().
alpm_list_t * alpm_list_mmerge | ( | alpm_list_t * | left, |
alpm_list_t * | right, | ||
alpm_list_fn_cmp | fn ) |
Merge the two sorted sublists into one sorted list.
left | the first list |
right | the second list |
fn | comparison function for determining merge order |
References alpm_list_t::data, alpm_list_t::next, and alpm_list_t::prev.
Referenced by alpm_list_msort(), and pkghash_add_pkg().
alpm_list_t * alpm_list_msort | ( | alpm_list_t * | list, |
size_t | n, | ||
alpm_list_fn_cmp | fn ) |
Sort a list of size n
using mergesort algorithm.
list | the list to sort |
n | the size of the list |
fn | the comparison function for determining order |
References alpm_list_mmerge(), alpm_list_msort(), alpm_list_t::next, and alpm_list_t::prev.
Referenced by alpm_list_diff(), alpm_list_msort(), compute_requiredby(), curl_download_internal(), local_db_populate(), mount_point_list(), and sync_db_populate().
|
inline |
Get the next element of a list.
list | the list node |
References alpm_list_t::next.
Referenced by local_db_read(), and remove_notify_needed_optdepends().
alpm_list_t * alpm_list_nth | ( | const alpm_list_t * | list, |
size_t | n ) |
Return nth element from list (starting from 0).
list | the list |
n | the index of the item to find (n < alpm_list_count(list) IS needed) |
n
References alpm_list_t::next.
Referenced by resolvedep().
|
inline |
Get the previous element of a list.
list | the list head |
References alpm_list_t::prev.
alpm_list_t * alpm_list_remove | ( | alpm_list_t * | haystack, |
const void * | needle, | ||
alpm_list_fn_cmp | fn, | ||
void ** | data ) |
Remove an item from the list.
haystack | the list to remove the item from |
needle | the data member of the item we're removing |
fn | the comparison function for searching |
data | output parameter containing data of the removed item |
References alpm_list_remove_item(), alpm_list_t::data, and alpm_list_t::next.
Referenced by alpm_db_unregister(), alpm_list_remove_str(), alpm_option_remove_assumeinstalled(), and remove_prepare_keep_needed().
alpm_list_t * alpm_list_remove_dupes | ( | const alpm_list_t * | list | ) |
Create a new list without any duplicates.
This does NOT copy data members.
list | the list to copy |
References alpm_list_append(), alpm_list_find_ptr(), alpm_list_free(), alpm_list_t::data, and alpm_list_t::next.
alpm_list_t * alpm_list_remove_item | ( | alpm_list_t * | haystack, |
alpm_list_t * | item ) |
Remove an item from the list.
item is not freed; this is the responsibility of the caller.
haystack | the list to remove the item from |
item | the item to remove from the list |
References alpm_list_t::next, and alpm_list_t::prev.
Referenced by alpm_list_remove(), and dep_graph_init().
alpm_list_t * alpm_list_remove_str | ( | alpm_list_t * | haystack, |
const char * | needle, | ||
char ** | data ) |
Remove a string from a list.
haystack | the list to remove the item from |
needle | the data member of the item we're removing |
data | output parameter containing data of the removed item |
References alpm_list_remove().
Referenced by alpm_db_remove_cache_server(), alpm_db_remove_server(), alpm_option_remove_architecture(), alpm_option_remove_cachedir(), and alpm_option_remove_hookdir().
alpm_list_t * alpm_list_reverse | ( | alpm_list_t * | list | ) |
Create a new list in reverse order.
list | the list to copy |
References alpm_list_append(), alpm_list_free(), alpm_list_last(), alpm_list_t::data, and alpm_list_t::prev.
alpm_list_t * alpm_list_strdup | ( | const alpm_list_t * | list | ) |
Copy a string list, including data.
list | the list to copy |
References alpm_list_append_strdup(), alpm_list_t::data, FREELIST, and alpm_list_t::next.
Referenced by alpm_option_set_architectures().
void * alpm_list_to_array | ( | const alpm_list_t * | list, |
size_t | n, | ||
size_t | size ) |
Copy a list and data into a standard C array of fixed length.
Note that the data elements are shallow copied so any contained pointers will point to the original data.
list | the list to copy |
n | the size of the list |
size | the size of each data element |
References alpm_list_t::data, and alpm_list_t::next.