PROP_COPYIN_IOCTL(9)

NAME
prop_array_copyin_ioctl, prop_array_copyout_ioctl, prop_dictionary_copyin_ioctl, prop_dictionary_copyout_ioctl - Copy property lists to and from kernel space

SYNOPSIS
#include <prop/proplib.h>
int
prop_array_copyin_ioctl(const struct plistref *pref, const u_long cmd, prop_array_t *arrayp);
int
prop_array_copyout_ioctl(struct plistref *pref, const u_long cmd, prop_array_t array);
int
prop_dictionary_copyin_ioctl(const struct plistref *pref, const u_long cmd, prop_dictionary_t *dictp);
int
prop_dictionary_copyout_ioctl(struct plistref *pref, const u_long cmd, prop_dictionary_t dict);

DESCRIPTION
The prop_array_copyin, prop_array_copyout, prop_dictionary_copyin_ioctl, and prop_dictionary_copyout_ioctl functions implement the kernel side of a protocol for sending property lists to and from the kernel using ioctl(2).

A kernel ioctl routine receivig or returning a property list will be passed a pointer to a struct plistref. This structure encapsulates the reference to the property list in externalized form.

The following (simplified) example demonstrates using prop_dictionary_copyin_ioctl() and prop_dictionary_copyout_ioctl() in an ioctl routine:

    extern prop_dictionary_t fooprops;
    int
    fooioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct lwp *l)
    {
        prop_dictionary_t dict, odict;
        int error;
        switch (cmd) {
        case FOOSETPROPS: {
    	const struct plistref *pref = (const struct plistref *) data;
    	error = prop_dictionary_copyin_ioctl(pref, cmd, dict);
    	if (error)
    		return (error);
    	odict = fooprops;
    	fooprops = dict;
    	prop_object_release(odict);
    	break;
          }
        case FOOGETPROPS: {
    	struct plistref *pref = (struct plistref *) data;
    	error = prop_dictionary_copyout_ioctl(pref, cmd, fooprops);
    	break;
          }
        default:
    	return (EPASSTHROUGH);
        }
        return (error);
    }

SEE ALSO
prop_array(3), prop_dictionary(3), prop_send_ioctl(3), proplib(3)

HISTORY
The proplib property container object library first appeared in NetBSD 4.0.