DATA_TYPE_DOUBLE,
DATA_TYPE_STRING,
DATA_TYPE_ARRAY,
+ DATA_TYPE_PTR,
DATA_TYPE_NUM
};
int get_resource_attr_double_sync(struct resource *resource, u_int64_t attr_id, double *data);
int get_resource_attr_string(struct resource *resource, u_int64_t attr_id, char **data);
int get_resource_attr_string_sync(struct resource *resource, u_int64_t attr_id, char **data);
+int get_resource_attr_ptr(struct resource *resource, u_int64_t attr_id, void **data);
+int get_resource_attr_ptr_sync(struct resource *resource, u_int64_t attr_id, void **data);
int get_resource_attr_array(struct resource *resource, u_int64_t attr_id,
struct array_value **data);
int get_resource_attr_array_sync(struct resource *resource, u_int64_t attr_id,
return get_resource_attr_array(resource, attr_id, data);
}
+int get_resource_attr_ptr(struct resource *resource, u_int64_t attr_id, void **data)
+{
+ struct resource_attribute_value *attr_value = NULL;
+
+ if (!check_attr_validate(resource, attr_id, DATA_TYPE_PTR))
+ return -EINVAL;
+
+ attr_value = get_resource_attr_value(resource, attr_id);
+ if (!attr_value)
+ return -EINVAL;
+
+ *data = attr_value->data;
+
+ return 0;
+}
+
+int put_resource_attr_ptr(struct resource *resource, u_int64_t attr_id)
+{
+ struct resource_attribute_value *attr_value = NULL;
+
+ if (!check_attr_validate(resource, attr_id, DATA_TYPE_PTR))
+ return -EINVAL;
+
+ attr_value = get_resource_attr_value(resource, attr_id);
+ if (!attr_value || !attr_value->data)
+ return -EINVAL;
+
+ free(attr_value->data);
+ attr_value->data = NULL;
+
+ return 0;
+}
+
+int get_resource_attr_ptr_sync(struct resource *resource, u_int64_t attr_id, void **data)
+{
+ int ret;
+
+ ret = update_resource_attr(resource, attr_id);
+ if (ret < 0)
+ return ret;
+
+ return get_resource_attr_ptr(resource, attr_id, data);
+}
+
void set_resource_attr_interest(struct resource *resource, u_int64_t interest_mask)
{
resource->attr_interest |= interest_mask;