October 25, 2006 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

```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_ioctl, prop_array_copyout_ioctl, 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 receiving or returning a property list will be passed a pointer to a This structure encapsulates the reference to the property list in externalized form.

### RETURN VALUES

If successful, functions return zero. Otherwise, an error number will be returned to indicate the error.

### ERRORS

prop_array_copyin_ioctl(``) and prop_dictionary_copyin_ioctl(``) will fail if:

[```EFAULT`]
  Bad address

[```EIO`]
  Input/output error

[```ENOMEM`]
  Cannot allocate memory

[```ENOTSUP`]
  Not supported

prop_array_copyout_ioctl(``) and prop_dictionary_copyout_ioctl(``) will fail if:

[```EFAULT`]
  Bad address

[```ENOMEM`]
  Cannot allocate memory

[```ENOTSUP`]
  Not supported

### EXAMPLES

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 NetBSD4.0.