#ifndef CURLRES_ASYNCH
/* convert these functions if an asynch resolver isn't used */
-#define Curl_resolver_cancel(x)
+#define Curl_resolver_cancel(x) Curl_nop_stmt
#define Curl_resolver_is_resolved(x,y) CURLE_COULDNT_RESOLVE_HOST
#define Curl_resolver_wait_resolv(x,y) CURLE_COULDNT_RESOLVE_HOST
#define Curl_resolver_getsock(x,y,z) 0
#define Curl_resolver_duphandle(x,y) CURLE_OK
#define Curl_resolver_init(x) CURLE_OK
#define Curl_resolver_global_init() CURLE_OK
-#define Curl_resolver_global_cleanup()
-#define Curl_resolver_cleanup(x)
+#define Curl_resolver_global_cleanup() Curl_nop_stmt
+#define Curl_resolver_cleanup(x) Curl_nop_stmt
#endif
#ifdef CURLRES_ASYNCH
Curl_strerror(conn, SOCKERRNO));
}
#else
-#define nosigpipe(x,y)
+#define nosigpipe(x,y) Curl_nop_stmt
#endif
#ifdef USE_WINSOCK
* KIND, either express or implied.
*
***************************************************************************/
+#include "setup.h"
#include "nonblock.h" /* for curlx_nonblock(), formerly Curl_nonblock() */
*/
void Curl_sndbufset(curl_socket_t sockfd);
#else
-#define Curl_sndbufset(y)
+#define Curl_sndbufset(y) Curl_nop_stmt
#endif
void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd);
-#ifndef __CURL_CONTENT_ENCODING_H
-#define __CURL_CONTENT_ENCODING_H
+#ifndef HEADER_CURL_CONTENT_ENCODING_H
+#define HEADER_CURL_CONTENT_ENCODING_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
void Curl_unencode_cleanup(struct connectdata *conn);
#else
#define ALL_CONTENT_ENCODINGS "identity"
-#define Curl_unencode_cleanup(x)
+#define Curl_unencode_cleanup(x) Curl_nop_stmt
#endif
CURLcode Curl_unencode_deflate_write(struct connectdata *conn,
ssize_t nread);
-#endif
+#endif /* HEADER_CURL_CONTENT_ENCODING_H */
* KIND, either express or implied.
*
***************************************************************************/
+#include "setup.h"
#include <curl/curl.h>
#if defined(CURL_DISABLE_HTTP) || defined(CURL_DISABLE_COOKIES)
#define Curl_cookie_list(x) NULL
-#define Curl_cookie_loadfiles(x) do { } while (0)
+#define Curl_cookie_loadfiles(x) Curl_nop_stmt
#define Curl_cookie_init(x,y,z,w) NULL
-#define Curl_cookie_cleanup(x) do { } while (0)
-#define Curl_flush_cookies(x,y)
+#define Curl_cookie_cleanup(x) Curl_nop_stmt
+#define Curl_flush_cookies(x,y) Curl_nop_stmt
#else
void Curl_flush_cookies(struct SessionHandle *data, int cleanup);
void Curl_cookie_cleanup(struct CookieInfo *);
#if DEBUG_ME
# define DEBUG_OUT(x) x
#else
-# define DEBUG_OUT(x)
+# define DEBUG_OUT(x) Curl_nop_stmt
#endif
CURLcode Curl_input_ntlm(struct connectdata *conn,
#else
-#define Curl_http_ntlm_cleanup(a)
+#define Curl_http_ntlm_cleanup(a) Curl_nop_stmt
#endif
fprintf(stderr, "%02.2x", (unsigned int)*p++);
}
#else
-# define DEBUG_OUT(x)
+# define DEBUG_OUT(x) Curl_nop_stmt
#endif
#ifndef USE_WINDOWS_SSPI
#if DEBUG_ME
# define DEBUG_OUT(x) x
#else
-# define DEBUG_OUT(x)
+# define DEBUG_OUT(x) Curl_nop_stmt
+#endif
+
+/* Portable 'sclose_nolog' used only in child process instead of 'sclose'
+ to avoid fooling the socket leak detector */
+#if defined(HAVE_CLOSESOCKET)
+# define sclose_nolog(x) closesocket((x))
+#elif defined(HAVE_CLOSESOCKET_CAMEL)
+# define sclose_nolog(x) CloseSocket((x))
+#else
+# define sclose_nolog(x) close((x))
#endif
void Curl_ntlm_wb_cleanup(struct connectdata *conn)
*/
/* Don't use sclose in the child since it fools the socket leak detector */
- close(sockfds[0]);
+ sclose_nolog(sockfds[0]);
if(dup2(sockfds[1], STDIN_FILENO) == -1) {
error = ERRNO;
failf(conn->data, "Could not redirect child stdin. errno %d: %s",
NULL);
error = ERRNO;
- close(sockfds[1]);
+ sclose_nolog(sockfds[1]);
failf(conn->data, "Could not execl(). errno %d: %s",
error, Curl_strerror(conn, error));
exit(1);
* KIND, either express or implied.
*
***************************************************************************/
+#include "setup.h"
#ifdef USE_CYASSL
/* API setup for CyaSSL */
#define curlssl_init Curl_cyassl_init
-#define curlssl_cleanup()
+#define curlssl_cleanup() Curl_nop_stmt
#define curlssl_connect Curl_cyassl_connect
#define curlssl_connect_nonblocking Curl_cyassl_connect_nonblocking
#define curlssl_session_free(x) Curl_cyassl_session_free(x)
#endif
#ifdef CURL_DISABLE_VERBOSE_STRINGS
-#define ftp_pasv_verbose(a,b,c,d) do { } while(0)
+#define ftp_pasv_verbose(a,b,c,d) Curl_nop_stmt
#endif
/* Local API functions */
}
}
#else
-#define dump_addrinfo(x,y)
+#define dump_addrinfo(x,y) Curl_nop_stmt
#endif
/*
-#ifndef __HTTP_DIGEST_H
-#define __HTTP_DIGEST_H
+#ifndef HEADER_CURL_HTTP_DIGEST_H
+#define HEADER_CURL_HTTP_DIGEST_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* KIND, either express or implied.
*
***************************************************************************/
+#include "setup.h"
typedef enum {
CURLDIGEST_NONE, /* not a digest */
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
void Curl_digest_cleanup(struct SessionHandle *data);
#else
-#define Curl_digest_cleanup(x) do {} while(0)
+#define Curl_digest_cleanup(x) Curl_nop_stmt
#endif
-#endif
+#endif /* HEADER_CURL_HTTP_DIGEST_H */
conn->handler = &Curl_handler_imaps;
}
#else
-#define imap_to_imaps(x)
+#define imap_to_imaps(x) Curl_nop_stmt
#endif
/* for STARTTLS responses */
chan.application_data.value = NULL;
/* this loop will execute twice (once for service, once for host) */
- while(1) {
+ for(;;) {
/* this really shouldn't be repeated here, but can't help it */
if(service == srv_host) {
result = Curl_ftpsendf(conn, "AUTH GSSAPI");
#define LDAP_TRACE(x) do { \
_ldap_trace ("%u: ", __LINE__); \
_ldap_trace x; \
- } while(0)
+ } WHILE_FALSE
static void _ldap_trace (const char *fmt, ...);
#else
- #define LDAP_TRACE(x) ((void)0)
+ #define LDAP_TRACE(x) Curl_nop_stmt
#endif
#include "memdebug.h"
#ifndef HAVE_ASSERT_H
-# define assert(x) do { } while (0)
+# define assert(x) Curl_nop_stmt
#endif
/*
#ifdef CURL_MT_MALLOC_FILL
# define mt_malloc_fill(buf,len) memset((buf), CURL_MT_MALLOC_FILL, (len))
#else
-# define mt_malloc_fill(buf,len)
+# define mt_malloc_fill(buf,len) Curl_nop_stmt
#endif
#ifdef CURL_MT_FREE_FILL
# define mt_free_fill(buf,len) memset((buf), CURL_MT_FREE_FILL, (len))
#else
-# define mt_free_fill(buf,len)
+# define mt_free_fill(buf,len) Curl_nop_stmt
#endif
struct memdebug {
*/
#ifndef fake_sclose
-#define fake_sclose(x) do { } WHILE_FALSE
+#define fake_sclose(x) Curl_nop_stmt
#endif
/*
CURLcode Curl_convert_form(struct SessionHandle *data, struct FormData *form);
#else
#define Curl_convert_clone(a,b,c,d) ((void)a, CURLE_OK)
-#define Curl_convert_init(x)
-#define Curl_convert_setup(x)
-#define Curl_convert_close(x)
+#define Curl_convert_init(x) Curl_nop_stmt
+#define Curl_convert_setup(x) Curl_nop_stmt
+#define Curl_convert_close(x) Curl_nop_stmt
#define Curl_convert_to_network(a,b,c) ((void)a, CURLE_OK)
#define Curl_convert_from_network(a,b,c) ((void)a, CURLE_OK)
#define Curl_convert_from_utf8(a,b,c) ((void)a, CURLE_OK)
ptr->type = (_type); \
ptr->pValue = (_val); \
ptr->ulValueLen = (_len); \
-} while(0)
+} WHILE_FALSE
#define CERT_NewTempCertificate __CERT_NewTempCertificate
* KIND, either express or implied.
*
***************************************************************************/
+#include "setup.h"
#ifdef USE_NSS
/*
#define curlssl_connect Curl_nss_connect
/* NSS has its own session ID cache */
-#define curlssl_session_free(x)
+#define curlssl_session_free(x) Curl_nop_stmt
#define curlssl_close_all Curl_nss_close_all
#define curlssl_close Curl_nss_close
/* NSS has no shutdown function provided and thus always fail */
* KIND, either express or implied.
*
***************************************************************************/
+#include "setup.h"
#ifdef USE_POLARSSL
/* API setup for PolarSSL */
#define curlssl_init() (1)
-#define curlssl_cleanup()
+#define curlssl_cleanup() Curl_nop_stmt
#define curlssl_connect Curl_polarssl_connect
#define curlssl_session_free(x) Curl_polarssl_session_free(x)
#define curlssl_close_all Curl_polarssl_close_all
conn->handler = &Curl_handler_pop3s;
}
#else
-#define pop3_to_pop3s(x)
+#define pop3_to_pop3s(x) Curl_nop_stmt
#endif
/* for STARTTLS responses */
-#ifndef __QSSL_H
-#define __QSSL_H
+#ifndef HEADER_CURL_QSSL_H
+#define HEADER_CURL_QSSL_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* KIND, either express or implied.
*
***************************************************************************/
+#include "setup.h"
/*
* This header should only be needed to get included by sslgen.c and qssl.c
#define curlssl_connect Curl_qsossl_connect
/* No session handling for QsoSSL */
-#define curlssl_session_free(x)
+#define curlssl_session_free(x) Curl_nop_stmt
#define curlssl_close_all Curl_qsossl_close_all
#define curlssl_close Curl_qsossl_close
#define curlssl_shutdown(x,y) Curl_qsossl_shutdown(x,y)
#define curlssl_check_cxn(x) Curl_qsossl_check_cxn(x)
#define curlssl_data_pending(x,y) 0
#endif /* USE_QSOSSL */
-#endif
+
+#endif /* HEADER_CURL_QSSL_H */
/* Winsock and TPF sockets are not in range [0..FD_SETSIZE-1] */
#if defined(USE_WINSOCK) || defined(TPF)
-#define VERIFY_SOCK(x) do { } WHILE_FALSE
+#define VERIFY_SOCK(x) Curl_nop_stmt
#else
#define VALID_SOCK(s) (((s) >= 0) && ((s) < FD_SETSIZE))
#define VERIFY_SOCK(x) do { \
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
#if defined(CURL_DISABLE_VERBOSE_STRINGS)
#if defined(HAVE_VARIADIC_MACROS_C99)
-#define infof(...) do { } while (0)
+#define infof(...) Curl_nop_stmt
#elif defined(HAVE_VARIADIC_MACROS_GCC)
-#define infof(x...) do { } while (0)
+#define infof(x...) Curl_nop_stmt
#else
#define infof (void)
#endif
* Include macros and defines that should only be processed once.
*/
-#ifndef __SETUP_ONCE_H
+#ifndef HEADER_CURL_SETUP_ONCE_H
#include "setup_once.h"
#endif
-#ifndef __SETUP_ONCE_H
-#define __SETUP_ONCE_H
+#ifndef HEADER_CURL_SETUP_ONCE_H
+#define HEADER_CURL_SETUP_ONCE_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
#endif
+/*
+ * Definition of our NOP statement Object-like macro
+ */
+
+#define Curl_nop_stmt do { } WHILE_FALSE
+
+
/*
* Typedef to 'int' if sig_atomic_t is not an available 'typedefed' type.
*/
#ifdef DEBUGBUILD
#define DEBUGF(x) x
#else
-#define DEBUGF(x) do { } WHILE_FALSE
+#define DEBUGF(x) Curl_nop_stmt
#endif
#if defined(DEBUGBUILD) && defined(HAVE_ASSERT_H)
#define DEBUGASSERT(x) assert(x)
#else
-#define DEBUGASSERT(x) do { } WHILE_FALSE
+#define DEBUGASSERT(x) Curl_nop_stmt
#endif
# endif
#endif
-#endif /* __SETUP_ONCE_H */
-
+#endif /* HEADER_CURL_SETUP_ONCE_H */
conn->handler = &Curl_handler_smtps;
}
#else
-#define smtp_to_smtps(x)
+#define smtp_to_smtps(x) Curl_nop_stmt
#endif
/* for STARTTLS responses */
-#ifndef __SPLAY_H
-#define __SPLAY_H
+#ifndef HEADER_CURL_SPLAY_H
+#define HEADER_CURL_SPLAY_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1997 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1997 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* KIND, either express or implied.
*
***************************************************************************/
+#include "setup.h"
struct Curl_tree {
struct Curl_tree *smaller; /* smaller node */
#ifdef DEBUGBUILD
void Curl_splayprint(struct Curl_tree * t, int d, char output);
#else
-#define Curl_splayprint(x,y,z)
+#define Curl_splayprint(x,y,z) Curl_nop_stmt
#endif
-#endif
+#endif /* HEADER_CURL_SPLAY_H */
}
#else
/* no libssh2 directional support so we simply don't know */
-#define ssh_block2waitfor(x,y)
+#define ssh_block2waitfor(x,y) Curl_nop_stmt
#endif
/* called repeatedly until done from multi.c */
-#ifndef __SSLGEN_H
-#define __SSLGEN_H
+#ifndef HEADER_CURL_SSLGEN_H
+#define HEADER_CURL_SSLGEN_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* KIND, either express or implied.
*
***************************************************************************/
+#include "setup.h"
bool Curl_ssl_config_matches(struct ssl_config_data* data,
struct ssl_config_data* needle);
#else
/* When SSL support is not present, just define away these function calls */
#define Curl_ssl_init() 1
-#define Curl_ssl_cleanup() do { } while (0)
+#define Curl_ssl_cleanup() Curl_nop_stmt
#define Curl_ssl_connect(x,y) CURLE_NOT_BUILT_IN
-#define Curl_ssl_close_all(x)
-#define Curl_ssl_close(x,y)
+#define Curl_ssl_close_all(x) Curl_nop_stmt
+#define Curl_ssl_close(x,y) Curl_nop_stmt
#define Curl_ssl_shutdown(x,y) CURLE_NOT_BUILT_IN
#define Curl_ssl_set_engine(x,y) CURLE_NOT_BUILT_IN
#define Curl_ssl_set_engine_default(x) CURLE_NOT_BUILT_IN
#define Curl_ssl_version(x,y) 0
#define Curl_ssl_data_pending(x,y) 0
#define Curl_ssl_check_cxn(x) 0
-#define Curl_ssl_free_certinfo(x)
+#define Curl_ssl_free_certinfo(x) Curl_nop_stmt
#define Curl_ssl_connect_nonblocking(x,y,z) CURLE_NOT_BUILT_IN
#endif
-#endif /* USE_SSL */
+#endif /* HEADER_CURL_SSLGEN_H */
/* 0.9.6 didn't have X509_STORE_set_flags() */
#define HAVE_X509_STORE_SET_FLAGS 1
#else
-#define X509_STORE_set_flags(x,y)
+#define X509_STORE_set_flags(x,y) Curl_nop_stmt
#endif
/*
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
# define use_sni(x) sni = (x)
#else
-# define use_sni(x) do { } while (0)
+# define use_sni(x) Curl_nop_stmt
#endif
static CURLcode
pubkey_show(data, _num, #_type, #_name, (unsigned char*)bufp, len); \
} \
} \
-} while(0)
+} WHILE_FALSE
static int X509V3_ext(struct SessionHandle *data,
int certnum,
#define CURL_SB_LEN(x) (x->subend - x->subpointer)
#ifdef CURL_DISABLE_VERBOSE_STRINGS
-#define printoption(a,b,c,d) do { } while(0)
+#define printoption(a,b,c,d) Curl_nop_stmt
#endif
#ifdef USE_WINSOCK
* KIND, either express or implied.
*
***************************************************************************/
+#include "setup.h"
/*
* Prototypes for library-wide functions provided by url.c
CURLcode Curl_connected_proxy(struct connectdata *conn);
#ifdef CURL_DISABLE_VERBOSE_STRINGS
-#define Curl_verboseconnect(x) do { } while (0)
+#define Curl_verboseconnect(x) Curl_nop_stmt
#else
void Curl_verboseconnect(struct connectdata *conn);
#endif
}
}
#else
-# define memory_tracking_init()
+# define memory_tracking_init() Curl_nop_stmt
#endif
static int
* Include macros and defines that should only be processed once.
*/
-#ifndef __SETUP_ONCE_H
+#ifndef HEADER_CURL_SETUP_ONCE_H
#include "setup_once.h"
#endif
}
}
#else
-# define memory_tracking_init()
+# define memory_tracking_init() Curl_nop_stmt
#endif
int main(int argc, char **argv)
}
#else
-#define setupcallbacks(x)
+#define setupcallbacks(x) Curl_nop_stmt
#endif
#ifdef DEBUG_GETPART
#define show(x) printf x
#else
-#define show(x)
+#define show(x) Curl_nop_stmt
#endif
#if defined(_MSC_VER) && defined(_DLL)
fprintf(stderr, "%s:%d test failed: '%s'\n", \
__FILE__, __LINE__, msg); \
unitfail++; \
- } while(0)
+ } WHILE_FALSE
/* The abort macros mark the current test step as failed, and exit the test */
__FILE__, __LINE__, msg); \
unitfail++; \
goto unit_test_abort; \
- } while(0)
+ } WHILE_FALSE