aboutsummarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntony Kellermann2018-07-25 17:49:44 -0400
committerAntony Kellermann2018-07-25 17:49:44 -0400
commit8e6ef6d757df7f361e1a5c2ad1d1ccf18616bc01 (patch)
treee5bde06f15f3729e5a9cce54845223cef2d9531c
parent1a3686a43418c4739e7d1d7e9c23f113baf9e5da (diff)
downloadaur-8e6ef6d757df7f361e1a5c2ad1d1ccf18616bc01.tar.gz
Replaced manual info_array allocs with new function
-rw-r--r--api.c31
-rw-r--r--api.h7
-rw-r--r--portfolio.c11
3 files changed, 29 insertions, 20 deletions
diff --git a/api.c b/api.c
index 65f5bd990c29..85b3f088111c 100644
--- a/api.c
+++ b/api.c
@@ -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")));
diff --git a/api.h b/api.h
index 274f718ba867..7f154f0e6727 100644
--- a/api.h
+++ b/api.h
@@ -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")));