Xin Zhang / azure-iot-c-sdk-f767zi

Dependents:   samplemqtt

Committer:
XinZhangMS
Date:
Thu Aug 23 06:52:14 2018 +0000
Revision:
0:f7f1f0d76dd6
azure-c-sdk for mbed os supporting NUCLEO_F767ZI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
XinZhangMS 0:f7f1f0d76dd6 1 // Copyright (c) Microsoft. All rights reserved.
XinZhangMS 0:f7f1f0d76dd6 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
XinZhangMS 0:f7f1f0d76dd6 3
XinZhangMS 0:f7f1f0d76dd6 4 #include <string.h>
XinZhangMS 0:f7f1f0d76dd6 5 #include <stddef.h>
XinZhangMS 0:f7f1f0d76dd6 6 #include "umockcallpairs.h"
XinZhangMS 0:f7f1f0d76dd6 7 #include "umockalloc.h"
XinZhangMS 0:f7f1f0d76dd6 8 #include "umock_log.h"
XinZhangMS 0:f7f1f0d76dd6 9 #include "umocktypes.h"
XinZhangMS 0:f7f1f0d76dd6 10
XinZhangMS 0:f7f1f0d76dd6 11 int umockcallpairs_track_create_paired_call(PAIRED_HANDLES* paired_handles, const void* handle, const char* handle_type, size_t handle_type_size)
XinZhangMS 0:f7f1f0d76dd6 12 {
XinZhangMS 0:f7f1f0d76dd6 13 PAIRED_HANDLE* new_paired_handles;
XinZhangMS 0:f7f1f0d76dd6 14 int result;
XinZhangMS 0:f7f1f0d76dd6 15
XinZhangMS 0:f7f1f0d76dd6 16 if ((paired_handles == NULL) ||
XinZhangMS 0:f7f1f0d76dd6 17 (handle == NULL) ||
XinZhangMS 0:f7f1f0d76dd6 18 (handle_type == NULL))
XinZhangMS 0:f7f1f0d76dd6 19 {
XinZhangMS 0:f7f1f0d76dd6 20 /* Codes_SRS_UMOCKCALLPAIRS_01_004: [ If any of the arguments paired_handles, handle or handle_type is NULL, umockcallpairs_track_create_paired_call shallfail and return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 21 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 22 UMOCK_LOG("umock_track_create_destroy_paired_calls_malloc: NULL paired_handles");
XinZhangMS 0:f7f1f0d76dd6 23 }
XinZhangMS 0:f7f1f0d76dd6 24 else
XinZhangMS 0:f7f1f0d76dd6 25 {
XinZhangMS 0:f7f1f0d76dd6 26 /* Codes_SRS_UMOCKCALLPAIRS_01_001: [ umockcallpairs_track_create_paired_call shall add a new entry to the PAIRED_HANDLES array and on success it shall return 0. ]*/
XinZhangMS 0:f7f1f0d76dd6 27 new_paired_handles = (PAIRED_HANDLE*)umockalloc_realloc(paired_handles->paired_handles, sizeof(PAIRED_HANDLE) * (paired_handles->paired_handle_count + 1));
XinZhangMS 0:f7f1f0d76dd6 28 if (new_paired_handles == NULL)
XinZhangMS 0:f7f1f0d76dd6 29 {
XinZhangMS 0:f7f1f0d76dd6 30 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 31 UMOCK_LOG("umock_track_create_destroy_paired_calls_malloc: Allocation failed");
XinZhangMS 0:f7f1f0d76dd6 32 }
XinZhangMS 0:f7f1f0d76dd6 33 else
XinZhangMS 0:f7f1f0d76dd6 34 {
XinZhangMS 0:f7f1f0d76dd6 35 paired_handles->paired_handle_count++;
XinZhangMS 0:f7f1f0d76dd6 36 paired_handles->paired_handles = new_paired_handles;
XinZhangMS 0:f7f1f0d76dd6 37
XinZhangMS 0:f7f1f0d76dd6 38 /* Codes_SRS_UMOCKCALLPAIRS_01_003: [ umockcallpairs_track_create_paired_call shall allocate a memory block and store a pointer to it in the memory field of the new entry. ]*/
XinZhangMS 0:f7f1f0d76dd6 39 paired_handles->paired_handles[paired_handles->paired_handle_count - 1].handle_value = umockalloc_malloc(handle_type_size);
XinZhangMS 0:f7f1f0d76dd6 40 if (paired_handles->paired_handles[paired_handles->paired_handle_count - 1].handle_value == NULL)
XinZhangMS 0:f7f1f0d76dd6 41 {
XinZhangMS 0:f7f1f0d76dd6 42 /* Codes_SRS_UMOCKCALLPAIRS_01_005: [ If allocating memory fails, umockcallpairs_track_create_paired_call shall fail and return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 43 paired_handles->paired_handle_count--;
XinZhangMS 0:f7f1f0d76dd6 44 if (paired_handles->paired_handle_count == 0)
XinZhangMS 0:f7f1f0d76dd6 45 {
XinZhangMS 0:f7f1f0d76dd6 46 umockalloc_free(paired_handles->paired_handles);
XinZhangMS 0:f7f1f0d76dd6 47 paired_handles->paired_handles = NULL;
XinZhangMS 0:f7f1f0d76dd6 48 }
XinZhangMS 0:f7f1f0d76dd6 49
XinZhangMS 0:f7f1f0d76dd6 50 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 51 UMOCK_LOG("umock_track_create_destroy_paired_calls_malloc: Failed allocating memory for handle value for create");
XinZhangMS 0:f7f1f0d76dd6 52 }
XinZhangMS 0:f7f1f0d76dd6 53 else
XinZhangMS 0:f7f1f0d76dd6 54 {
XinZhangMS 0:f7f1f0d76dd6 55 size_t handle_type_length = strlen(handle_type);
XinZhangMS 0:f7f1f0d76dd6 56
XinZhangMS 0:f7f1f0d76dd6 57 paired_handles->paired_handles[paired_handles->paired_handle_count - 1].handle_type = (char*)umockalloc_malloc(handle_type_length + 1);
XinZhangMS 0:f7f1f0d76dd6 58 if (paired_handles->paired_handles[paired_handles->paired_handle_count - 1].handle_type == NULL)
XinZhangMS 0:f7f1f0d76dd6 59 {
XinZhangMS 0:f7f1f0d76dd6 60 /* Codes_SRS_UMOCKCALLPAIRS_01_005: [ If allocating memory fails, umockcallpairs_track_create_paired_call shall fail and return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 61 umockalloc_free(paired_handles->paired_handles[paired_handles->paired_handle_count - 1].handle_value);
XinZhangMS 0:f7f1f0d76dd6 62 paired_handles->paired_handle_count--;
XinZhangMS 0:f7f1f0d76dd6 63 if (paired_handles->paired_handle_count == 0)
XinZhangMS 0:f7f1f0d76dd6 64 {
XinZhangMS 0:f7f1f0d76dd6 65 umockalloc_free(paired_handles->paired_handles);
XinZhangMS 0:f7f1f0d76dd6 66 paired_handles->paired_handles = NULL;
XinZhangMS 0:f7f1f0d76dd6 67 }
XinZhangMS 0:f7f1f0d76dd6 68
XinZhangMS 0:f7f1f0d76dd6 69 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 70 UMOCK_LOG("umock_track_create_destroy_paired_calls_malloc: Failed allocating memory for handle type for create");
XinZhangMS 0:f7f1f0d76dd6 71 }
XinZhangMS 0:f7f1f0d76dd6 72 else
XinZhangMS 0:f7f1f0d76dd6 73 {
XinZhangMS 0:f7f1f0d76dd6 74 (void)memcpy(paired_handles->paired_handles[paired_handles->paired_handle_count - 1].handle_type, handle_type, handle_type_length + 1);
XinZhangMS 0:f7f1f0d76dd6 75
XinZhangMS 0:f7f1f0d76dd6 76 /* Codes_SRS_UMOCKCALLPAIRS_01_002: [ umockcallpairs_track_create_paired_call shall copy the handle_value to the handle_value member of the new entry. ] */
XinZhangMS 0:f7f1f0d76dd6 77 /* Codes_SRS_UMOCKCALLPAIRS_01_006: [ The handle value shall be copied by using umocktypes_copy. ]*/
XinZhangMS 0:f7f1f0d76dd6 78 if (umocktypes_copy(handle_type, paired_handles->paired_handles[paired_handles->paired_handle_count - 1].handle_value, handle) != 0)
XinZhangMS 0:f7f1f0d76dd6 79 {
XinZhangMS 0:f7f1f0d76dd6 80 /* Codes_SRS_UMOCKCALLPAIRS_01_007: [ If umocktypes_copy fails, umockcallpairs_track_create_paired_call shall fail and return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 81 umockalloc_free(paired_handles->paired_handles[paired_handles->paired_handle_count - 1].handle_type);
XinZhangMS 0:f7f1f0d76dd6 82 umockalloc_free(paired_handles->paired_handles[paired_handles->paired_handle_count - 1].handle_value);
XinZhangMS 0:f7f1f0d76dd6 83 paired_handles->paired_handle_count--;
XinZhangMS 0:f7f1f0d76dd6 84 if (paired_handles->paired_handle_count == 0)
XinZhangMS 0:f7f1f0d76dd6 85 {
XinZhangMS 0:f7f1f0d76dd6 86 umockalloc_free(paired_handles->paired_handles);
XinZhangMS 0:f7f1f0d76dd6 87 paired_handles->paired_handles = NULL;
XinZhangMS 0:f7f1f0d76dd6 88 }
XinZhangMS 0:f7f1f0d76dd6 89
XinZhangMS 0:f7f1f0d76dd6 90 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 91 UMOCK_LOG("umock_track_create_destroy_paired_calls_malloc: Failed copying handle");
XinZhangMS 0:f7f1f0d76dd6 92 }
XinZhangMS 0:f7f1f0d76dd6 93 else
XinZhangMS 0:f7f1f0d76dd6 94 {
XinZhangMS 0:f7f1f0d76dd6 95 result = 0;
XinZhangMS 0:f7f1f0d76dd6 96 }
XinZhangMS 0:f7f1f0d76dd6 97 }
XinZhangMS 0:f7f1f0d76dd6 98 }
XinZhangMS 0:f7f1f0d76dd6 99 }
XinZhangMS 0:f7f1f0d76dd6 100 }
XinZhangMS 0:f7f1f0d76dd6 101
XinZhangMS 0:f7f1f0d76dd6 102 return result;
XinZhangMS 0:f7f1f0d76dd6 103 }
XinZhangMS 0:f7f1f0d76dd6 104
XinZhangMS 0:f7f1f0d76dd6 105 int umockcallpairs_track_destroy_paired_call(PAIRED_HANDLES* paired_handles, const void* handle)
XinZhangMS 0:f7f1f0d76dd6 106 {
XinZhangMS 0:f7f1f0d76dd6 107 size_t i;
XinZhangMS 0:f7f1f0d76dd6 108 int result;
XinZhangMS 0:f7f1f0d76dd6 109
XinZhangMS 0:f7f1f0d76dd6 110 if ((paired_handles == NULL) ||
XinZhangMS 0:f7f1f0d76dd6 111 (handle == NULL))
XinZhangMS 0:f7f1f0d76dd6 112 {
XinZhangMS 0:f7f1f0d76dd6 113 /* Codes_SRS_UMOCKCALLPAIRS_01_010: [ If any of the arguments is NULL, umockcallpairs_track_destroy_paired_call shall fail and return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 114 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 115 UMOCK_LOG("umock_track_create_destroy_paired_calls_free: are_equal failed");
XinZhangMS 0:f7f1f0d76dd6 116 }
XinZhangMS 0:f7f1f0d76dd6 117 else
XinZhangMS 0:f7f1f0d76dd6 118 {
XinZhangMS 0:f7f1f0d76dd6 119 unsigned char is_error = 0;
XinZhangMS 0:f7f1f0d76dd6 120
XinZhangMS 0:f7f1f0d76dd6 121 /* Codes_SRS_UMOCKCALLPAIRS_01_008: [ umockcallpairs_track_destroy_paired_call shall remove from the paired handles array pointed by the paired_handles field the entry that is associated with the handle passed in the handle argument. ]*/
XinZhangMS 0:f7f1f0d76dd6 122 for (i = 0; i < paired_handles->paired_handle_count; i++)
XinZhangMS 0:f7f1f0d76dd6 123 {
XinZhangMS 0:f7f1f0d76dd6 124 /* Codes_SRS_UMOCKCALLPAIRS_01_013: [ When looking up which entry to remove, the comparison of the handle values shall be done by calling umocktypes_are_equal. ]*/
XinZhangMS 0:f7f1f0d76dd6 125 int are_equal_result = umocktypes_are_equal(paired_handles->paired_handles[i].handle_type, paired_handles->paired_handles[i].handle_value, handle);
XinZhangMS 0:f7f1f0d76dd6 126 if (are_equal_result < 0)
XinZhangMS 0:f7f1f0d76dd6 127 {
XinZhangMS 0:f7f1f0d76dd6 128 /* Codes_SRS_UMOCKCALLPAIRS_01_014: [ If umocktypes_are_equal fails, umockcallpairs_track_destroy_paired_call shall fail and return a non-zero value. ]*/
XinZhangMS 0:f7f1f0d76dd6 129 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 130 is_error = 1;
XinZhangMS 0:f7f1f0d76dd6 131 UMOCK_LOG("umock_track_create_destroy_paired_calls_free: are_equal failed");
XinZhangMS 0:f7f1f0d76dd6 132 break;
XinZhangMS 0:f7f1f0d76dd6 133 }
XinZhangMS 0:f7f1f0d76dd6 134 else
XinZhangMS 0:f7f1f0d76dd6 135 {
XinZhangMS 0:f7f1f0d76dd6 136 if (are_equal_result == 1)
XinZhangMS 0:f7f1f0d76dd6 137 {
XinZhangMS 0:f7f1f0d76dd6 138 break;
XinZhangMS 0:f7f1f0d76dd6 139 }
XinZhangMS 0:f7f1f0d76dd6 140 }
XinZhangMS 0:f7f1f0d76dd6 141 }
XinZhangMS 0:f7f1f0d76dd6 142
XinZhangMS 0:f7f1f0d76dd6 143 if (i == paired_handles->paired_handle_count)
XinZhangMS 0:f7f1f0d76dd6 144 {
XinZhangMS 0:f7f1f0d76dd6 145 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 146 UMOCK_LOG("umock_track_create_destroy_paired_calls_free: could not find handle");
XinZhangMS 0:f7f1f0d76dd6 147 }
XinZhangMS 0:f7f1f0d76dd6 148 else
XinZhangMS 0:f7f1f0d76dd6 149 {
XinZhangMS 0:f7f1f0d76dd6 150 if (!is_error)
XinZhangMS 0:f7f1f0d76dd6 151 {
XinZhangMS 0:f7f1f0d76dd6 152 /* Codes_SRS_UMOCKCALLPAIRS_01_011: [ umockcallpairs_track_destroy_paired_call shall free the memory pointed by the memory field in the PAIRED_HANDLES array entry associated with handle. ]*/
XinZhangMS 0:f7f1f0d76dd6 153 umocktypes_free(paired_handles->paired_handles[i].handle_type, paired_handles->paired_handles[i].handle_value);
XinZhangMS 0:f7f1f0d76dd6 154 umockalloc_free(paired_handles->paired_handles[i].handle_type);
XinZhangMS 0:f7f1f0d76dd6 155 umockalloc_free(paired_handles->paired_handles[i].handle_value);
XinZhangMS 0:f7f1f0d76dd6 156 (void)memmove(&paired_handles->paired_handles[i], &paired_handles->paired_handles[i + 1], sizeof(PAIRED_HANDLE) * (paired_handles->paired_handle_count - 1));
XinZhangMS 0:f7f1f0d76dd6 157 paired_handles->paired_handle_count--;
XinZhangMS 0:f7f1f0d76dd6 158 if (paired_handles->paired_handle_count == 0)
XinZhangMS 0:f7f1f0d76dd6 159 {
XinZhangMS 0:f7f1f0d76dd6 160 /* Codes_SRS_UMOCKCALLPAIRS_01_012: [ If the array paired handles array is empty after removing the entry, the paired_handles field shall be freed and set to NULL. ]*/
XinZhangMS 0:f7f1f0d76dd6 161 umockalloc_free(paired_handles->paired_handles);
XinZhangMS 0:f7f1f0d76dd6 162 paired_handles->paired_handles = NULL;
XinZhangMS 0:f7f1f0d76dd6 163 }
XinZhangMS 0:f7f1f0d76dd6 164
XinZhangMS 0:f7f1f0d76dd6 165 /* Codes_SRS_UMOCKCALLPAIRS_01_009: [ On success umockcallpairs_track_destroy_paired_call shall return 0. ]*/
XinZhangMS 0:f7f1f0d76dd6 166 result = 0;
XinZhangMS 0:f7f1f0d76dd6 167 }
XinZhangMS 0:f7f1f0d76dd6 168 else
XinZhangMS 0:f7f1f0d76dd6 169 {
XinZhangMS 0:f7f1f0d76dd6 170 result = __LINE__;
XinZhangMS 0:f7f1f0d76dd6 171 }
XinZhangMS 0:f7f1f0d76dd6 172 }
XinZhangMS 0:f7f1f0d76dd6 173 }
XinZhangMS 0:f7f1f0d76dd6 174
XinZhangMS 0:f7f1f0d76dd6 175 return result;
XinZhangMS 0:f7f1f0d76dd6 176 }