982 static void json_arr_free_temp(CxJsonValue** values, size_t count) { |
982 static void json_arr_free_temp(CxJsonValue** values, size_t count) { |
983 for (size_t i = 0; i < count; i++) { |
983 for (size_t i = 0; i < count; i++) { |
984 if (values[i] == NULL) break; |
984 if (values[i] == NULL) break; |
985 cxJsonValueFree(values[i]); |
985 cxJsonValueFree(values[i]); |
986 } |
986 } |
987 cxFree(cxDefaultAllocator, values); |
987 cxFreeDefault(values); |
988 } |
988 } |
989 // LCOV_EXCL_STOP |
989 // LCOV_EXCL_STOP |
990 |
990 |
991 int cxJsonArrAddNumbers(CxJsonValue* arr, const double* num, size_t count) { |
991 int cxJsonArrAddNumbers(CxJsonValue* arr, const double* num, size_t count) { |
992 CxJsonValue** values = cxCalloc(cxDefaultAllocator, count, sizeof(CxJsonValue*)); |
992 CxJsonValue** values = cxCallocDefault(count, sizeof(CxJsonValue*)); |
993 if (values == NULL) return -1; |
993 if (values == NULL) return -1; |
994 for (size_t i = 0; i < count; i++) { |
994 for (size_t i = 0; i < count; i++) { |
995 values[i] = cxJsonCreateNumber(arr->allocator, num[i]); |
995 values[i] = cxJsonCreateNumber(arr->allocator, num[i]); |
996 if (values[i] == NULL) { json_arr_free_temp(values, count); return -1; } |
996 if (values[i] == NULL) { json_arr_free_temp(values, count); return -1; } |
997 } |
997 } |
998 int ret = cxJsonArrAddValues(arr, values, count); |
998 int ret = cxJsonArrAddValues(arr, values, count); |
999 cxFree(cxDefaultAllocator, values); |
999 cxFreeDefault(values); |
1000 return ret; |
1000 return ret; |
1001 } |
1001 } |
1002 |
1002 |
1003 int cxJsonArrAddIntegers(CxJsonValue* arr, const int64_t* num, size_t count) { |
1003 int cxJsonArrAddIntegers(CxJsonValue* arr, const int64_t* num, size_t count) { |
1004 CxJsonValue** values = cxCalloc(cxDefaultAllocator, count, sizeof(CxJsonValue*)); |
1004 CxJsonValue** values = cxCallocDefault(count, sizeof(CxJsonValue*)); |
1005 if (values == NULL) return -1; |
1005 if (values == NULL) return -1; |
1006 for (size_t i = 0; i < count; i++) { |
1006 for (size_t i = 0; i < count; i++) { |
1007 values[i] = cxJsonCreateInteger(arr->allocator, num[i]); |
1007 values[i] = cxJsonCreateInteger(arr->allocator, num[i]); |
1008 if (values[i] == NULL) { json_arr_free_temp(values, count); return -1; } |
1008 if (values[i] == NULL) { json_arr_free_temp(values, count); return -1; } |
1009 } |
1009 } |
1010 int ret = cxJsonArrAddValues(arr, values, count); |
1010 int ret = cxJsonArrAddValues(arr, values, count); |
1011 cxFree(cxDefaultAllocator, values); |
1011 cxFreeDefault(values); |
1012 return ret; |
1012 return ret; |
1013 } |
1013 } |
1014 |
1014 |
1015 int cxJsonArrAddStrings(CxJsonValue* arr, const char* const* str, size_t count) { |
1015 int cxJsonArrAddStrings(CxJsonValue* arr, const char* const* str, size_t count) { |
1016 CxJsonValue** values = cxCalloc(cxDefaultAllocator, count, sizeof(CxJsonValue*)); |
1016 CxJsonValue** values = cxCallocDefault(count, sizeof(CxJsonValue*)); |
1017 if (values == NULL) return -1; |
1017 if (values == NULL) return -1; |
1018 for (size_t i = 0; i < count; i++) { |
1018 for (size_t i = 0; i < count; i++) { |
1019 values[i] = cxJsonCreateString(arr->allocator, str[i]); |
1019 values[i] = cxJsonCreateString(arr->allocator, str[i]); |
1020 if (values[i] == NULL) { json_arr_free_temp(values, count); return -1; } |
1020 if (values[i] == NULL) { json_arr_free_temp(values, count); return -1; } |
1021 } |
1021 } |
1022 int ret = cxJsonArrAddValues(arr, values, count); |
1022 int ret = cxJsonArrAddValues(arr, values, count); |
1023 cxFree(cxDefaultAllocator, values); |
1023 cxFreeDefault(values); |
1024 return ret; |
1024 return ret; |
1025 } |
1025 } |
1026 |
1026 |
1027 int cxJsonArrAddCxStrings(CxJsonValue* arr, const cxstring* str, size_t count) { |
1027 int cxJsonArrAddCxStrings(CxJsonValue* arr, const cxstring* str, size_t count) { |
1028 CxJsonValue** values = cxCalloc(cxDefaultAllocator, count, sizeof(CxJsonValue*)); |
1028 CxJsonValue** values = cxCallocDefault(count, sizeof(CxJsonValue*)); |
1029 if (values == NULL) return -1; |
1029 if (values == NULL) return -1; |
1030 for (size_t i = 0; i < count; i++) { |
1030 for (size_t i = 0; i < count; i++) { |
1031 values[i] = cxJsonCreateCxString(arr->allocator, str[i]); |
1031 values[i] = cxJsonCreateCxString(arr->allocator, str[i]); |
1032 if (values[i] == NULL) { json_arr_free_temp(values, count); return -1; } |
1032 if (values[i] == NULL) { json_arr_free_temp(values, count); return -1; } |
1033 } |
1033 } |
1034 int ret = cxJsonArrAddValues(arr, values, count); |
1034 int ret = cxJsonArrAddValues(arr, values, count); |
1035 cxFree(cxDefaultAllocator, values); |
1035 cxFreeDefault(values); |
1036 return ret; |
1036 return ret; |
1037 } |
1037 } |
1038 |
1038 |
1039 int cxJsonArrAddLiterals(CxJsonValue* arr, const CxJsonLiteral* lit, size_t count) { |
1039 int cxJsonArrAddLiterals(CxJsonValue* arr, const CxJsonLiteral* lit, size_t count) { |
1040 CxJsonValue** values = cxCalloc(cxDefaultAllocator, count, sizeof(CxJsonValue*)); |
1040 CxJsonValue** values = cxCallocDefault(count, sizeof(CxJsonValue*)); |
1041 if (values == NULL) return -1; |
1041 if (values == NULL) return -1; |
1042 for (size_t i = 0; i < count; i++) { |
1042 for (size_t i = 0; i < count; i++) { |
1043 values[i] = cxJsonCreateLiteral(arr->allocator, lit[i]); |
1043 values[i] = cxJsonCreateLiteral(arr->allocator, lit[i]); |
1044 if (values[i] == NULL) { json_arr_free_temp(values, count); return -1; } |
1044 if (values[i] == NULL) { json_arr_free_temp(values, count); return -1; } |
1045 } |
1045 } |
1046 int ret = cxJsonArrAddValues(arr, values, count); |
1046 int ret = cxJsonArrAddValues(arr, values, count); |
1047 cxFree(cxDefaultAllocator, values); |
1047 cxFreeDefault(values); |
1048 return ret; |
1048 return ret; |
1049 } |
1049 } |
1050 |
1050 |
1051 int cxJsonArrAddValues(CxJsonValue* arr, CxJsonValue* const* val, size_t count) { |
1051 int cxJsonArrAddValues(CxJsonValue* arr, CxJsonValue* const* val, size_t count) { |
1052 CxArrayReallocator value_realloc = cx_array_reallocator(arr->allocator, NULL); |
1052 CxArrayReallocator value_realloc = cx_array_reallocator(arr->allocator, NULL); |