diff options
Diffstat (limited to 'libs/libaxolotl/src/device_consistency.c')
-rw-r--r-- | libs/libaxolotl/src/device_consistency.c | 61 |
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; |