rfs: Size function for helpers that return data with non-explicit size
authorPaul Kocialkowski <contact@paulk.fr>
Sat, 2 Aug 2014 18:59:34 +0000 (20:59 +0200)
committerPaul Kocialkowski <contact@paulk.fr>
Sat, 2 Aug 2014 18:59:34 +0000 (20:59 +0200)
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
include/rfs.h
samsung-ipc/rfs.c

index daa3f61..024fad9 100644 (file)
@@ -74,6 +74,7 @@ void *ipc_nv_data_read(struct ipc_client *client, size_t size,
     unsigned int offset);
 int ipc_nv_data_write(struct ipc_client *client, const void *data, size_t size,
     unsigned int offset);
+size_t ipc_rfs_nv_data_item_response_size_setup(const void *data, size_t size);
 void *ipc_rfs_nv_read_item_response_setup(const void *data, size_t size,
     unsigned int offset);
 
index 086646c..915dd1d 100644 (file)
@@ -656,6 +656,18 @@ complete:
     return rc;
 }
 
+size_t ipc_rfs_nv_data_item_response_size_setup(const void *data, size_t size)
+{
+    size_t length;
+
+    if (data == NULL)
+        size = 0;
+
+    length = sizeof(struct ipc_rfs_nv_read_item_response_header) + size;
+
+    return length;
+}
+
 void *ipc_rfs_nv_read_item_response_setup(const void *data, size_t size,
     unsigned int offset)
 {
@@ -665,14 +677,16 @@ void *ipc_rfs_nv_read_item_response_setup(const void *data, size_t size,
     unsigned char confirm;
     unsigned char *p;
 
-    if (data != NULL && size > 0) {
-        length = sizeof(struct ipc_rfs_nv_read_item_response_header) + size;
-        confirm = 1;
-    } else {
-        length = sizeof(struct ipc_rfs_nv_read_item_response_header);
+    length = ipc_rfs_nv_data_item_response_size_setup(data, size);
+    if (length == 0)
+        return NULL;
+
+    if (data == NULL || size == 0) {
         size = 0;
         offset = 0;
         confirm = 0;
+    } else {
+        confirm = 1;
     }
 
     buffer = calloc(1, length);