diff options
author | Antony Kellermann | 2018-07-25 17:49:44 -0400 |
---|---|---|
committer | Antony Kellermann | 2018-07-25 17:49:44 -0400 |
commit | 8e6ef6d757df7f361e1a5c2ad1d1ccf18616bc01 (patch) | |
tree | e5bde06f15f3729e5a9cce54845223cef2d9531c | |
parent | 1a3686a43418c4739e7d1d7e9c23f113baf9e5da (diff) | |
download | aur-8e6ef6d757df7f361e1a5c2ad1d1ccf18616bc01.tar.gz |
Replaced manual info_array allocs with new function
-rw-r--r-- | api.c | 31 | ||||
-rw-r--r-- | api.h | 7 | ||||
-rw-r--r-- | portfolio.c | 11 |
3 files changed, 29 insertions, 20 deletions
@@ -40,6 +40,22 @@ Info_Array* api_info_array_init(void) { return pInfo_Array; } +Info_Array* api_info_array_init_from_length(size_t length) { + if (length == 0) + return api_info_array_init(); + + Info_Array* pInfo_Array = api_info_array_init(); + pInfo_Array->length = length; + pInfo_Array->array = malloc(sizeof(Info*) * length); + pointer_alloc_check(pInfo_Array->array); + for (size_t i = 0; i < length; i++) + pInfo_Array->array[i] = api_info_init(); + + pInfo_Array->totals = api_info_init(); + strcpy(pInfo_Array->totals->symbol, "TOTALS"); + return pInfo_Array; +} + size_t api_string_writefunc(void* ptr, size_t size, size_t nmemb, String* pString) { size_t new_len = pString->len + size * nmemb; pString->data = realloc(pString->data, new_len + 1); @@ -339,13 +355,9 @@ void* iex_store_peers(void* vpInfo) { if (len > MAX_PEERS) len = MAX_PEERS; - symbol_info->peers = api_info_array_init(); - symbol_info->peers->length = len; - symbol_info->peers->array = malloc(sizeof(Info*) * len); - pointer_alloc_check(symbol_info->peers->array); + symbol_info->peers = api_info_array_init_from_length(len); pthread_t threads[len]; for (size_t i = 0; i < len; i++) { - symbol_info->peers->array[i] = api_info_init(); strcpy(symbol_info->peers->array[i]->symbol, json_object_get_string( json_object_array_get_idx(jobj, (size_t) i))); if (pthread_create(&threads[i], NULL, api_store_check_info, @@ -591,18 +603,13 @@ void info_array_store_totals(Info_Array* pInfo_Array) { } Info_Array* iex_get_valid_symbols(void) { - char* iex_api_string = "https://api.iextrading.com/1.0/ref-data/symbols"; - String* pString = api_curl_data(iex_api_string); + String* pString = api_curl_data("https://api.iextrading.com/1.0/ref-data/symbols"); if (pString == NULL) return NULL; Json* jobj = json_tokener_parse(pString->data), * idx; - Info_Array* list = api_info_array_init(); - list->length = json_object_array_length(jobj); - list->array = malloc(sizeof(Info*) * list->length); - pointer_alloc_check(list->array); + Info_Array* list = api_info_array_init_from_length(json_object_array_length(jobj)); for (size_t i = 0; i < list->length; i++) { - list->array[i] = api_info_init(); idx = json_object_array_get_idx(jobj, i); strcpy(list->array[i]->symbol, json_object_get_string(json_object_object_get(idx, "symbol"))); strcpy(list->array[i]->name, json_object_get_string(json_object_object_get(idx, "name"))); @@ -149,6 +149,13 @@ Info* api_info_init(void); Info_Array* api_info_array_init(void); /** + * Allocates an Info_Array struct with allocated length. + * @param length number of Info pointers to allocate + * @return Info_Array* + */ +Info_Array* api_info_array_init_from_length(size_t length); + +/** * writefunction for cURL HTTP GET/POST * stolen from a nice man on stackoverflow */ diff --git a/portfolio.c b/portfolio.c index 51959b95be3d..caa9a31783b4 100644 --- a/portfolio.c +++ b/portfolio.c @@ -144,20 +144,15 @@ Info_Array* portfolio_info_array_init_from_portfolio_string(String* pString) { RETNULL_MSG("Your portfolio is empty.") Json* jobj = json_tokener_parse(pString->data); - if (json_object_array_length(jobj) == 0) { // If empty array + size_t length = json_object_array_length(jobj); + if (length == 0) { // If empty array json_object_put(jobj); RETNULL_MSG("Your portfolio is empty."); } - Info_Array* portfolio_data = api_info_array_init(); - portfolio_data->length = json_object_array_length(jobj); - portfolio_data->array = malloc(sizeof(Info*) * portfolio_data->length); - pointer_alloc_check(portfolio_data->array); - portfolio_data->totals = api_info_init(); - strcpy(portfolio_data->totals->symbol, "TOTALS"); + Info_Array* portfolio_data = api_info_array_init_from_length(length); portfolio_data->totals->total_spent = 0; for (size_t i = 0; i < portfolio_data->length; i++) { - portfolio_data->array[i] = api_info_init(); strcpy(portfolio_data->array[i]->symbol, json_object_get_string(json_object_object_get(json_object_array_get_idx(jobj, i), "Symbol"))); |