diff options
-rw-r--r-- | anzeige.c | 5 | ||||
-rw-r--r-- | input_gadgets.c | 21 | ||||
-rw-r--r-- | input_gadgets.h | 2 |
3 files changed, 22 insertions, 6 deletions
@@ -20,6 +20,7 @@ int main(int argc, char **argv) pthread_t thread_id; t_display_data display_data; int ret_val; + char *text_buffer; // Set up gpi pointer for direct register access ret_val = multiplexer_setup_root(); @@ -29,9 +30,11 @@ int main(int argc, char **argv) // Drop root privileges drop_privileges(); - ret_val = gadgets_retrieve_temperature(); + ret_val = gadgets_retrieve_temperature(&text_buffer); if (ret_val) exit(ret_val); + printf("<<%s>>", text_buffer); + free(text_buffer); return 0; /************************************************************************\ 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; } diff --git a/input_gadgets.h b/input_gadgets.h index 8b18a89..9aef167 100644 --- a/input_gadgets.h +++ b/input_gadgets.h @@ -3,4 +3,4 @@ struct MemoryStruct { size_t size; }; -int gadgets_retrieve_temperature(); +int gadgets_retrieve_temperature(char **output); |