//po4a: entry man manual
= ll2_read_all(3)
:doctype: manpage
:man manual: Programmer's Manual
:man source: util-linux {release-version}
:page-layout: base
:lib: liblastlog2
:firstversion: 2.40

== NAME

ll2_read_all -  Reads all entries from database and calls the callback function for each entry.

== SYNOPSIS

*#include <lastlog2.h>*
*int ll2_read_all (struct ll2_context *__context__,
     		   int (*__callback__)(const char *__user__, int64_t __ll_time__,
				       const char *__tty__, const char *__rhost__,
				       const char *__pam_service__, const char *__cb_error__),
 		   char **__error__);*

== DESCRIPTION

Reads all entries from database, defined in _context_, and calls callback function _callback_ for each entry.
If _context_ is NULL, the default database, defined in _LL2_DEFAULT_DATABASE_, will be taken.

--------------------------------------
char  *error = NULL;
const char *user = "root";

static int
callback (const char *res_user, int64_t ll_time, const char *res_tty,
	  const char *res_rhost, const char *res_service, const char *cb_error)
{
   /* returning != 0 if no further entry has to be handled by the callback */
   return 0;
}

int ret = ll2_read_all (NULL, callback, &error);
--------------------------------------

== RETURN VALUE

Returns 0 on success, -ENOMEM or -1 on other failure.
_error_ contains an error string if the return value is -1.
_error_ is not guaranteed to contain an error string, could also be NULL.
_error_ should be freed by the caller.
If lastlog2 database does not exist at all, the errno ENOENT is set
and can be checked.

== AUTHORS

mailto:kukuk@suse.de[Thorsten Kukuk]

== SEE ALSO

*lastlog2*(3),
*ll2_new_context*(3),
*ll2_unref_context*(3),
*ll2_write_entry*(3),
*ll2_read_entry*(3),
*ll2_update_login_time*(3),
*ll2_remove_entry*(3),
*ll2_rename_user*(3),
*ll2_import_lastlog*(3)

include::man-common/bugreports.adoc[]

include::man-common/footer-lib.adoc[]

ifdef::translation[]
include::man-common/translation.adoc[]
endif::[]
