libalpm
Arch Linux Package Manager Library
Functions
List Functions

Functions to manipulate alpm_list_t lists. More...

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.
alpm_list_talpm_list_add (alpm_list_t *list, void *data)
 Add a new item to the end of the list.
alpm_list_talpm_list_add_sorted (alpm_list_t *list, void *data, alpm_list_fn_cmp fn)
 Add items to a list in sorted order.
alpm_list_talpm_list_join (alpm_list_t *first, alpm_list_t *second)
 Join two lists.
alpm_list_talpm_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_talpm_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_talpm_list_remove_item (alpm_list_t *haystack, alpm_list_t *item)
 Remove an item from the list.
alpm_list_talpm_list_remove (alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data)
 Remove an item from the list.
alpm_list_talpm_list_remove_str (alpm_list_t *haystack, const char *needle, char **data)
 Remove a string from a list.
alpm_list_talpm_list_remove_dupes (const alpm_list_t *list)
 Create a new list without any duplicates.
alpm_list_talpm_list_strdup (const alpm_list_t *list)
 Copy a string list, including data.
alpm_list_talpm_list_copy (const alpm_list_t *list)
 Copy a list, without copying data.
alpm_list_talpm_list_copy_data (const alpm_list_t *list, size_t size)
 Copy a list and copy the data.
alpm_list_talpm_list_reverse (alpm_list_t *list)
 Create a new list in reverse order.
alpm_list_talpm_list_nth (const alpm_list_t *list, size_t n)
 Return nth element from list (starting from 0).
alpm_list_talpm_list_next (const alpm_list_t *node)
 Get the next element of a list.
alpm_list_talpm_list_previous (const alpm_list_t *list)
 Get the previous element of a list.
alpm_list_talpm_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.
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_talpm_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.

Detailed Description

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.


Function Documentation

alpm_list_t* alpm_list_add ( alpm_list_t list,
void *  data 
)
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.

Parameters:
listthe list to add to
datathe new item to be added to the list
fnthe comparison function to use to determine order
Returns:
the resultant list

Definition at line 123 of file alpm_list.c.

References alpm_list_add(), __alpm_list_t::data, __alpm_list_t::next, and __alpm_list_t::prev.

Here is the call graph for this function:

Copy a list, without copying data.

Parameters:
listthe list to copy
Returns:
a copy of the original list

Definition at line 453 of file alpm_list.c.

References alpm_list_add(), __alpm_list_t::data, and __alpm_list_t::next.

Referenced by _alpm_db_search(), _alpm_resolvedeps(), and alpm_list_diff().

Here is the call graph for this function:

Here is the caller graph for this function:

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.

Parameters:
listthe list to copy
sizethe size of each data element
Returns:
a copy of the original list, data copied as well

Definition at line 474 of file alpm_list.c.

References alpm_list_add(), __alpm_list_t::data, and __alpm_list_t::next.

Here is the call graph for this function:

size_t alpm_list_count ( const alpm_list_t list)

Get the number of items in a list.

Parameters:
listthe list
Returns:
the number of list items

Definition at line 595 of file alpm_list.c.

References __alpm_list_t::next.

Referenced by _alpm_check_diskspace(), _alpm_db_find_fileconflicts(), _alpm_remove_packages(), _alpm_upgrade_packages(), alpm_list_diff(), alpm_pkg_compute_requiredby(), cb_question(), display_targets(), strreplace(), and table_display().

Here is the caller graph for this function:

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`.

Parameters:
lhsthe first list
rhsthe second list
fnthe comparison function
Returns:
a list containing all items in `lhs` not present in `rhs`

Definition at line 732 of file alpm_list.c.

References alpm_list_copy(), alpm_list_count(), alpm_list_diff_sorted(), alpm_list_free(), and alpm_list_msort().

Referenced by _alpm_outerconflicts(), _alpm_sync_prepare(), display_new_optdepends(), and pacman_sync().

Here is the call graph for this function:

Here is the caller graph for this function:

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.

Parameters:
leftthe first list
rightthe second list
fnthe comparison function
onlyleftpointer to the first result list
onlyrightpointer to the second result list

Definition at line 679 of file alpm_list.c.

References alpm_list_add(), __alpm_list_t::data, and __alpm_list_t::next.

Referenced by alpm_list_diff().

Here is the call graph for this function:

Here is the caller graph for this function:

void* alpm_list_find ( const alpm_list_t haystack,
const void *  needle,
alpm_list_fn_cmp  fn 
)

Find an item in a list.

Parameters:
needlethe item to search
haystackthe list
fnthe comparison function for searching (!= NULL)
Returns:
`needle` if found, NULL otherwise

Definition at line 615 of file alpm_list.c.

References __alpm_list_t::data, and __alpm_list_t::next.

Referenced by _alpm_pkg_should_ignore(), alpm_list_find_ptr(), alpm_list_find_str(), display_targets(), and pacman_remove().

Here is the caller graph for this function:

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`.

Parameters:
needlethe data to search for (== comparison)
haystackthe list
Returns:
`needle` if found, NULL otherwise

Definition at line 644 of file alpm_list.c.

References alpm_list_find().

Referenced by alpm_list_remove_dupes().

Here is the call graph for this function:

Here is the caller graph for this function:

char* alpm_list_find_str ( const alpm_list_t haystack,
const char *  needle 
)

Find a string in a list.

Parameters:
needlethe string to search for
haystackthe list
Returns:
`needle` if found, NULL otherwise

Definition at line 658 of file alpm_list.c.

References alpm_list_find().

Referenced by _alpm_unpack(), and main().

Here is the call graph for this function:

Here is the caller graph for this function:

void alpm_list_free ( alpm_list_t list)

Free the internal data of a list structure.

Parameters:
listthe list to free
fna free function for the internal data

Definition at line 65 of file alpm_list.c.

References __alpm_list_t::data, and __alpm_list_t::next.

Referenced by _alpm_db_free_pkgcache(), _alpm_pkg_free(), _alpm_remove_prepare(), _alpm_shortest_delta_path(), _alpm_sortbydeps(), _alpm_sync_commit(), _alpm_sync_prepare(), and _alpm_trans_free().

Here is the caller graph for this function:

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.

Parameters:
firstthe first list
secondthe second list
Returns:
the resultant joined list

Definition at line 176 of file alpm_list.c.

References __alpm_list_t::next, and __alpm_list_t::prev.

Referenced by alpm_sync_sysupgrade().

Here is the caller graph for this function:

Get the last item in the list.

Parameters:
listthe list
Returns:
the last element in the list

Definition at line 577 of file alpm_list.c.

References __alpm_list_t::prev.

Referenced by _alpm_resolvedeps(), alpm_list_add(), and alpm_list_reverse().

Here is the caller graph for this function:

Merge the two sorted sublists into one sorted list.

Parameters:
leftthe first list
rightthe second list
fncomparison function for determining merge order
Returns:
the resultant list

Definition at line 207 of file alpm_list.c.

References __alpm_list_t::data, __alpm_list_t::next, and __alpm_list_t::prev.

Referenced by alpm_list_msort().

Here is the caller graph for this function:

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.

Parameters:
listthe list to sort
nthe size of the list
fnthe comparison function for determining order
Returns:
the resultant list

Definition at line 277 of file alpm_list.c.

References alpm_list_mmerge(), alpm_list_msort(), and __alpm_list_t::next.

Referenced by alpm_list_diff(), alpm_list_msort(), alpm_pkg_compute_requiredby(), and display_targets().

Here is the call graph for this function:

Here is the caller graph for this function:

alpm_list_t* alpm_list_next ( const alpm_list_t node) [inline]

Get the next element of a list.

Parameters:
nodethe list node
Returns:
the next element, or NULL when no more elements exist

Definition at line 545 of file alpm_list.c.

References __alpm_list_t::next.

Referenced by check_syncdbs(), display_targets(), dump_pkg_backups(), list_display(), list_display_linebreak(), main(), pacman_database(), pacman_deptest(), pacman_query(), pacman_remove(), pacman_upgrade(), print_packages(), strreplace(), sync_prepare_execute(), and table_display().

Here is the caller graph for this function:

alpm_list_t* alpm_list_nth ( const alpm_list_t list,
size_t  n 
)

Return nth element from list (starting from 0).

Parameters:
listthe list
nthe index of the item to find (n < alpm_list_count(list) IS needed)
Returns:
an alpm_list_t node for index `n`

Definition at line 529 of file alpm_list.c.

References __alpm_list_t::next.

alpm_list_t* alpm_list_previous ( const alpm_list_t list) [inline]

Get the previous element of a list.

Parameters:
listthe list head
Returns:
the previous element, or NULL when no previous element exist

Definition at line 561 of file alpm_list.c.

References __alpm_list_t::next, and __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.

Parameters:
haystackthe list to remove the item from
needlethe data member of the item we're removing
fnthe comparison function for searching
dataoutput parameter containing data of the removed item
Returns:
the resultant list

Definition at line 356 of file alpm_list.c.

References alpm_list_remove_item(), __alpm_list_t::data, and __alpm_list_t::next.

Referenced by _alpm_sync_prepare(), alpm_db_unregister(), and alpm_list_remove_str().

Here is the call graph for this function:

Here is the caller graph for this function:

Create a new list without any duplicates.

This does NOT copy data members.

Parameters:
listthe list to copy
Returns:
a new list containing non-duplicate items

Definition at line 415 of file alpm_list.c.

References alpm_list_add(), alpm_list_find_ptr(), __alpm_list_t::data, and __alpm_list_t::next.

Here is the call graph for this function:

Remove an item from the list.

item is not freed; this is the responsibility of the caller.

Parameters:
haystackthe list to remove the item from
itemthe item to remove from the list
Returns:
the resultant list

Definition at line 308 of file alpm_list.c.

References __alpm_list_t::next, and __alpm_list_t::prev.

Referenced by _alpm_pkghash_remove(), _alpm_resolvedeps(), and alpm_list_remove().

Here is the caller graph for this function:

alpm_list_t* alpm_list_remove_str ( alpm_list_t haystack,
const char *  needle,
char **  data 
)

Remove a string from a list.

Parameters:
haystackthe list to remove the item from
needlethe data member of the item we're removing
dataoutput parameter containing data of the removed item
Returns:
the resultant list

Definition at line 399 of file alpm_list.c.

References alpm_list_remove().

Referenced by alpm_db_remove_server(), alpm_option_remove_cachedir(), alpm_option_remove_ignoregroup(), alpm_option_remove_ignorepkg(), alpm_option_remove_noextract(), alpm_option_remove_noupgrade(), and main().

Here is the call graph for this function:

Here is the caller graph for this function:

Create a new list in reverse order.

Parameters:
listthe list to copy
Returns:
a new list in reverse order

Definition at line 497 of file alpm_list.c.

References alpm_list_add(), alpm_list_last(), __alpm_list_t::data, and __alpm_list_t::prev.

Referenced by _alpm_sortbydeps().

Here is the call graph for this function:

Here is the caller graph for this function:

Copy a string list, including data.

Parameters:
listthe list to copy
Returns:
a copy of the original list

Definition at line 435 of file alpm_list.c.

References alpm_list_add(), __alpm_list_t::data, and __alpm_list_t::next.

Referenced by _alpm_pkg_dup(), alpm_option_set_ignoregroups(), alpm_option_set_ignorepkgs(), alpm_option_set_noextracts(), alpm_option_set_noupgrades(), and pacman_sync().

Here is the call graph for this function:

Here is the caller graph for this function:

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.

Parameters:
listthe list to copy
nthe size of the list
sizethe size of each data element
Returns:
an array version of the original list, data copied as well

Definition at line 761 of file alpm_list.c.

References __alpm_list_t::next.

Referenced by _alpm_db_find_fileconflicts().

Here is the caller graph for this function: