示例#1
0
const char *
xpc_array_get_string(xpc_object_t xarray, size_t index)
{
	struct xpc_object *xotmp;

	xotmp = xpc_array_get_value(xarray, index);
	return (xpc_string_get_string_ptr(xotmp));
}
示例#2
0
size_t
xpc_hash(xpc_object_t obj)
{
	struct xpc_object *xo;
	__block size_t hash = 0;

	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 ((size_t)xo->xo_u.ui);

	case _XPC_TYPE_STRING:
		return (xpc_data_hash(
		    xpc_string_get_string_ptr(obj),
		    xpc_string_get_length(obj)));

	case _XPC_TYPE_DATA:
		return (xpc_data_hash(
		    xpc_data_get_bytes_ptr(obj),
		    xpc_data_get_length(obj)));

	case _XPC_TYPE_DICTIONARY:
		xpc_dictionary_apply(obj, ^(const char *k, xpc_object_t v) {
			hash ^= xpc_data_hash(k, strlen(k));
			hash ^= xpc_hash(v);
			return ((bool)true);
		});
		return (hash);

	case _XPC_TYPE_ARRAY:
		xpc_array_apply(obj, ^(size_t idx, xpc_object_t v) {
			hash ^= xpc_hash(v);
			return ((bool)true);
		});
示例#3
0
文件: xpc_type.c 项目: Acorld/libxpc
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);
			});