monitor: internal: Add pointer attribute data type 23/270623/3
authorDongwoo Lee <dwoo08.lee@samsung.com>
Mon, 7 Feb 2022 05:19:39 +0000 (14:19 +0900)
committerDongwoo Lee <dwoo08.lee@samsung.com>
Tue, 8 Feb 2022 04:37:12 +0000 (13:37 +0900)
Change-Id: Id4d711e38a036b26a8a24af3b7e92ab4177d8445
Signed-off-by: Dongwoo Lee <dwoo08.lee@samsung.com>
include/util/resource.h
src/util/resource.c

index 657a9210a17bedcbef1d03574df721f0be48d98d..c4bd5992130959c55c66809b34fa329c35daee8f 100644 (file)
@@ -30,6 +30,7 @@ enum monitor_data_type {
        DATA_TYPE_DOUBLE,
        DATA_TYPE_STRING,
        DATA_TYPE_ARRAY,
+       DATA_TYPE_PTR,
 
        DATA_TYPE_NUM
 };
@@ -131,6 +132,8 @@ int get_resource_attr_double(struct resource *resource, u_int64_t attr_id, doubl
 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,
index c78b2a32e5f6287cca3fecf8aa367e9bc85b1532..f3f927e216a5b4f6760b94614adcb46e4c67f309 100644 (file)
@@ -404,6 +404,50 @@ 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;