VND_PROP_ITER(3VND) VND_PROP_ITER(3VND)


NAME


vnd_prop_iter - iterate vnd properties


SYNOPSIS


cc [ flag... ] file... -lvnd [ library... ]
#include <libvnd.h>

typedef int (vnd_prop_iter_f)(vnd_handle_t *vhp, vnd_prop_t prop,
void *cbarg);

int vnd_prop_iter(vnd_handle_t *vhp, vnd_prop_iter_f cb,
void *arg);


DESCRIPTION


The vnd_prop_iter function iterates over all the available properties for
the vnd handle vhp and calls the user supplied callback function cb. The
argument arg is passed directly to the callback function.


The function specified by cb receives three arguments. The first, vhp, is
the same vnd library handle that was passed to vnd_prop_iter. During the
callback, the consumer should not call vnd_close(3VND). Doing so will
lead to undefined and undocumented behavior. The second argument, prop,
is the current property. While vnd_prop_iter guarantees that all
properties will be recieved, it does not guarantee the order of them.
The final argument, cbarg, is the same argument that the caller passed in
during arg.


The return value of the callback function cb indicates whether or not
property iteration should continue. To continue iteration, the function
cb should return zero. Otherwise, to stop property iteration it should
return non-zero.


RETURN VALUES


On success, the function vnd_prop_iter returns zero. If the callback
function returned non-zero to terminate iteration, vnd_prop_iter will
instead return one. In the case of library failure, vnd_prop_iter will
return -1. In such cases, the vnd and system errors will be updated and
available via vnd_errno(3VND) and vnd_syserrno(3VND).


EXAMPLES


Example 1 Print writeable properties


The following sample C program walks over every vnd property and prints
out whether the property is read-only or read-write for the vnd device
"vnd1" in the current zone.


#include <libvnd.h>
#include <stdlib.h>
#include <stdio.h>

static int
print_prop(vnd_handle_t *vhp, vnd_prop_t prop, void *unused)
{
boolean_t canwrite;

if (vnd_prop_writeable(vhp, &canwrite) != 0)
abort();

(void) printf("prop %d is %s", prop, canwrite == B_TRUE ? "rw" : "r-");
return (0);
}

int
main(void)
{
vnd_handle_t *vhp;
vnd_errno_t vnderr;
int syserr;

vhp = vnd_open(NULL, "vnd1", &vnderr, &syserr);
if (vhp != NULL) {
if (vnderr == VND_E_SYS)
(void) fprintf(stderr, "failed to open device: %s",
vnd_strsyserror(syserr));
else
(void) fprintf(stderr, "failed to open device: %s",
vnd_strerror(vnderr));
return (1);
}

if (vnd_prop_iter(vhp, print_prop, NULL) != 0) {
vnderr = vnd_errno(vhp);
syserr = vnd_syserrno(vhp);
if (vnderr == VND_E_SYS)
(void) fprintf(stderr, "failed to open device: %s",
vnd_strsyserror(syserr));
else
(void) fprintf(stderr, "failed to open device: %s",
vnd_strerror(vnderr));
return (1);
}

vnd_close(vnd);
return (0);
}


ATTRIBUTES


See attributes(5) for descriptions of the following attributes:


+---------------+---------------------------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+---------------------------------+
|Stability | Committed |
+---------------+---------------------------------+
|MT-Level | See "THREADING" in libvnd(3LIB) |
+---------------+---------------------------------+
libvnd(3LIB), vnd_close(3VND), vnd_errno(3VND), vnd_syserrno(3VND)

February 21, 2014 VND_PROP_ITER(3VND)