summaryrefslogtreecommitdiff
path: root/libs/libaxolotl/src/device_consistency.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/libaxolotl/src/device_consistency.c')
-rw-r--r--libs/libaxolotl/src/device_consistency.c61
1 files changed, 47 insertions, 14 deletions
diff --git a/libs/libaxolotl/src/device_consistency.c b/libs/libaxolotl/src/device_consistency.c
index f01ed15363..4b18bc1471 100644
--- a/libs/libaxolotl/src/device_consistency.c
+++ b/libs/libaxolotl/src/device_consistency.c
@@ -6,7 +6,7 @@
#include "signal_protocol_internal.h"
#include "curve.h"
#include "WhisperTextProtocol.pb-c.h"
-#include "utarray.h"
+#include "signal_utarray.h"
#define CODE_VERSION 0
@@ -362,7 +362,7 @@ int device_consistency_message_create_from_serialized(device_consistency_message
/* Assign the message fields */
result_message->generation = message_structure->generation;
- device_consistency_signature_create(&result_message->signature,
+ result = device_consistency_signature_create(&result_message->signature,
message_structure->signature.data, message_structure->signature.len,
signal_buffer_data(vrf_output_buffer), signal_buffer_len(vrf_output_buffer));
if(result < 0) {
@@ -542,45 +542,78 @@ complete:
device_consistency_signature_list *device_consistency_signature_list_alloc()
{
+ int result = 0;
device_consistency_signature_list *list = malloc(sizeof(device_consistency_signature_list));
if(!list) {
- return 0;
+ result = SG_ERR_NOMEM;
+ goto complete;
}
+
memset(list, 0, sizeof(device_consistency_signature_list));
+
utarray_new(list->values, &ut_ptr_icd);
- return list;
+
+complete:
+ if(result < 0) {
+ if(list) {
+ free(list);
+ }
+ return 0;
+ }
+ else {
+ return list;
+ }
}
device_consistency_signature_list *device_consistency_signature_list_copy(const device_consistency_signature_list *list)
{
- device_consistency_signature_list *result = 0;
+ int result = 0;
+ device_consistency_signature_list *result_list = 0;
unsigned int size;
unsigned int i;
device_consistency_signature **p;
- result = device_consistency_signature_list_alloc();
- if(!result) {
- return 0;
+ result_list = device_consistency_signature_list_alloc();
+ if(!result_list) {
+ result = SG_ERR_NOMEM;
+ goto complete;
}
size = utarray_len(list->values);
- utarray_reserve(result->values, size);
+ utarray_reserve(result_list->values, size);
for (i = 0; i < size; i++) {
p = (device_consistency_signature **)utarray_eltptr(list->values, i);
- device_consistency_signature_list_push_back(result, *p);
+ result = device_consistency_signature_list_push_back(result_list, *p);
+ if(result < 0) {
+ goto complete;
+ }
}
- return result;
+complete:
+ if(result < 0) {
+ if(result_list) {
+ device_consistency_signature_list_free(result_list);
+ }
+ return 0;
+ }
+ else {
+ return result_list;
+ }
}
-void device_consistency_signature_list_push_back(device_consistency_signature_list *list, device_consistency_signature *value)
+int device_consistency_signature_list_push_back(device_consistency_signature_list *list, device_consistency_signature *value)
{
+ int result = 0;
assert(list);
assert(value);
- SIGNAL_REF(value);
+
utarray_push_back(list->values, &value);
+ SIGNAL_REF(value);
+
+complete:
+ return result;
}
unsigned int device_consistency_signature_list_size(const device_consistency_signature_list *list)
@@ -617,7 +650,7 @@ int device_consistency_signature_list_sort_comparator(const void *a, const void
result = memcmp(signal_buffer_data(buf1), signal_buffer_data(buf2), len1);
}
else {
- result = len1 - len2;
+ result = (int)(len1 - len2);
}
return result;