From d93623e8562e0af1306412267cfcc1dac0bae5bb Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Tue, 23 Oct 2018 08:43:53 +0200 Subject: input_gadgets: return values in char* --- input_gadgets.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'input_gadgets.c') diff --git a/input_gadgets.c b/input_gadgets.c index 3bb7113..7aeb09a 100644 --- a/input_gadgets.c +++ b/input_gadgets.c @@ -28,7 +28,7 @@ WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) return realsize; } -int gadgets_retrieve_temperature() +int gadgets_retrieve_temperature(char **output) { CURL *curl_handle; CURLcode res; @@ -43,6 +43,7 @@ int gadgets_retrieve_temperature() curl_handle = curl_easy_init(); if (!curl_handle) { perror("Failed to init curl"); + free(chunk.memory); return EXIT_FAILURE; } curl_easy_setopt(curl_handle, CURLOPT_URL, "https://wetter.mb.fh-jena.de/station/datenbank/php_giese/online.php"); @@ -54,6 +55,7 @@ int gadgets_retrieve_temperature() curl_easy_cleanup(curl_handle); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); + free(chunk.memory); return EXIT_FAILURE; } @@ -62,6 +64,7 @@ int gadgets_retrieve_temperature() if (regcomp(&re, temperatur_regex, REG_EXTENDED|REG_NEWLINE) != 0) { fprintf(stderr, "Failed to compile regex '%s'\n", temperatur_regex); + free(chunk.memory); return EXIT_FAILURE; } if (ret_val = regexec(&re, chunk.memory, 2, rm, 0)) @@ -69,11 +72,21 @@ int gadgets_retrieve_temperature() char *reg_err; reg_err = malloc(1024); regerror(ret_val, &re, reg_err, 1024); - printf("%d %s\n",ret_val,reg_err); + fprintf(stderr, "%d %s\n",ret_val,reg_err); regfree(&re); - return -1; + free(chunk.memory); + return EXIT_FAILURE; } regfree(&re); - printf("Text: <<%.*s>>\n", (int)(rm[1].rm_eo - rm[1].rm_so), chunk.memory + rm[1].rm_so); + output[0] = malloc((int)(rm[1].rm_eo - rm[1].rm_so + 1)); + if (output[0] == NULL) { + fprintf(stderr, "malloc failed allocating %d bytes\n", (int)(rm[1].rm_eo - rm[1].rm_so + 1)); + free(chunk.memory); + return EXIT_FAILURE; + } + printf("allocated %d bytes\n", (int)(rm[1].rm_eo - rm[1].rm_so + 1)); + memmove(output[0], chunk.memory + rm[1].rm_so, (int)(rm[1].rm_eo - rm[1].rm_so)); + output[0][(int)(rm[1].rm_eo - rm[1].rm_so)] = '\0'; + free(chunk.memory); return 0; } -- cgit v1.2.3-54-g00ecf