summaryrefslogtreecommitdiff
path: root/input_gadgets.c
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-10-23 08:43:53 +0200
committerErich Eckner <git@eckner.net>2018-10-23 08:43:53 +0200
commitd93623e8562e0af1306412267cfcc1dac0bae5bb (patch)
treec268a9e5470777eb467e3f95305920494c296142 /input_gadgets.c
parentadd9011e40b097701762c9fc4282d8b305d7e5c2 (diff)
downloadanzeige-d93623e8562e0af1306412267cfcc1dac0bae5bb.tar.xz
input_gadgets: return values in char*
Diffstat (limited to 'input_gadgets.c')
-rw-r--r--input_gadgets.c21
1 files changed, 17 insertions, 4 deletions
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;
}