summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--anzeige.c5
-rw-r--r--input_gadgets.c21
-rw-r--r--input_gadgets.h2
3 files changed, 22 insertions, 6 deletions
diff --git a/anzeige.c b/anzeige.c
index bf4cacd..7e50547 100644
--- a/anzeige.c
+++ b/anzeige.c
@@ -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);