| PROP_COPYIN_IOCTL(9) | Kernel Developer's Manual | PROP_COPYIN_IOCTL(9) | 
int
prop_array_copyin_ioctl(const struct plistref *pref, const u_long cmd, prop_array_t *arrayp);
int
prop_array_copyin(const struct plistref *pref, prop_array_t *arrayp);
int
prop_array_copyout_ioctl(struct plistref *pref, const u_long cmd, prop_array_t array);
int
prop_array_copyout(struct plistref *pref, prop_array_t array);
int
prop_dictionary_copyin_ioctl(const struct plistref *pref, const u_long cmd, prop_dictionary_t *dictp);
int
prop_dictionary_copyin(const struct plistref *pref, prop_dictionary_t *dictp);
int
prop_dictionary_copyout_ioctl(struct plistref *pref, const u_long cmd, prop_dictionary_t dict);
int
prop_dictionary_copyout(struct plistref *pref, prop_dictionary_t dict);
A kernel routine receiving 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.
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); 
}
The following (simplified) example demonstrates using prop_array_copyin() in a routine:
int 
foocopyin(const struct plistref *pref)) 
{ 
    prop_array_t array; 
    int error; 
 
    error = prop_array_copyin(pref, &array); 
    if (error) 
	    return (error); 
    ... 
}
prop_array_copyout_ioctl() and prop_dictionary_copyout_ioctl() will fail if:
| January 17, 2011 | NetBSD 6.1 |