void xpc_array_set_data(xpc_object_t xarray, size_t index, const void *data, size_t length) { struct xpc_object *xo, *xotmp; xo = xarray; xotmp = xpc_data_create(data, length); return (xpc_array_set_value(xarray, index, xotmp)); }
xpc_object_t xpc_copy(xpc_object_t obj) { struct xpc_object *xo, *xotmp; const void *newdata; xo = obj; switch (xo->xo_xpc_type) { case _XPC_TYPE_BOOL: case _XPC_TYPE_INT64: case _XPC_TYPE_UINT64: case _XPC_TYPE_DATE: case _XPC_TYPE_ENDPOINT: return _xpc_prim_create(xo->xo_xpc_type, xo->xo_u, 1); case _XPC_TYPE_STRING: return xpc_string_create(strdup( xpc_string_get_string_ptr(xo))); case _XPC_TYPE_DATA: newdata = xpc_data_get_bytes_ptr(obj); return (xpc_data_create(newdata, xpc_data_get_length(obj))); case _XPC_TYPE_DICTIONARY: xotmp = xpc_dictionary_create(NULL, NULL, 0); xpc_dictionary_apply(obj, ^(const char *k, xpc_object_t v) { xpc_dictionary_set_value(xotmp, k, xpc_copy(v)); return (bool)true; }); return (xotmp); case _XPC_TYPE_ARRAY: xotmp = xpc_array_create(NULL, 0); xpc_array_apply(obj, ^(size_t idx, xpc_object_t v) { xpc_array_set_value(xotmp, idx, xpc_copy(v)); return ((bool)true); });