From a73a3ab55f64568b906913c3ef18d3239e6a5f46 Mon Sep 17 00:00:00 2001 From: Andrew Potter Date: Tue, 15 Feb 2011 15:53:29 -0800 Subject: Initial libcurl support --- README | 2 +- config.mk | 2 +- src/imlib.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/README b/README index 7fa77ff..19aa353 100644 --- a/README +++ b/README @@ -10,7 +10,7 @@ Dependencies: * Imlib2 * libpng * libX11 - + * libcurl Recommended: diff --git a/config.mk b/config.mk index fafaeb6..ff522d7 100644 --- a/config.mk +++ b/config.mk @@ -31,4 +31,4 @@ xinerama_ld = -lXinerama CFLAGS += ${xinerama} -DPREFIX=\"${PREFIX}\" \ -DPACKAGE=\"${PACKAGE}\" -DVERSION=\"${VERSION}\" -LDLIBS += -lm -lpng -lX11 -lImlib2 -lgiblib ${xinerama_ld} +LDLIBS += -lm -lpng -lX11 -lImlib2 -lgiblib -lcurl ${xinerama_ld} diff --git a/src/imlib.c b/src/imlib.c index 0d2a1dd..303a29e 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -397,7 +397,7 @@ char *feh_http_load_image(char *url) break; case SAW_ONE_CM: - if (buf[i] == '\012') { + if (buf[i] == '\012') { body = SAW_ONE_CJ; } else { body = SAW_NONE; @@ -441,7 +441,58 @@ char *feh_http_load_image(char *url) close(sockno); fclose(fp); } else if (opt.libcurl_http) { - + CURL *curl; + CURLcode res; + char *sfn; + FILE *sfp; + int fd = -1; + char *ebuff; + char *ret; + + curl = curl_easy_init(); + if (!curl) { + weprintf("open url: libcurl initialization failure"); + return NULL; + } + + sfn = estrjoin("_", tmpname, "XXXXXX"); + free(tmpname); + fd = mkstemp(sfn); + if (fd != -1) { + sfp = fdopen(fd, "w+"); + if (sfp != NULL) { + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, sfp); + /* curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); */ + ebuff = emalloc(CURL_ERROR_SIZE); + curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, ebuff); + curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L); + + res = curl_easy_perform(curl); + curl_easy_cleanup(curl); + if (res != CURLE_OK) { + weprintf("open url: %s", ebuff); + unlink(sfn); + close(fd); + free(sfn); + sfn = NULL; + } + + free(ebuff); + fclose(sfp); + return sfn; + } else { + weprintf("open url: fdopen failed:"); + free(sfn); + unlink(sfn); + close(fd); + } + } else { + weprintf("open url: mkstemp failed:"); + free(sfn); + } + curl_easy_cleanup(curl); + return NULL; } else { int pid; int status; -- cgit v1.2.3