Skip to content
Snippets Groups Projects
Commit 0030fbd3 authored by Nick Zitzmann's avatar Nick Zitzmann
Browse files

Merge branch 'master' of https://github.com/bagder/curl

parents f3052c8a 7d80ed64
No related branches found
No related tags found
No related merge requests found
......@@ -155,12 +155,12 @@ while test $# -gt 0; do
;;
--static-libs)
if test "X@ENABLE_STATIC@" != "Xno" ; then
echo @libdir@/libcurl.@libext@ @LDFLAGS@ @LIBCURL_LIBS@
else
echo "curl was built with static libraries disabled" >&2
exit 1
fi
if test "X@ENABLE_STATIC@" != "Xno" ; then
echo @libdir@/libcurl.@libext@ @LDFLAGS@ @LIBCURL_LIBS@
else
echo "curl was built with static libraries disabled" >&2
exit 1
fi
;;
--configure)
......
......@@ -3,6 +3,14 @@ join in and help us correct one or more of these! Also be sure to check the
changelog of the current development status, as one or more of these problems
may have been fixed since this was written!
83. curl is unable to load non-default openssl engines, because openssl isn't
initialized properly. This seems to require OpenSSL_config() or
CONF_modules_load_file() to be used by libcurl but the first seems to not
work and we've gotten not reports from tests with the latter. Possibly we
need to discuss with OpenSSL developers how this is supposed to be done. We
need users with actual external openssl engines for testing to work on this.
http://curl.haxx.se/bug/view.cgi?id=1208
82. When building with the Windows Borland compiler, it fails because the
"tlib" tool doesn't support hyphens (minus signs) in file names and we have
such in the build.
......
......@@ -50,6 +50,11 @@
#include <sys/param.h>
#endif
#if defined(HAVE_SIGNAL_H) && defined(HAVE_SIGACTION) && defined(USE_OPENSSL)
#define SIGPIPE_IGNORE 1
#include <signal.h>
#endif
#include "strequal.h"
#include "urldata.h"
#include <curl/curl.h>
......@@ -81,6 +86,49 @@
/* The last #include file should be: */
#include "memdebug.h"
#ifdef SIGPIPE_IGNORE
#define SIGPIPE_VARIABLE(x) struct sigaction x
/*
* sigpipe_ignore() makes sure we ignore SIGPIPE while running libcurl
* internals, and then sigpipe_restore() will restore the situation when we
* return from libcurl again.
*/
static void sigpipe_ignore(struct SessionHandle *data,
struct sigaction *pipe)
{
if(!data->set.no_signal) {
struct sigaction action;
/* first, extract the existing situation */
sigaction(SIGPIPE, NULL, pipe);
action = *pipe;
/* ignore this signal */
action.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &action, NULL);
}
}
/*
* sigpipe_restore() puts back the outside world's opinion of signal handler
* and SIGPIPE handling. It MUST only be called after a corresponding
* sigpipe_ignore() was used.
*/
static void sigpipe_restore(struct SessionHandle *data,
struct sigaction *pipe)
{
if(!data->set.no_signal) {
/* restore the outside state */
sigaction(SIGPIPE, pipe, NULL);
}
}
#else
/* for systems without sigaction */
#define sigpipe_ignore(x,y)
#define sigpipe_restore(x,y)
#define SIGPIPE_VARIABLE(x)
#endif
/* win32_cleanup() is for win32 socket cleanup functionality, the opposite
of win32_init() */
static void win32_cleanup(void)
......@@ -423,6 +471,7 @@ CURLcode curl_easy_perform(CURL *easy)
int without_fds = 0; /* count number of consecutive returns from
curl_multi_wait() without any filedescriptors */
struct timeval before;
SIGPIPE_VARIABLE(pipe);
if(!easy)
return CURLE_BAD_FUNCTION_ARGUMENT;
......@@ -455,6 +504,8 @@ CURLcode curl_easy_perform(CURL *easy)
return CURLE_FAILED_INIT;
}
sigpipe_ignore(data, &pipe);
/* assign this after curl_multi_add_handle() since that function checks for
it and rejects this handle otherwise */
data->multi = multi;
......@@ -511,6 +562,8 @@ CURLcode curl_easy_perform(CURL *easy)
a failure here, room for future improvement! */
(void)curl_multi_remove_handle(multi, easy);
sigpipe_restore(data, &pipe);
/* The multi handle is kept alive, owned by the easy handle */
return code;
}
......@@ -522,11 +575,14 @@ CURLcode curl_easy_perform(CURL *easy)
void curl_easy_cleanup(CURL *curl)
{
struct SessionHandle *data = (struct SessionHandle *)curl;
SIGPIPE_VARIABLE(pipe);
if(!data)
return;
sigpipe_ignore(data, &pipe);
Curl_close(data);
sigpipe_restore(data, &pipe);
}
/*
......
......@@ -71,7 +71,7 @@ Host: [1234:1234:1234::4ce]:%HTTPPORT
Proxy-Connection: Keep-Alive
GET /wanted/page/1230 HTTP/1.1
Host: [1234:1234:1234::4ce]:8990
Host: [1234:1234:1234::4ce]:%HTTPPORT
Accept: */*
</protocol>
......
......@@ -20,7 +20,7 @@ unittest
curl_easy_escape and curl_easy_unescape
</name>
<tool>
unit1310
unit1396
</tool>
</client>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment