VND_PROP_ITER(3VND)VND_PROP_ITER(3VND)NAMEvnd_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).
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)
Feb 21, 2014 VND_PROP_ITER(3VND)