fix transmission stall issue with upgraded TLS connections reported by Nguyen Xuan Viet on the mailinglist

This commit is contained in:
Christian Grothoff
2020-09-27 22:12:13 +02:00
parent 1d9f940dca
commit beb7fa828c
49 changed files with 528 additions and 331 deletions
+6
View File
@@ -1,3 +1,9 @@
Sun 27 Sep 2020 10:08:03 PM CEST
Fixed incorrect triggering of epoll edge polling for
"upgraded" TLS connections. Fixed a few cases where
gnutls_record_uncork() return value was still ignored,
possibly causing buffer to not be flushed correctly. -CG
Sat 26 Sep 2020 08:18:02 PM CEST Sat 26 Sep 2020 08:18:02 PM CEST
Make MHD_USE_NO_LISTEN_SOCKET work in conjunction with Make MHD_USE_NO_LISTEN_SOCKET work in conjunction with
MHD internal threads. -CG/DE MHD internal threads. -CG/DE
+3 -3
View File
@@ -102,10 +102,10 @@ main (int argc, char *const *argv)
return 1; return 1;
} }
d = MHD_start_daemon (/* MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */ d = MHD_start_daemon (/* MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */
/* MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */ /* MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */
/* MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | MHD_USE_POLL, */ /* MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | MHD_USE_POLL, */
MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD
| MHD_USE_ERROR_LOG | MHD_USE_POLL, // | MHD_USE_ITC, | MHD_USE_ERROR_LOG | MHD_USE_POLL, // | MHD_USE_ITC,
/* MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */ /* MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */
atoi (argv[1]), atoi (argv[1]),
NULL, NULL, &ahc_echo, PAGE, NULL, NULL, &ahc_echo, PAGE,
+3 -3
View File
@@ -283,11 +283,11 @@ list_directory (struct ResponseDataContext *rdc,
snprintf (fullname, sizeof (fullname), snprintf (fullname, sizeof (fullname),
"%s/%s", "%s/%s",
dirname, de->d_name)) dirname, de->d_name))
continue; /* ugh, file too long? how can this be!? */ continue; /* ugh, file too long? how can this be!? */
if (0 != stat (fullname, &sbuf)) if (0 != stat (fullname, &sbuf))
continue; /* ugh, failed to 'stat' */ continue; /* ugh, failed to 'stat' */
if (! S_ISREG (sbuf.st_mode)) if (! S_ISREG (sbuf.st_mode))
continue; /* not a regular file, skip */ continue; /* not a regular file, skip */
if (rdc->off + 1024 > rdc->buf_len) if (rdc->off + 1024 > rdc->buf_len)
{ {
void *r; void *r;
+3 -3
View File
@@ -286,11 +286,11 @@ list_directory (struct ResponseDataContext *rdc,
snprintf (fullname, sizeof (fullname), snprintf (fullname, sizeof (fullname),
"%s/%s", "%s/%s",
dirname, de->d_name)) dirname, de->d_name))
continue; /* ugh, file too long? how can this be!? */ continue; /* ugh, file too long? how can this be!? */
if (0 != stat (fullname, &sbuf)) if (0 != stat (fullname, &sbuf))
continue; /* ugh, failed to 'stat' */ continue; /* ugh, failed to 'stat' */
if (! S_ISREG (sbuf.st_mode)) if (! S_ISREG (sbuf.st_mode))
continue; /* not a regular file, skip */ continue; /* not a regular file, skip */
if (rdc->off + 1024 > rdc->buf_len) if (rdc->off + 1024 > rdc->buf_len)
{ {
void *r; void *r;
+2 -2
View File
@@ -69,13 +69,13 @@ ahc_echo (void *cls,
*ptr = &aptr; *ptr = &aptr;
return MHD_YES; return MHD_YES;
} }
*ptr = NULL; /* reset when done */ *ptr = NULL; /* reset when done */
/* WARNING: direct usage of url as filename is for example only! /* WARNING: direct usage of url as filename is for example only!
* NEVER pass received data directly as parameter to file manipulation * NEVER pass received data directly as parameter to file manipulation
* functions. Always check validity of data before using. * functions. Always check validity of data before using.
*/ */
if (NULL != strstr (url, "../")) /* Very simplified check! */ if (NULL != strstr (url, "../")) /* Very simplified check! */
fd = -1; /* Do not allow usage of parent directories. */ fd = -1; /* Do not allow usage of parent directories. */
else else
fd = open (url + 1, O_RDONLY); fd = open (url + 1, O_RDONLY);
if (-1 != fd) if (-1 != fd)
+34 -34
View File
@@ -36,40 +36,40 @@
"<title>WebSocket chat</title>\n" \ "<title>WebSocket chat</title>\n" \
"<script>\n" \ "<script>\n" \
"document.addEventListener('DOMContentLoaded', function() {\n" \ "document.addEventListener('DOMContentLoaded', function() {\n" \
" const ws = new WebSocket('ws://' + window.location.host);\n" \ " const ws = new WebSocket('ws:// ' + window.location.host);\n" \
" const btn = document.getElementById('send');\n" \ // " const btn = document.getElementById('send');\n" \
" const msg = document.getElementById('msg');\n" \ // " const msg = document.getElementById('msg');\n" \
" const log = document.getElementById('log');\n" \ // " const log = document.getElementById('log');\n" \
" ws.onopen = function() {\n" \ // " ws.onopen = function() {\n" \
" log.value += 'Connected\\n';\n" \ // " log.value += 'Connected\\n';\n" \
" };\n" \ // " };\n" \
" ws.onclose = function() {\n" \ // " ws.onclose = function() {\n" \
" log.value += 'Disconnected\\n';\n" \ // " log.value += 'Disconnected\\n';\n" \
" };\n" \ // " };\n" \
" ws.onmessage = function(ev) {\n" \ // " ws.onmessage = function(ev) {\n" \
" log.value += ev.data + '\\n';\n" \ // " log.value += ev.data + '\\n';\n" \
" };\n" \ // " };\n" \
" btn.onclick = function() {\n" \ // " btn.onclick = function() {\n" \
" log.value += '<You>: ' + msg.value + '\\n';\n" \ // " log.value += '<You>: ' + msg.value + '\\n';\n" \
" ws.send(msg.value);\n" \ // " ws.send(msg.value);\n" \
" };\n" \ // " };\n" \
" msg.onkeyup = function(ev) {\n" \ // " msg.onkeyup = function(ev) {\n" \
" if (ev.keyCode === 13) {\n" \ // " if (ev.keyCode === 13) {\n" \
" ev.preventDefault();\n" \ // " ev.preventDefault();\n" \
" ev.stopPropagation();\n" \ // " ev.stopPropagation();\n" \
" btn.click();\n" \ // " btn.click();\n" \
" msg.value = '';\n" \ // " msg.value = '';\n" \
" }\n" \ // " }\n" \
" };\n" \ // " };\n" \
"});\n" \ // "});\n" \
"</script>\n" \ // "</script>\n" \
"</head>\n" \ // "</head>\n" \
"<body>\n" \ // "<body>\n" \
"<input type='text' id='msg' autofocus/>\n" \ // "<input type='text' id='msg' autofocus/>\n" \
"<input type='button' id='send' value='Send' /><br /><br />\n" \ // "<input type='button' id='send' value='Send' /><br /><br />\n" \
"<textarea id='log' rows='20' cols='28'></textarea>\n" \ // "<textarea id='log' rows='20' cols='28'></textarea>\n" \
"</body>\n" \ // "</body>\n" \
"</html>" // "</html>"
#define BAD_REQUEST_PAGE \ #define BAD_REQUEST_PAGE \
"<html>\n" \ "<html>\n" \
"<head>\n" \ "<head>\n" \
+1 -1
View File
@@ -132,7 +132,7 @@ typedef intptr_t ssize_t;
* Current version of the library. * Current version of the library.
* 0x01093001 = 1.9.30-1. * 0x01093001 = 1.9.30-1.
*/ */
#define MHD_VERSION 0x00097104 #define MHD_VERSION 0x00097105
/** /**
* Operational results from MHD calls. * Operational results from MHD calls.
+3 -3
View File
@@ -188,8 +188,8 @@ thread_main_handle_connection (void *data)
} }
#endif /* HAVE_POLL */ #endif /* HAVE_POLL */
MHD_itc_clear_ (daemon->itc); MHD_itc_clear_ (daemon->itc);
continue; /* Check again for resume. */ continue; /* Check again for resume. */
} /* End of "suspended" branch. */ } /* End of "suspended" branch. */
if (was_suspended) if (was_suspended)
{ {
@@ -1047,7 +1047,7 @@ MHD_accept_connection_ (struct MHD_Daemon *daemon)
/* This could be a common occurrence with multiple worker threads */ /* This could be a common occurrence with multiple worker threads */
if (MHD_SCKT_ERR_IS_ (err, if (MHD_SCKT_ERR_IS_ (err,
MHD_SCKT_EINVAL_)) MHD_SCKT_EINVAL_))
return MHD_SC_DAEMON_ALREADY_SHUTDOWN; /* can happen during shutdown, let's hope this is the cause... */ return MHD_SC_DAEMON_ALREADY_SHUTDOWN; /* can happen during shutdown, let's hope this is the cause... */
if (MHD_SCKT_ERR_IS_DISCNN_BEFORE_ACCEPT_ (err)) if (MHD_SCKT_ERR_IS_DISCNN_BEFORE_ACCEPT_ (err))
return MHD_SC_ACCEPT_FAST_DISCONNECT; /* do not print error if client just disconnected early */ return MHD_SC_ACCEPT_FAST_DISCONNECT; /* do not print error if client just disconnected early */
if (MHD_SCKT_ERR_IS_EAGAIN_ (err) ) if (MHD_SCKT_ERR_IS_EAGAIN_ (err) )
+2 -2
View File
@@ -90,10 +90,10 @@ MHD_update_last_activity_ (struct MHD_Connection *connection)
struct MHD_Daemon *daemon = connection->daemon; struct MHD_Daemon *daemon = connection->daemon;
if (0 == connection->connection_timeout) if (0 == connection->connection_timeout)
return; /* Skip update of activity for connections return; /* Skip update of activity for connections
without timeout timer. */ without timeout timer. */
if (connection->suspended) if (connection->suspended)
return; /* no activity on suspended connections */ return; /* no activity on suspended connections */
connection->last_activity = MHD_monotonic_sec_counter (); connection->last_activity = MHD_monotonic_sec_counter ();
if (MHD_TM_THREAD_PER_CONNECTION == daemon->threading_mode) if (MHD_TM_THREAD_PER_CONNECTION == daemon->threading_mode)
+2 -2
View File
@@ -38,10 +38,10 @@ MHD_connection_update_last_activity_ (struct MHD_Connection *connection)
struct MHD_Daemon *daemon = connection->daemon; struct MHD_Daemon *daemon = connection->daemon;
if (0 == connection->connection_timeout) if (0 == connection->connection_timeout)
return; /* Skip update of activity for connections return; /* Skip update of activity for connections
without timeout timer. */ without timeout timer. */
if (connection->suspended) if (connection->suspended)
return; /* no activity on suspended connections */ return; /* no activity on suspended connections */
connection->last_activity = MHD_monotonic_sec_counter (); connection->last_activity = MHD_monotonic_sec_counter ();
if (MHD_TM_THREAD_PER_CONNECTION == daemon->threading_mode) if (MHD_TM_THREAD_PER_CONNECTION == daemon->threading_mode)
+2 -2
View File
@@ -294,9 +294,9 @@ MHD_daemon_poll_all_ (struct MHD_Daemon *daemon,
prev = pos->prev; prev = pos->prev;
/* first, sanity checks */ /* first, sanity checks */
if (i >= num_connections) if (i >= num_connections)
break; /* connection list changed somehow, retry later ... */ break; /* connection list changed somehow, retry later ... */
if (p[poll_server + i].fd != pos->socket_fd) if (p[poll_server + i].fd != pos->socket_fd)
continue; /* fd mismatch, something else happened, retry later ... */ continue; /* fd mismatch, something else happened, retry later ... */
MHD_connection_call_handlers_ (pos, MHD_connection_call_handlers_ (pos,
0 != (p[poll_server + i].revents & POLLIN), 0 != (p[poll_server + i].revents & POLLIN),
0 != (p[poll_server + i].revents 0 != (p[poll_server + i].revents
+7 -7
View File
@@ -67,11 +67,11 @@ configure_listen_reuse (struct MHD_Daemon *daemon)
} }
return MHD_SC_OK; return MHD_SC_OK;
#endif /* ! MHD_WINSOCK_SOCKETS */ #endif /* ! MHD_WINSOCK_SOCKETS */
/* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms. /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms.
* Fail if SO_REUSEPORT is not defined or setsockopt fails. * Fail if SO_REUSEPORT is not defined or setsockopt fails.
*/ */
/* SO_REUSEADDR on W32 has the same semantics /* SO_REUSEADDR on W32 has the same semantics
as SO_REUSEPORT on BSD/Linux */ as SO_REUSEPORT on BSD/Linux */
#if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT) #if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT)
if (0 > setsockopt (daemon->listen_socket, if (0 > setsockopt (daemon->listen_socket,
SOL_SOCKET, SOL_SOCKET,
@@ -93,8 +93,8 @@ configure_listen_reuse (struct MHD_Daemon *daemon)
} }
return MHD_SC_OK; return MHD_SC_OK;
#else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */ #else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */
/* we're supposed to allow address:port re-use, but /* we're supposed to allow address:port re-use, but
on this platform we cannot; fail hard */ on this platform we cannot; fail hard */
#ifdef HAVE_MESSAGES #ifdef HAVE_MESSAGES
MHD_DLOG (daemon, MHD_DLOG (daemon,
MHD_SC_LISTEN_ADDRESS_REUSE_ENABLE_NOT_SUPPORTED, MHD_SC_LISTEN_ADDRESS_REUSE_ENABLE_NOT_SUPPORTED,
+1 -1
View File
@@ -26,7 +26,7 @@
struct MD5Context struct MD5Context
{ {
uint32_t state[4]; /* state */ uint32_t state[4]; /* state */
uint64_t count; /* number of bits, mod 2^64 */ uint64_t count; /* number of bits, mod 2^64 */
uint8_t buffer[MD5_BLOCK_SIZE]; /* input buffer */ uint8_t buffer[MD5_BLOCK_SIZE]; /* input buffer */
}; };
+2 -2
View File
@@ -254,8 +254,8 @@ MHD_monotonic_sec_counter_init (void)
LARGE_INTEGER freq; LARGE_INTEGER freq;
LARGE_INTEGER perf_counter; LARGE_INTEGER perf_counter;
QueryPerformanceFrequency (&freq); /* never fail on XP and later */ QueryPerformanceFrequency (&freq); /* never fail on XP and later */
QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */ QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */
perf_freq = freq.QuadPart; perf_freq = freq.QuadPart;
perf_start = perf_counter.QuadPart; perf_start = perf_counter.QuadPart;
mono_clock_source = _MHD_CLOCK_PERFCOUNTER; mono_clock_source = _MHD_CLOCK_PERFCOUNTER;
+2 -1
View File
@@ -49,7 +49,8 @@
#if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \ #if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \
defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI) defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI)
# define MHD_USE_THREAD_ATTR_SETNAME 1 # define MHD_USE_THREAD_ATTR_SETNAME 1
#endif /* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */ #endif \
/* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */
#if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \ #if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \
defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \ defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \
+14 -14
View File
@@ -24,7 +24,7 @@ typedef struct node
/* $NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $ */ /* $NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $ */
/* find or insert datum into search tree */ /* find or insert datum into search tree */
void * void *
tsearch (const void *vkey, /* key to be located */ tsearch (const void *vkey, /* key to be located */
void **vrootp, /* address of tree root */ void **vrootp, /* address of tree root */
int (*compar)(const void *, const void *)) int (*compar)(const void *, const void *))
{ {
@@ -38,19 +38,19 @@ tsearch (const void *vkey, /* key to be located */
{ /* Knuth's T1: */ { /* Knuth's T1: */
int r; int r;
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
return *rootp; /* we found it! */ return *rootp; /* we found it! */
rootp = (r < 0) ? rootp = (r < 0) ?
&(*rootp)->llink : /* T3: follow left branch */ &(*rootp)->llink : /* T3: follow left branch */
&(*rootp)->rlink; /* T4: follow right branch */ &(*rootp)->rlink; /* T4: follow right branch */
} }
q = malloc (sizeof(node_t)); /* T5: key not found */ q = malloc (sizeof(node_t)); /* T5: key not found */
if (q) if (q)
{ /* make new node */ { /* make new node */
*rootp = q; /* link new node to old */ *rootp = q; /* link new node to old */
q->key = vkey; /* initialize new node */ q->key = vkey; /* initialize new node */
q->llink = q->rlink = NULL; q->llink = q->rlink = NULL;
} }
return q; return q;
@@ -73,8 +73,8 @@ tfind (const void *vkey, /* key to be found */
{ /* T1: */ { /* T1: */
int r; int r;
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
return *rootp; /* key found */ return *rootp; /* key found */
rootp = (r < 0) ? rootp = (r < 0) ?
&(*rootp)->llink : /* T3: follow left branch */ &(*rootp)->llink : /* T3: follow left branch */
&(*rootp)->rlink; /* T4: follow right branch */ &(*rootp)->rlink; /* T4: follow right branch */
@@ -112,17 +112,17 @@ tdelete (const void *__restrict vkey,
&(*rootp)->llink : /* follow llink branch */ &(*rootp)->llink : /* follow llink branch */
&(*rootp)->rlink; /* follow rlink branch */ &(*rootp)->rlink; /* follow rlink branch */
if (*rootp == NULL) if (*rootp == NULL)
return NULL; /* key not found */ return NULL; /* key not found */
} }
r = (*rootp)->rlink; /* D1: */ r = (*rootp)->rlink; /* D1: */
if ((q = (*rootp)->llink) == NULL) /* Left NULL? */ if ((q = (*rootp)->llink) == NULL) /* Left NULL? */
{ {
q = r; q = r;
} }
else if (r != NULL) else if (r != NULL)
{ /* Right link is NULL? */ { /* Right link is NULL? */
if (r->llink == NULL) if (r->llink == NULL)
{ /* D2: Find successor */ { /* D2: Find successor */
r->llink = q; r->llink = q;
q = r; q = r;
} }
@@ -135,7 +135,7 @@ tdelete (const void *__restrict vkey,
q->rlink = (*rootp)->rlink; q->rlink = (*rootp)->rlink;
} }
} }
free (*rootp); /* D4: Free node */ free (*rootp); /* D4: Free node */
*rootp = q; /* link parent to new node */ *rootp = q; /* link parent to new node */
return p; return p;
} }
+16 -14
View File
@@ -115,7 +115,6 @@
#endif #endif
/** /**
* sendfile() chuck size * sendfile() chuck size
*/ */
@@ -250,9 +249,9 @@ MHD_get_connection_values (struct MHD_Connection *connection,
ret++; ret++;
if ( (NULL != iterator) && if ( (NULL != iterator) &&
(MHD_NO == iterator (iterator_cls, (MHD_NO == iterator (iterator_cls,
pos->kind, pos->kind,
pos->header, pos->header,
pos->value)) ) pos->value)) )
return ret; return ret;
} }
return ret; return ret;
@@ -764,7 +763,8 @@ MHD_connection_finish_forward_ (struct MHD_Connection *connection)
* used with MHD_UPGRADE_ACTION_CLOSE. They will be * used with MHD_UPGRADE_ACTION_CLOSE. They will be
* closed by MHD_cleanup_upgraded_connection_() during * closed by MHD_cleanup_upgraded_connection_() during
* connection's final cleanup. * connection's final cleanup.
*/} *///
}
#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT*/ #endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT*/
@@ -1141,18 +1141,18 @@ try_grow_read_buffer (struct MHD_Connection *connection,
avail_size = MHD_pool_get_free (connection->pool); avail_size = MHD_pool_get_free (connection->pool);
if (0 == avail_size) if (0 == avail_size)
return false; /* No more space available */ return false; /* No more space available */
if (0 == connection->read_buffer_size) if (0 == connection->read_buffer_size)
new_size = avail_size / 2; /* Use half of available buffer for reading */ new_size = avail_size / 2; /* Use half of available buffer for reading */
else else
{ {
size_t grow_size; size_t grow_size;
grow_size = avail_size / 8; grow_size = avail_size / 8;
if (MHD_BUF_INC_SIZE > grow_size) if (MHD_BUF_INC_SIZE > grow_size)
{ /* Shortage of space */ { /* Shortage of space */
if (! required) if (! required)
return false; /* Grow is not mandatory, leave some space in pool */ return false; /* Grow is not mandatory, leave some space in pool */
else else
{ {
/* Shortage of space, but grow is mandatory */ /* Shortage of space, but grow is mandatory */
@@ -1403,7 +1403,8 @@ build_header_response (struct MHD_Connection *connection)
Note that the change from 'SHOULD NOT' to 'MUST NOT' is Note that the change from 'SHOULD NOT' to 'MUST NOT' is
a recent development of the HTTP 1.1 specification. a recent development of the HTTP 1.1 specification.
*/content_length_len *///
content_length_len
= MHD_snprintf_ (content_length_buf, = MHD_snprintf_ (content_length_buf,
sizeof (content_length_buf), sizeof (content_length_buf),
MHD_HTTP_HEADER_CONTENT_LENGTH ": " MHD_HTTP_HEADER_CONTENT_LENGTH ": "
@@ -2438,8 +2439,9 @@ static enum MHD_Result
check_write_done (struct MHD_Connection *connection, check_write_done (struct MHD_Connection *connection,
enum MHD_CONNECTION_STATE next_state) enum MHD_CONNECTION_STATE next_state)
{ {
if (connection->write_buffer_append_offset != if ( (connection->write_buffer_append_offset !=
connection->write_buffer_send_offset) connection->write_buffer_send_offset) ||
(connection->sk_cork_on) )
return MHD_NO; return MHD_NO;
connection->write_buffer_append_offset = 0; connection->write_buffer_append_offset = 0;
connection->write_buffer_send_offset = 0; connection->write_buffer_send_offset = 0;
@@ -2722,10 +2724,10 @@ MHD_update_last_activity_ (struct MHD_Connection *connection)
struct MHD_Daemon *daemon = connection->daemon; struct MHD_Daemon *daemon = connection->daemon;
if (0 == connection->connection_timeout) if (0 == connection->connection_timeout)
return; /* Skip update of activity for connections return; /* Skip update of activity for connections
without timeout timer. */ without timeout timer. */
if (connection->suspended) if (connection->suspended)
return; /* no activity on suspended connections */ return; /* no activity on suspended connections */
connection->last_activity = MHD_monotonic_sec_counter (); connection->last_activity = MHD_monotonic_sec_counter ();
if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
+84 -75
View File
@@ -1333,6 +1333,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
* this function. If 'was_closed' changed externally in the middle * this function. If 'was_closed' changed externally in the middle
* of processing - it will be processed on next iteration. */ * of processing - it will be processed on next iteration. */
bool was_closed; bool was_closed;
if (daemon->shutdown) if (daemon->shutdown)
{ {
/* Daemon shutting down, application will not receive any more data. */ /* Daemon shutting down, application will not receive any more data. */
@@ -1355,10 +1356,9 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
{ {
#ifdef HAVE_MESSAGES #ifdef HAVE_MESSAGES
MHD_DLOG (daemon, MHD_DLOG (daemon,
_ ( _ ("Failed to forward to application "
"Failed to forward to application " MHD_UNSIGNED_LONG_LONG_PRINTF \
MHD_UNSIGNED_LONG_LONG_PRINTF \ " bytes of data received from remote side: application shut down socket.\n"),
" bytes of data received from remote side: application shut down socket.\n"),
(MHD_UNSIGNED_LONG_LONG) urh->in_buffer_used); (MHD_UNSIGNED_LONG_LONG) urh->in_buffer_used);
#endif #endif
@@ -1367,7 +1367,8 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
* check for any pending data even if socket is not marked * check for any pending data even if socket is not marked
* as 'ready' (signal may arrive after poll()/select()). * as 'ready' (signal may arrive after poll()/select()).
* Socketpair for forwarding is always in non-blocking mode * Socketpair for forwarding is always in non-blocking mode
* so no risk that recv() will block the thread. */if (0 != urh->out_buffer_size) * so no risk that recv() will block the thread. *///
if (0 != urh->out_buffer_size)
urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY; urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY;
/* Discard any data received form remote. */ /* Discard any data received form remote. */
urh->in_buffer_used = 0; urh->in_buffer_used = 0;
@@ -1379,12 +1380,14 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
connection->tls_read_ready = false; connection->tls_read_ready = false;
} }
/* On some platforms (W32, possibly Darwin) failed send() (send() will always /* On some platforms (W32, possibly Darwin) failed send() (send() will
* fail after remote disconnect was detected) may discard data in system * always fail after remote disconnect was detected) may discard data in
* buffers received by system but not yet read by recv(). * system buffers received by system but not yet read by recv(). So, before
* So, before trying send() on any socket, recv() must be performed at first * trying send() on any socket, recv() must be performed at first otherwise
* otherwise last part of incoming data may be lost. *//* If disconnect or error was detected - try to read from socket * last part of incoming data may be lost. If disconnect or error was
* to dry data possibly pending is system buffers. */if (0 != (MHD_EPOLL_STATE_ERROR & urh->app.celi)) * detected - try to read from socket to dry data possibly pending is system
* buffers. *///
if (0 != (MHD_EPOLL_STATE_ERROR & urh->app.celi))
urh->app.celi |= MHD_EPOLL_STATE_READ_READY; urh->app.celi |= MHD_EPOLL_STATE_READ_READY;
if (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) if (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi))
urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY; urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY;
@@ -1424,10 +1427,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
else /* 0 < res */ else /* 0 < res */
{ {
urh->in_buffer_used += res; urh->in_buffer_used += res;
if (buf_size > (size_t) res) if (0 < gnutls_record_check_pending (connection->tls_session))
urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; {
else if (0 < gnutls_record_check_pending (connection->tls_session))
connection->tls_read_ready = true; connection->tls_read_ready = true;
}
} }
if (MHD_EPOLL_STATE_ERROR == if (MHD_EPOLL_STATE_ERROR ==
((MHD_EPOLL_STATE_ERROR | MHD_EPOLL_STATE_READ_READY) & urh->app.celi)) ((MHD_EPOLL_STATE_ERROR | MHD_EPOLL_STATE_READ_READY) & urh->app.celi))
@@ -1932,8 +1935,8 @@ thread_main_handle_connection (void *data)
} }
#endif /* HAVE_POLL */ #endif /* HAVE_POLL */
MHD_itc_clear_ (daemon->itc); MHD_itc_clear_ (daemon->itc);
continue; /* Check again for resume. */ continue; /* Check again for resume. */
} /* End of "suspended" branch. */ } /* End of "suspended" branch. */
if (was_suspended) if (was_suspended)
{ {
@@ -2228,7 +2231,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon);
* and if possible. * and if possible.
*/ */
#define MHD_TLSLIB_NEED_PUSH_FUNC 1 #define MHD_TLSLIB_NEED_PUSH_FUNC 1
#endif /* !MHD_WINSOCK_SOCKETS && !MHD_socket_nosignal_ && (GNUTLS_VERSION_NUMBER+0 < 0x030402) */ #endif \
/* !MHD_WINSOCK_SOCKETS && !MHD_socket_nosignal_ && (GNUTLS_VERSION_NUMBER+0 < 0x030402) */
#ifdef MHD_TLSLIB_NEED_PUSH_FUNC #ifdef MHD_TLSLIB_NEED_PUSH_FUNC
/** /**
@@ -3379,7 +3383,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
this is not true as if we fail to do manually remove it, this is not true as if we fail to do manually remove it,
we are still seeing an event for this fd in epoll, we are still seeing an event for this fd in epoll,
causing grief (use-after-free...) --- at least on my causing grief (use-after-free...) --- at least on my
system. */if (0 != epoll_ctl (daemon->epoll_fd, system. *///
if (0 != epoll_ctl (daemon->epoll_fd,
EPOLL_CTL_DEL, EPOLL_CTL_DEL,
pos->socket_fd, pos->socket_fd,
NULL)) NULL))
@@ -3831,9 +3836,9 @@ MHD_select (struct MHD_Daemon *daemon,
return MHD_NO; return MHD_NO;
} }
if (MHD_NO != internal_run_from_select (daemon, if (MHD_NO != internal_run_from_select (daemon,
&rs, &rs,
&ws, &ws,
&es)) &es))
return (MHD_NO == err_state) ? MHD_YES : MHD_NO; return (MHD_NO == err_state) ? MHD_YES : MHD_NO;
return MHD_NO; return MHD_NO;
} }
@@ -3920,7 +3925,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
timeout = 0; timeout = 0;
else if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) || else if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) ||
(MHD_NO == MHD_get_timeout (daemon, (MHD_NO == MHD_get_timeout (daemon,
&ltimeout)) ) &ltimeout)) )
timeout = -1; timeout = -1;
else else
timeout = (ltimeout > INT_MAX) ? INT_MAX : (int) ltimeout; timeout = (ltimeout > INT_MAX) ? INT_MAX : (int) ltimeout;
@@ -4000,9 +4005,9 @@ MHD_poll_all (struct MHD_Daemon *daemon,
prev = pos->prev; prev = pos->prev;
/* first, sanity checks */ /* first, sanity checks */
if (i >= num_connections) if (i >= num_connections)
break; /* connection list changed somehow, retry later ... */ break; /* connection list changed somehow, retry later ... */
if (p[poll_server + i].fd != pos->socket_fd) if (p[poll_server + i].fd != pos->socket_fd)
continue; /* fd mismatch, something else happened, retry later ... */ continue; /* fd mismatch, something else happened, retry later ... */
call_handlers (pos, call_handlers (pos,
0 != (p[poll_server + i].revents & POLLIN), 0 != (p[poll_server + i].revents & POLLIN),
0 != (p[poll_server + i].revents & POLLOUT), 0 != (p[poll_server + i].revents & POLLOUT),
@@ -4267,22 +4272,26 @@ run_epoll_for_upgrade (struct MHD_Daemon *daemon)
/* Update ueh state based on what is ready according to epoll() */ /* Update ueh state based on what is ready according to epoll() */
if (0 != (events[i].events & EPOLLIN)) if (0 != (events[i].events & EPOLLIN))
{
ueh->celi |= MHD_EPOLL_STATE_READ_READY; ueh->celi |= MHD_EPOLL_STATE_READ_READY;
}
if (0 != (events[i].events & EPOLLOUT)) if (0 != (events[i].events & EPOLLOUT))
{
ueh->celi |= MHD_EPOLL_STATE_WRITE_READY; ueh->celi |= MHD_EPOLL_STATE_WRITE_READY;
}
if (0 != (events[i].events & EPOLLHUP)) if (0 != (events[i].events & EPOLLHUP))
{
ueh->celi |= MHD_EPOLL_STATE_READ_READY | MHD_EPOLL_STATE_WRITE_READY; ueh->celi |= MHD_EPOLL_STATE_READ_READY | MHD_EPOLL_STATE_WRITE_READY;
}
if ( (0 == (ueh->celi & MHD_EPOLL_STATE_ERROR)) && if ( (0 == (ueh->celi & MHD_EPOLL_STATE_ERROR)) &&
(0 != (events[i].events & (EPOLLERR | EPOLLPRI))) ) (0 != (events[i].events & (EPOLLERR | EPOLLPRI))) )
{ {
/* Process new error state only one time /* Process new error state only one time and avoid continuously
* and avoid continuously marking this connection * marking this connection as 'ready'. */
* as 'ready'. */
ueh->celi |= MHD_EPOLL_STATE_ERROR; ueh->celi |= MHD_EPOLL_STATE_ERROR;
new_err_state = true; new_err_state = true;
} }
if (! urh->in_eready_list) if (! urh->in_eready_list)
{ {
if (new_err_state || if (new_err_state ||
@@ -4447,7 +4456,7 @@ MHD_epoll (struct MHD_Daemon *daemon,
if (MHD_NO != may_block) if (MHD_NO != may_block)
{ {
if (MHD_NO != MHD_get_timeout (daemon, if (MHD_NO != MHD_get_timeout (daemon,
&timeout_ll)) &timeout_ll))
{ {
if (timeout_ll >= (MHD_UNSIGNED_LONG_LONG) INT_MAX) if (timeout_ll >= (MHD_UNSIGNED_LONG_LONG) INT_MAX)
timeout_ms = INT_MAX; timeout_ms = INT_MAX;
@@ -5406,10 +5415,10 @@ parse_options_va (struct MHD_Daemon *daemon,
case MHD_OPTION_CONNECTION_MEMORY_INCREMENT: case MHD_OPTION_CONNECTION_MEMORY_INCREMENT:
case MHD_OPTION_THREAD_STACK_SIZE: case MHD_OPTION_THREAD_STACK_SIZE:
if (MHD_NO == parse_options (daemon, if (MHD_NO == parse_options (daemon,
servaddr, servaddr,
opt, opt,
(size_t) oa[i].value, (size_t) oa[i].value,
MHD_OPTION_END)) MHD_OPTION_END))
return MHD_NO; return MHD_NO;
break; break;
/* all options taking 'unsigned int' */ /* all options taking 'unsigned int' */
@@ -5423,39 +5432,39 @@ parse_options_va (struct MHD_Daemon *daemon,
case MHD_OPTION_LISTEN_BACKLOG_SIZE: case MHD_OPTION_LISTEN_BACKLOG_SIZE:
case MHD_OPTION_SERVER_INSANITY: case MHD_OPTION_SERVER_INSANITY:
if (MHD_NO == parse_options (daemon, if (MHD_NO == parse_options (daemon,
servaddr, servaddr,
opt, opt,
(unsigned int) oa[i].value, (unsigned int) oa[i].value,
MHD_OPTION_END)) MHD_OPTION_END))
return MHD_NO; return MHD_NO;
break; break;
/* all options taking 'enum' */ /* all options taking 'enum' */
#ifdef HTTPS_SUPPORT #ifdef HTTPS_SUPPORT
case MHD_OPTION_HTTPS_CRED_TYPE: case MHD_OPTION_HTTPS_CRED_TYPE:
if (MHD_NO == parse_options (daemon, if (MHD_NO == parse_options (daemon,
servaddr, servaddr,
opt, opt,
(gnutls_credentials_type_t) oa[i].value, (gnutls_credentials_type_t) oa[i].value,
MHD_OPTION_END)) MHD_OPTION_END))
return MHD_NO; return MHD_NO;
break; break;
#endif /* HTTPS_SUPPORT */ #endif /* HTTPS_SUPPORT */
/* all options taking 'MHD_socket' */ /* all options taking 'MHD_socket' */
case MHD_OPTION_LISTEN_SOCKET: case MHD_OPTION_LISTEN_SOCKET:
if (MHD_NO == parse_options (daemon, if (MHD_NO == parse_options (daemon,
servaddr, servaddr,
opt, opt,
(MHD_socket) oa[i].value, (MHD_socket) oa[i].value,
MHD_OPTION_END)) MHD_OPTION_END))
return MHD_NO; return MHD_NO;
break; break;
/* all options taking 'int' */ /* all options taking 'int' */
case MHD_OPTION_STRICT_FOR_CLIENT: case MHD_OPTION_STRICT_FOR_CLIENT:
if (MHD_NO == parse_options (daemon, if (MHD_NO == parse_options (daemon,
servaddr, servaddr,
opt, opt,
(int) oa[i].value, (int) oa[i].value,
MHD_OPTION_END)) MHD_OPTION_END))
return MHD_NO; return MHD_NO;
break; break;
/* all options taking one pointer */ /* all options taking one pointer */
@@ -5470,10 +5479,10 @@ parse_options_va (struct MHD_Daemon *daemon,
case MHD_OPTION_HTTPS_CERT_CALLBACK: case MHD_OPTION_HTTPS_CERT_CALLBACK:
case MHD_OPTION_HTTPS_CERT_CALLBACK2: case MHD_OPTION_HTTPS_CERT_CALLBACK2:
if (MHD_NO == parse_options (daemon, if (MHD_NO == parse_options (daemon,
servaddr, servaddr,
opt, opt,
oa[i].ptr_value, oa[i].ptr_value,
MHD_OPTION_END)) MHD_OPTION_END))
return MHD_NO; return MHD_NO;
break; break;
/* all options taking two pointers */ /* all options taking two pointers */
@@ -5484,21 +5493,21 @@ parse_options_va (struct MHD_Daemon *daemon,
case MHD_OPTION_UNESCAPE_CALLBACK: case MHD_OPTION_UNESCAPE_CALLBACK:
case MHD_OPTION_GNUTLS_PSK_CRED_HANDLER: case MHD_OPTION_GNUTLS_PSK_CRED_HANDLER:
if (MHD_NO == parse_options (daemon, if (MHD_NO == parse_options (daemon,
servaddr, servaddr,
opt, opt,
(void *) oa[i].value, (void *) oa[i].value,
oa[i].ptr_value, oa[i].ptr_value,
MHD_OPTION_END)) MHD_OPTION_END))
return MHD_NO; return MHD_NO;
break; break;
/* options taking size_t-number followed by pointer */ /* options taking size_t-number followed by pointer */
case MHD_OPTION_DIGEST_AUTH_RANDOM: case MHD_OPTION_DIGEST_AUTH_RANDOM:
if (MHD_NO == parse_options (daemon, if (MHD_NO == parse_options (daemon,
servaddr, servaddr,
opt, opt,
(size_t) oa[i].value, (size_t) oa[i].value,
oa[i].ptr_value, oa[i].ptr_value,
MHD_OPTION_END)) MHD_OPTION_END))
return MHD_NO; return MHD_NO;
break; break;
default: default:
@@ -5761,7 +5770,7 @@ MHD_start_daemon_va (unsigned int flags,
#ifdef HAVE_POLL #ifdef HAVE_POLL
*pflags |= MHD_USE_POLL; *pflags |= MHD_USE_POLL;
#else /* ! HAVE_POLL */ #else /* ! HAVE_POLL */
/* use select() - do not modify flags */ /* use select() - do not modify flags */
#endif /* ! HAVE_POLL */ #endif /* ! HAVE_POLL */
} }
else if (0 != (*pflags & MHD_USE_INTERNAL_POLLING_THREAD)) else if (0 != (*pflags & MHD_USE_INTERNAL_POLLING_THREAD))
@@ -5772,7 +5781,7 @@ MHD_start_daemon_va (unsigned int flags,
#elif defined(HAVE_POLL) #elif defined(HAVE_POLL)
*pflags |= MHD_USE_POLL; *pflags |= MHD_USE_POLL;
#else /* !HAVE_POLL && !EPOLL_SUPPORT */ #else /* !HAVE_POLL && !EPOLL_SUPPORT */
/* use select() - do not modify flags */ /* use select() - do not modify flags */
#endif /* !HAVE_POLL && !EPOLL_SUPPORT */ #endif /* !HAVE_POLL && !EPOLL_SUPPORT */
} }
else else
@@ -5781,7 +5790,7 @@ MHD_start_daemon_va (unsigned int flags,
#if defined(EPOLL_SUPPORT) #if defined(EPOLL_SUPPORT)
*pflags |= MHD_USE_EPOLL; *pflags |= MHD_USE_EPOLL;
#else /* ! EPOLL_SUPPORT */ #else /* ! EPOLL_SUPPORT */
/* use select() - do not modify flags */ /* use select() - do not modify flags */
#endif /* ! EPOLL_SUPPORT */ #endif /* ! EPOLL_SUPPORT */
} }
} }
@@ -5866,8 +5875,8 @@ MHD_start_daemon_va (unsigned int flags,
if (MHD_NO == parse_options_va (daemon, if (MHD_NO == parse_options_va (daemon,
&servaddr, &servaddr,
ap)) ap))
{ {
#ifdef HTTPS_SUPPORT #ifdef HTTPS_SUPPORT
if ( (0 != (*pflags & MHD_USE_TLS)) && if ( (0 != (*pflags & MHD_USE_TLS)) &&
@@ -6057,11 +6066,11 @@ MHD_start_daemon_va (unsigned int flags,
#endif #endif
} }
#endif /* ! MHD_WINSOCK_SOCKETS */ #endif /* ! MHD_WINSOCK_SOCKETS */
/* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms. /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms.
* Fail if SO_REUSEPORT is not defined or setsockopt fails. * Fail if SO_REUSEPORT is not defined or setsockopt fails.
*/ */
/* SO_REUSEADDR on W32 has the same semantics /* SO_REUSEADDR on W32 has the same semantics
as SO_REUSEPORT on BSD/Linux */ as SO_REUSEPORT on BSD/Linux */
#if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT) #if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT)
if (0 > setsockopt (listen_fd, if (0 > setsockopt (listen_fd,
SOL_SOCKET, SOL_SOCKET,
@@ -6081,8 +6090,8 @@ MHD_start_daemon_va (unsigned int flags,
goto free_and_fail; goto free_and_fail;
} }
#else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */ #else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */
/* we're supposed to allow address:port re-use, but /* we're supposed to allow address:port re-use, but
on this platform we cannot; fail hard */ on this platform we cannot; fail hard */
#ifdef HAVE_MESSAGES #ifdef HAVE_MESSAGES
MHD_DLOG (daemon, MHD_DLOG (daemon,
_ ( _ (
+2 -2
View File
@@ -604,9 +604,9 @@ check_nonce_nc (struct MHD_Connection *connection,
} }
/* Nonce is larger, shift bitmask and bump limit */ /* Nonce is larger, shift bitmask and bump limit */
if (64 > nc - nn->nc) if (64 > nc - nn->nc)
nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */ nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */
else else
nn->nmask = 0; /* big jump, unset all bits in the mask */ nn->nmask = 0; /* big jump, unset all bits in the mask */
nn->nc = nc; nn->nc = nc;
#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS) #if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
MHD_mutex_unlock_chk_ (&daemon->nnc_lock); MHD_mutex_unlock_chk_ (&daemon->nnc_lock);
+20 -20
View File
@@ -214,11 +214,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
connection, connection,
args); args);
if (MHD_NO == cb (connection, if (MHD_NO == cb (connection,
args, args,
key_len, key_len,
NULL, NULL,
0, 0,
kind)) kind))
return MHD_NO; return MHD_NO;
(*num_headers)++; (*num_headers)++;
break; break;
@@ -235,11 +235,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
connection, connection,
equals); equals);
if (MHD_NO == cb (connection, if (MHD_NO == cb (connection,
args, args,
key_len, key_len,
equals, equals,
value_len, value_len,
kind)) kind))
return MHD_NO; return MHD_NO;
(*num_headers)++; (*num_headers)++;
break; break;
@@ -256,11 +256,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
connection, connection,
args); args);
if (MHD_NO == cb (connection, if (MHD_NO == cb (connection,
args, args,
key_len, key_len,
NULL, NULL,
0, 0,
kind)) kind))
return MHD_NO; return MHD_NO;
/* continue with 'bar' */ /* continue with 'bar' */
(*num_headers)++; (*num_headers)++;
@@ -280,11 +280,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
connection, connection,
equals); equals);
if (MHD_NO == cb (connection, if (MHD_NO == cb (connection,
args, args,
key_len, key_len,
equals, equals,
value_len, value_len,
kind)) kind))
return MHD_NO; return MHD_NO;
(*num_headers)++; (*num_headers)++;
args = amper; args = amper;
+1 -1
View File
@@ -96,7 +96,7 @@
MHD_PANIC (_ ("Failed to close FD.\n")); \ MHD_PANIC (_ ("Failed to close FD.\n")); \
} while (0) } while (0)
/* /*
#define EXTRA_CHECKS _MHD_MACRO_NO #define EXTRA_CHECKS _MHD_MACRO_NO
* Not used. Behaviour is controlled by _DEBUG/NDEBUG macros. * Not used. Behaviour is controlled by _DEBUG/NDEBUG macros.
*/ */
+1 -1
View File
@@ -28,7 +28,7 @@
struct MD5Context struct MD5Context
{ {
uint32_t state[4]; /* state */ uint32_t state[4]; /* state */
uint64_t count; /* number of bytes, mod 2^64 */ uint64_t count; /* number of bytes, mod 2^64 */
uint8_t buffer[MD5_BLOCK_SIZE]; /* input buffer */ uint8_t buffer[MD5_BLOCK_SIZE]; /* input buffer */
}; };
+3 -3
View File
@@ -336,10 +336,10 @@ MHD_pool_reallocate (struct MemoryPool *pool,
{ /* "old" block is the last allocated block */ { /* "old" block is the last allocated block */
const size_t new_apos = ROUND_TO_ALIGN (old_offset + new_size); const size_t new_apos = ROUND_TO_ALIGN (old_offset + new_size);
if (! shrinking) if (! shrinking)
{ /* Grow in-place, check for enough space. */ { /* Grow in-place, check for enough space. */
if ( (new_apos > pool->end) || if ( (new_apos > pool->end) ||
(new_apos < pool->pos) ) /* Value wrap */ (new_apos < pool->pos) ) /* Value wrap */
return NULL; /* No space */ return NULL; /* No space */
} }
/* Resized in-place */ /* Resized in-place */
pool->pos = new_apos; pool->pos = new_apos;
+2 -2
View File
@@ -254,8 +254,8 @@ MHD_monotonic_sec_counter_init (void)
LARGE_INTEGER freq; LARGE_INTEGER freq;
LARGE_INTEGER perf_counter; LARGE_INTEGER perf_counter;
QueryPerformanceFrequency (&freq); /* never fail on XP and later */ QueryPerformanceFrequency (&freq); /* never fail on XP and later */
QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */ QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */
perf_freq = freq.QuadPart; perf_freq = freq.QuadPart;
perf_start = perf_counter.QuadPart; perf_start = perf_counter.QuadPart;
mono_clock_source = _MHD_CLOCK_PERFCOUNTER; mono_clock_source = _MHD_CLOCK_PERFCOUNTER;
+11 -1
View File
@@ -405,7 +405,11 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection,
(0 == buffer_size) && (0 == buffer_size) &&
connection->sk_cork_on) connection->sk_cork_on)
{ {
(void) gnutls_record_uncork (connection->tls_session, 0); int err;
err = gnutls_record_uncork (connection->tls_session, 0);
if (0 > err)
return ret;
connection->sk_cork_on = false; connection->sk_cork_on = false;
} }
return ret; return ret;
@@ -434,6 +438,9 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection,
msg.msg_iovlen = 2; msg.msg_iovlen = 2;
ret = sendmsg (s, &msg, MAYBE_MSG_NOSIGNAL); ret = sendmsg (s, &msg, MAYBE_MSG_NOSIGNAL);
if ( (-1 == ret) &&
(EAGAIN == errno) )
return MHD_ERR_AGAIN_;
} }
#elif HAVE_WRITEV #elif HAVE_WRITEV
{ {
@@ -441,6 +448,9 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection,
iovcnt = sizeof (vector) / sizeof (struct iovec); iovcnt = sizeof (vector) / sizeof (struct iovec);
ret = writev (s, vector, iovcnt); ret = writev (s, vector, iovcnt);
if ( (-1 == ret) &&
(EAGAIN == errno) )
return MHD_ERR_AGAIN_;
} }
#endif #endif
+2 -1
View File
@@ -49,7 +49,8 @@
#if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \ #if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \
defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI) defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI)
# define MHD_USE_THREAD_ATTR_SETNAME 1 # define MHD_USE_THREAD_ATTR_SETNAME 1
#endif /* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */ #endif \
/* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */
#if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \ #if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \
defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \ defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \
+4 -4
View File
@@ -801,13 +801,13 @@ find_boundary (struct MHD_PostProcessor *pp,
'-', '-',
pp->buffer_pos); pp->buffer_pos);
if (NULL == dash) if (NULL == dash)
(*ioffptr) += pp->buffer_pos; /* skip entire buffer */ (*ioffptr) += pp->buffer_pos; /* skip entire buffer */
else if (dash == buf) else if (dash == buf)
(*ioffptr)++; /* at least skip one byte */ (*ioffptr)++; /* at least skip one byte */
else else
(*ioffptr) += dash - buf; /* skip to first possible boundary */ (*ioffptr) += dash - buf; /* skip to first possible boundary */
} }
return MHD_NO; /* expected boundary */ return MHD_NO; /* expected boundary */
} }
/* remove boundary from buffer */ /* remove boundary from buffer */
(*ioffptr) += 2 + blen; (*ioffptr) += 2 + blen;
+8 -4
View File
@@ -263,9 +263,9 @@ MHD_get_response_headers (struct MHD_Response *response,
numHeaders++; numHeaders++;
if ((NULL != iterator) && if ((NULL != iterator) &&
(MHD_NO == iterator (iterator_cls, (MHD_NO == iterator (iterator_cls,
pos->kind, pos->kind,
pos->header, pos->header,
pos->value))) pos->value)))
break; break;
} }
return numHeaders; return numHeaders;
@@ -919,7 +919,11 @@ MHD_upgrade_action (struct MHD_UpgradeResponseHandle *urh,
#ifdef HTTPS_SUPPORT #ifdef HTTPS_SUPPORT
if (0 != (daemon->options & MHD_USE_TLS) ) if (0 != (daemon->options & MHD_USE_TLS) )
{ {
gnutls_record_uncork (connection->tls_session, 0); int err;
err = gnutls_record_uncork (connection->tls_session, 0);
if (0 > err)
return MHD_NO;
connection->sk_cork_on = false; connection->sk_cork_on = false;
return MHD_YES; return MHD_YES;
} }
+1 -1
View File
@@ -55,7 +55,7 @@ struct sha256_ctx
{ {
uint32_t H[_SHA256_DIGEST_LENGTH]; /**< Intermediate hash value / digest at end of calculation */ uint32_t H[_SHA256_DIGEST_LENGTH]; /**< Intermediate hash value / digest at end of calculation */
uint64_t count; /**< number of bytes, mod 2^64 */ uint64_t count; /**< number of bytes, mod 2^64 */
uint8_t buffer[SHA256_BLOCK_SIZE]; /**< SHA256 input data buffer */ uint8_t buffer[SHA256_BLOCK_SIZE]; /**< SHA256 input data buffer */
}; };
/** /**
+3 -3
View File
@@ -83,9 +83,9 @@ ahc_nothing (void *cls,
const char *upload_data, size_t *upload_data_size, const char *upload_data, size_t *upload_data_size,
void **unused) void **unused)
{ {
(void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */ (void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
(void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
return MHD_NO; return MHD_NO;
} }
+1 -1
View File
@@ -43,7 +43,7 @@ value_checker (void *cls,
const char *data, uint64_t off, size_t size) const char *data, uint64_t off, size_t size)
{ {
unsigned int *pos = cls; unsigned int *pos = cls;
(void) kind; (void) key; (void) filename; (void) content_type; /* Unused. Silent compiler warning. */ (void) kind; (void) key; (void) filename; (void) content_type; /* Unused. Silent compiler warning. */
(void) transfer_encoding; (void) data; (void) off; /* Unused. Silent compiler warning. */ (void) transfer_encoding; (void) data; (void) off; /* Unused. Silent compiler warning. */
#if 0 #if 0
fprintf (stderr, fprintf (stderr,
+3 -3
View File
@@ -44,9 +44,9 @@ ahc_echo (void *cls,
const char *upload_data, size_t *upload_data_size, const char *upload_data, size_t *upload_data_size,
void **unused) void **unused)
{ {
(void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */ (void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
(void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
return MHD_NO; return MHD_NO;
} }
+70 -70
View File
@@ -50,9 +50,9 @@ static const char *const locale_names[] = {
"C", "C",
"", /* System default locale */ "", /* System default locale */
#if defined(_WIN32) && ! defined(__CYGWIN__) #if defined(_WIN32) && ! defined(__CYGWIN__)
".OCP", /* W32 system default OEM code page */ ".OCP", /* W32 system default OEM code page */
".ACP", /* W32 system default ANSI code page */ ".ACP", /* W32 system default ANSI code page */
".65001", /* UTF-8 */ ".65001", /* UTF-8 */
".437", ".437",
".850", ".850",
".857", ".857",
@@ -455,50 +455,50 @@ static const struct two_neq_strs neq_strings[] = {
{D_STR_W_LEN ("zyxwvutsrqponwMLKJIHGFEDCBA"), D_STR_W_LEN ( {D_STR_W_LEN ("zyxwvutsrqponwMLKJIHGFEDCBA"), D_STR_W_LEN (
"ZYXWVUTSRQPON%mlkjihgfedcba"), 13}, "ZYXWVUTSRQPON%mlkjihgfedcba"), 13},
{D_STR_W_LEN ("S\xbdur veulent plus d'\xbdufs."), /* "Sœur veulent plus d'œufs." in ISO-8859-15 */ {D_STR_W_LEN ("S\xbdur veulent plus d'\xbdufs."), /* "Sœur veulent plus d'œufs." in ISO-8859-15 */
D_STR_W_LEN ("S\xbcUR VEULENT PLUS D'\xbcUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in ISO-8859-15 */ D_STR_W_LEN ("S\xbcUR VEULENT PLUS D'\xbcUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in ISO-8859-15 */
{D_STR_W_LEN ("S\x9cur veulent plus d'\x9cufs."), /* "Sœur veulent plus d'œufs." in CP1252 */ {D_STR_W_LEN ("S\x9cur veulent plus d'\x9cufs."), /* "Sœur veulent plus d'œufs." in CP1252 */
D_STR_W_LEN ("S\x8cUR VEULENT PLUS D'\x8cUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in CP1252 */ D_STR_W_LEN ("S\x8cUR VEULENT PLUS D'\x8cUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in CP1252 */
{D_STR_W_LEN ("S\xc5\x93ur veulent plus d'\xc5\x93ufs."), /* "Sœur veulent plus d'œufs." in UTF-8 */ {D_STR_W_LEN ("S\xc5\x93ur veulent plus d'\xc5\x93ufs."), /* "Sœur veulent plus d'œufs." in UTF-8 */
D_STR_W_LEN ("S\xc5\x92UR VEULENT PLUS D'\xc5\x92UFS."), 2}, /* "SŒUR VEULENT PLUS D'ŒUFS." in UTF-8 */ D_STR_W_LEN ("S\xc5\x92UR VEULENT PLUS D'\xc5\x92UFS."), 2}, /* "SŒUR VEULENT PLUS D'ŒUFS." in UTF-8 */
{D_STR_W_LEN ("Um ein sch\x94nes M\x84" "dchen zu k\x81ssen."), /* "Um ein schönes Mädchen zu küssen." in CP850 */ {D_STR_W_LEN ("Um ein sch\x94nes M\x84" "dchen zu k\x81ssen."), /* "Um ein schönes Mädchen zu küssen." in CP850 */
D_STR_W_LEN ("UM EIN SCH\x99NES M\x8e" "DCHEN ZU K\x9aSSEN."), 10}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in CP850 */ D_STR_W_LEN ("UM EIN SCH\x99NES M\x8e" "DCHEN ZU K\x9aSSEN."), 10}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in CP850 */
{D_STR_W_LEN ("Um ein sch\xf6nes M\xe4" "dchen zu k\xfcssen."), /* "Um ein schönes Mädchen zu küssen." in ISO-8859-1/ISO-8859-15/CP1250/CP1252 */ {D_STR_W_LEN ("Um ein sch\xf6nes M\xe4" "dchen zu k\xfcssen."), /* "Um ein schönes Mädchen zu küssen." in ISO-8859-1/ISO-8859-15/CP1250/CP1252 */
D_STR_W_LEN ("UM EIN SCH\xd6NES M\xc4" "DCHEN ZU K\xdcSSEN."), 10}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in ISO-8859-1/ISO-8859-15/CP1250/CP1252 */ D_STR_W_LEN ("UM EIN SCH\xd6NES M\xc4" "DCHEN ZU K\xdcSSEN."), 10}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in ISO-8859-1/ISO-8859-15/CP1250/CP1252 */
{D_STR_W_LEN ("Um ein sch\xc3\xb6nes M\xc3\xa4" "dchen zu k\xc3\xbcssen."), /* "Um ein schönes Mädchen zu küssen." in UTF-8 */ {D_STR_W_LEN ("Um ein sch\xc3\xb6nes M\xc3\xa4" "dchen zu k\xc3\xbcssen."), /* "Um ein schönes Mädchen zu küssen." in UTF-8 */
D_STR_W_LEN ("UM EIN SCH\xc3\x96NES M\xc3\x84" "DCHEN ZU K\xc3\x9cSSEN."), D_STR_W_LEN ("UM EIN SCH\xc3\x96NES M\xc3\x84" "DCHEN ZU K\xc3\x9cSSEN."),
11}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in UTF-8 */ 11}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in UTF-8 */
{D_STR_W_LEN ("\x98stanbul"), /* "İstanbul" in CP857 */ {D_STR_W_LEN ("\x98stanbul"), /* "İstanbul" in CP857 */
D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in CP857 */ D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in CP857 */
{D_STR_W_LEN ("\xddstanbul"), /* "İstanbul" in ISO-8859-9/CP1254 */ {D_STR_W_LEN ("\xddstanbul"), /* "İstanbul" in ISO-8859-9/CP1254 */
D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in ISO-8859-9/CP1254 */ D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in ISO-8859-9/CP1254 */
{D_STR_W_LEN ("\xc4\xb0stanbul"), /* "İstanbul" in UTF-8 */ {D_STR_W_LEN ("\xc4\xb0stanbul"), /* "İstanbul" in UTF-8 */
D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in UTF-8 */ D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in UTF-8 */
{D_STR_W_LEN ("Diyarbak\x8dr"), /* "Diyarbakır" in CP857 */ {D_STR_W_LEN ("Diyarbak\x8dr"), /* "Diyarbakır" in CP857 */
D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in CP857 */ D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in CP857 */
{D_STR_W_LEN ("Diyarbak\xfdr"), /* "Diyarbakır" in ISO-8859-9/CP1254 */ {D_STR_W_LEN ("Diyarbak\xfdr"), /* "Diyarbakır" in ISO-8859-9/CP1254 */
D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in ISO-8859-9/CP1254 */ D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in ISO-8859-9/CP1254 */
{D_STR_W_LEN ("Diyarbak\xc4\xb1r"), /* "Diyarbakır" in UTF-8 */ {D_STR_W_LEN ("Diyarbak\xc4\xb1r"), /* "Diyarbakır" in UTF-8 */
D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in UTF-8 */ D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in UTF-8 */
{D_STR_W_LEN ("\x92\xa5\xe1\xe2\xae\xa2\xa0\xef \x91\xe2\xe0\xae\xaa\xa0."), /* "Тестовая Строка." in CP866 */ {D_STR_W_LEN ("\x92\xa5\xe1\xe2\xae\xa2\xa0\xef \x91\xe2\xe0\xae\xaa\xa0."), /* "Тестовая Строка." in CP866 */
D_STR_W_LEN ("\x92\x85\x91\x92\x8e\x82\x80\x9f \x91\x92\x90\x8e\x8a\x80."), D_STR_W_LEN ("\x92\x85\x91\x92\x8e\x82\x80\x9f \x91\x92\x90\x8e\x8a\x80."),
1}, /* "ТЕСТОВАЯ СТРОКА." in CP866 */ 1}, /* "ТЕСТОВАЯ СТРОКА." in CP866 */
{D_STR_W_LEN ("\xd2\xe5\xf1\xf2\xee\xe2\xe0\xff \xd1\xf2\xf0\xee\xea\xe0."), /* "Тестовая Строка." in CP1251 */ {D_STR_W_LEN ("\xd2\xe5\xf1\xf2\xee\xe2\xe0\xff \xd1\xf2\xf0\xee\xea\xe0."), /* "Тестовая Строка." in CP1251 */
D_STR_W_LEN ("\xd2\xc5\xd1\xd2\xce\xc2\xc0\xdf \xd1\xd2\xd0\xce\xca\xc0."), D_STR_W_LEN ("\xd2\xc5\xd1\xd2\xce\xc2\xc0\xdf \xd1\xd2\xd0\xce\xca\xc0."),
1}, /* "ТЕСТОВАЯ СТРОКА." in CP1251 */ 1}, /* "ТЕСТОВАЯ СТРОКА." in CP1251 */
{D_STR_W_LEN ("\xf4\xc5\xd3\xd4\xcf\xd7\xc1\xd1 \xf3\xd4\xd2\xcf\xcb\xc1."), /* "Тестовая Строка." in KOI8-R */ {D_STR_W_LEN ("\xf4\xc5\xd3\xd4\xcf\xd7\xc1\xd1 \xf3\xd4\xd2\xcf\xcb\xc1."), /* "Тестовая Строка." in KOI8-R */
D_STR_W_LEN ("\xf4\xe5\xf3\xf4\xef\xf7\xe1\xf1 \xf3\xf4\xf2\xef\xeb\xe1."), D_STR_W_LEN ("\xf4\xe5\xf3\xf4\xef\xf7\xe1\xf1 \xf3\xf4\xf2\xef\xeb\xe1."),
1}, /* "ТЕСТОВАЯ СТРОКА." in KOI8-R */ 1}, /* "ТЕСТОВАЯ СТРОКА." in KOI8-R */
{D_STR_W_LEN ("\xc2\xd5\xe1\xe2\xde\xd2\xd0\xef \xc1\xe2\xe0\xde\xda\xd0."), /* "Тестовая Строка." in ISO-8859-5 */ {D_STR_W_LEN ("\xc2\xd5\xe1\xe2\xde\xd2\xd0\xef \xc1\xe2\xe0\xde\xda\xd0."), /* "Тестовая Строка." in ISO-8859-5 */
D_STR_W_LEN ("\xc2\xb5\xc1\xc2\xbe\xb2\xb0\xcf \xc1\xc2\xc0\xbe\xba\xb0."), D_STR_W_LEN ("\xc2\xb5\xc1\xc2\xbe\xb2\xb0\xcf \xc1\xc2\xc0\xbe\xba\xb0."),
1}, /* "ТЕСТОВАЯ СТРОКА." in ISO-8859-5 */ 1}, /* "ТЕСТОВАЯ СТРОКА." in ISO-8859-5 */
{D_STR_W_LEN ("\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82\xd0\xbe\xd0\xb2\xd0\xb0\xd1" {D_STR_W_LEN ("\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82\xd0\xbe\xd0\xb2\xd0\xb0\xd1"
"\x8f \xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0."), /* "Тестовая Строка." in UTF-8 */ "\x8f \xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0."), /* "Тестовая Строка." in UTF-8 */
D_STR_W_LEN ("\xd0\xa2\xd0\x95\xd0\xa1\xd0\xa2\xd0\x9e\xd0\x92\xd0\x90\xd0" D_STR_W_LEN ("\xd0\xa2\xd0\x95\xd0\xa1\xd0\xa2\xd0\x9e\xd0\x92\xd0\x90\xd0"
"\xaf \xd0\xa1\xd0\xa2\xd0\xa0\xd0\x9e\xd0\x9a\xd0\x90."), 3} /* "ТЕСТОВАЯ СТРОКА." in UTF-8 */ "\xaf \xd0\xa1\xd0\xa2\xd0\xa0\xd0\x9e\xd0\x9a\xd0\x90."), 3} /* "ТЕСТОВАЯ СТРОКА." in UTF-8 */
}; };
@@ -900,15 +900,15 @@ static const struct str_with_value dstrs_w_values[] = {
{D_STR_W_LEN ("00000000000000000000000031295483"), 32, 31295483}, {D_STR_W_LEN ("00000000000000000000000031295483"), 32, 31295483},
/* numbers below and above limits */ /* numbers below and above limits */
{D_STR_W_LEN ("127"), 3, 127}, /* 0x7F, SCHAR_MAX */ {D_STR_W_LEN ("127"), 3, 127}, /* 0x7F, SCHAR_MAX */
{D_STR_W_LEN ("128"), 3, 128}, /* 0x80, SCHAR_MAX+1 */ {D_STR_W_LEN ("128"), 3, 128}, /* 0x80, SCHAR_MAX+1 */
{D_STR_W_LEN ("255"), 3, 255}, /* 0xFF, UCHAR_MAX */ {D_STR_W_LEN ("255"), 3, 255}, /* 0xFF, UCHAR_MAX */
{D_STR_W_LEN ("256"), 3, 256}, /* 0x100, UCHAR_MAX+1 */ {D_STR_W_LEN ("256"), 3, 256}, /* 0x100, UCHAR_MAX+1 */
{D_STR_W_LEN ("32767"), 5, 32767}, /* 0x7FFF, INT16_MAX */ {D_STR_W_LEN ("32767"), 5, 32767}, /* 0x7FFF, INT16_MAX */
{D_STR_W_LEN ("32768"), 5, 32768}, /* 0x8000, INT16_MAX+1 */ {D_STR_W_LEN ("32768"), 5, 32768}, /* 0x8000, INT16_MAX+1 */
{D_STR_W_LEN ("65535"), 5, 65535}, /* 0xFFFF, UINT16_MAX */ {D_STR_W_LEN ("65535"), 5, 65535}, /* 0xFFFF, UINT16_MAX */
{D_STR_W_LEN ("65536"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */ {D_STR_W_LEN ("65536"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */
{D_STR_W_LEN ("2147483647"), 10, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ {D_STR_W_LEN ("2147483647"), 10, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
{D_STR_W_LEN ("2147483648"), 10, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */ {D_STR_W_LEN ("2147483648"), 10, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */
{D_STR_W_LEN ("4294967295"), 10, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */ {D_STR_W_LEN ("4294967295"), 10, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */
{D_STR_W_LEN ("4294967296"), 10, UINT64_C (4294967296)}, /* 0x100000000, UINT32_MAX+1 */ {D_STR_W_LEN ("4294967296"), 10, UINT64_C (4294967296)}, /* 0x100000000, UINT32_MAX+1 */
@@ -968,14 +968,14 @@ const struct str_with_len str_ovflw[] = {
const struct str_with_len str_no_num[] = { const struct str_with_len str_no_num[] = {
D_STR_W_LEN ("zero"), D_STR_W_LEN ("zero"),
D_STR_W_LEN ("one"), D_STR_W_LEN ("one"),
D_STR_W_LEN ("\xb9\xb2\xb3"), /* superscript "123" in ISO-8859-1/CP1252 */ D_STR_W_LEN ("\xb9\xb2\xb3"), /* superscript "123" in ISO-8859-1/CP1252 */
D_STR_W_LEN ("\xc2\xb9\xc2\xb2\xc2\xb3"), /* superscript "123" in UTF-8 */ D_STR_W_LEN ("\xc2\xb9\xc2\xb2\xc2\xb3"), /* superscript "123" in UTF-8 */
D_STR_W_LEN ("\xd9\xa1\xd9\xa2\xd9\xa3"), /* Arabic-Indic "١٢٣" in UTF-8 */ D_STR_W_LEN ("\xd9\xa1\xd9\xa2\xd9\xa3"), /* Arabic-Indic "١٢٣" in UTF-8 */
D_STR_W_LEN ("\xdb\xb1\xdb\xb2\xdb\xb3"), /* Ext Arabic-Indic "۱۲۳" in UTF-8 */ D_STR_W_LEN ("\xdb\xb1\xdb\xb2\xdb\xb3"), /* Ext Arabic-Indic "۱۲۳" in UTF-8 */
D_STR_W_LEN ("\xe0\xa5\xa7\xe0\xa5\xa8\xe0\xa5\xa9"), /* Devanagari "१२३" in UTF-8 */ D_STR_W_LEN ("\xe0\xa5\xa7\xe0\xa5\xa8\xe0\xa5\xa9"), /* Devanagari "१२३" in UTF-8 */
D_STR_W_LEN ("\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89"), /* Chinese "一二三" in UTF-8 */ D_STR_W_LEN ("\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89"), /* Chinese "一二三" in UTF-8 */
D_STR_W_LEN ("\xd2\xbb\xb6\xfe\xc8\xfd"), /* Chinese "一二三" in GB2312/CP936 */ D_STR_W_LEN ("\xd2\xbb\xb6\xfe\xc8\xfd"), /* Chinese "一二三" in GB2312/CP936 */
D_STR_W_LEN ("\x1B\x24\x29\x41\x0E\x52\x3B\x36\x7E\x48\x7D\x0F") /* Chinese "一二三" in ISO-2022-CN */ D_STR_W_LEN ("\x1B\x24\x29\x41\x0E\x52\x3B\x36\x7E\x48\x7D\x0F") /* Chinese "一二三" in ISO-2022-CN */
}; };
/* valid hex string for conversion to unsigned integer value */ /* valid hex string for conversion to unsigned integer value */
@@ -1013,25 +1013,25 @@ static const struct str_with_value xdstrs_w_values[] = {
{D_STR_W_LEN ("0000000000000000000000003A29e4C3"), 32, 0x3A29E4C3}, {D_STR_W_LEN ("0000000000000000000000003A29e4C3"), 32, 0x3A29E4C3},
/* numbers below and above limits */ /* numbers below and above limits */
{D_STR_W_LEN ("7F"), 2, 127}, /* 0x7F, SCHAR_MAX */ {D_STR_W_LEN ("7F"), 2, 127}, /* 0x7F, SCHAR_MAX */
{D_STR_W_LEN ("7f"), 2, 127}, /* 0x7F, SCHAR_MAX */ {D_STR_W_LEN ("7f"), 2, 127}, /* 0x7F, SCHAR_MAX */
{D_STR_W_LEN ("80"), 2, 128}, /* 0x80, SCHAR_MAX+1 */ {D_STR_W_LEN ("80"), 2, 128}, /* 0x80, SCHAR_MAX+1 */
{D_STR_W_LEN ("fF"), 2, 255}, /* 0xFF, UCHAR_MAX */ {D_STR_W_LEN ("fF"), 2, 255}, /* 0xFF, UCHAR_MAX */
{D_STR_W_LEN ("Ff"), 2, 255}, /* 0xFF, UCHAR_MAX */ {D_STR_W_LEN ("Ff"), 2, 255}, /* 0xFF, UCHAR_MAX */
{D_STR_W_LEN ("FF"), 2, 255}, /* 0xFF, UCHAR_MAX */ {D_STR_W_LEN ("FF"), 2, 255}, /* 0xFF, UCHAR_MAX */
{D_STR_W_LEN ("ff"), 2, 255}, /* 0xFF, UCHAR_MAX */ {D_STR_W_LEN ("ff"), 2, 255}, /* 0xFF, UCHAR_MAX */
{D_STR_W_LEN ("100"), 3, 256}, /* 0x100, UCHAR_MAX+1 */ {D_STR_W_LEN ("100"), 3, 256}, /* 0x100, UCHAR_MAX+1 */
{D_STR_W_LEN ("7fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */ {D_STR_W_LEN ("7fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */
{D_STR_W_LEN ("7FFF"), 4, 32767}, /* 0x7FFF, INT16_MAX */ {D_STR_W_LEN ("7FFF"), 4, 32767}, /* 0x7FFF, INT16_MAX */
{D_STR_W_LEN ("7Fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */ {D_STR_W_LEN ("7Fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */
{D_STR_W_LEN ("8000"), 4, 32768}, /* 0x8000, INT16_MAX+1 */ {D_STR_W_LEN ("8000"), 4, 32768}, /* 0x8000, INT16_MAX+1 */
{D_STR_W_LEN ("ffff"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ {D_STR_W_LEN ("ffff"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
{D_STR_W_LEN ("FFFF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ {D_STR_W_LEN ("FFFF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
{D_STR_W_LEN ("FffF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */ {D_STR_W_LEN ("FffF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
{D_STR_W_LEN ("10000"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */ {D_STR_W_LEN ("10000"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */
{D_STR_W_LEN ("7FFFFFFF"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ {D_STR_W_LEN ("7FFFFFFF"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
{D_STR_W_LEN ("7fffffff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ {D_STR_W_LEN ("7fffffff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
{D_STR_W_LEN ("7FFffFff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */ {D_STR_W_LEN ("7FFffFff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
{D_STR_W_LEN ("80000000"), 8, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */ {D_STR_W_LEN ("80000000"), 8, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */
{D_STR_W_LEN ("FFFFFFFF"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */ {D_STR_W_LEN ("FFFFFFFF"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */
{D_STR_W_LEN ("ffffffff"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */ {D_STR_W_LEN ("ffffffff"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */
@@ -1124,8 +1124,8 @@ const struct str_with_len strx_ovflw[] = {
D_STR_W_LEN ("434532891232591226417"), D_STR_W_LEN ("434532891232591226417"),
D_STR_W_LEN ("10000000000000000a"), D_STR_W_LEN ("10000000000000000a"),
D_STR_W_LEN ("10000000000000000E"), D_STR_W_LEN ("10000000000000000E"),
D_STR_W_LEN ("100000000000000000 and nothing"), /* 0x10000000000000000, UINT64_MAX+1 */ D_STR_W_LEN ("100000000000000000 and nothing"), /* 0x10000000000000000, UINT64_MAX+1 */
D_STR_W_LEN ("100000000000000000xx"), /* 0x10000000000000000, UINT64_MAX+1 */ D_STR_W_LEN ("100000000000000000xx"), /* 0x10000000000000000, UINT64_MAX+1 */
D_STR_W_LEN ("99999999999999999999"), D_STR_W_LEN ("99999999999999999999"),
D_STR_W_LEN ("18446744073709551616abcd"), D_STR_W_LEN ("18446744073709551616abcd"),
D_STR_W_LEN ("20000000000000000000 suffix"), D_STR_W_LEN ("20000000000000000000 suffix"),
+178 -14
View File
@@ -53,10 +53,164 @@
#include "test_helpers.h" #include "test_helpers.h"
#define LARGE_STRING \ #define LARGE_STRING \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" "HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelXloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello\n"
#define LARGE_REPLY_STRING \ #define LARGE_REPLY_STRING \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" "WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld\n"
#ifdef HTTPS_SUPPORT #ifdef HTTPS_SUPPORT
#include <gnutls/gnutls.h> #include <gnutls/gnutls.h>
@@ -338,6 +492,7 @@ wr_handshake (struct wr_socket *s)
/** /**
* Send data to remote by socket. * Send data to remote by socket.
*
* @param s the socket to use * @param s the socket to use
* @param buf the buffer with data to send * @param buf the buffer with data to send
* @param len the length of data in @a buf * @param len the length of data in @a buf
@@ -351,15 +506,24 @@ wr_send (struct wr_socket *s,
size_t len) size_t len)
{ {
if (wr_plain == s->t) if (wr_plain == s->t)
return MHD_send_ (s->fd, buf, len); {
ssize_t ret;
ret = MHD_send_ (s->fd, buf, len);
(void) MHD_socket_cork_ (s->fd,
false);
return ret;
}
#ifdef HTTPS_SUPPORT #ifdef HTTPS_SUPPORT
if (wr_tls == s->t) if (wr_tls == s->t)
{ {
ssize_t ret; ssize_t ret;
if (! s->tls_connected && ! wr_handshake (s)) if (! s->tls_connected && ! wr_handshake (s))
return -1; return -1;
ret = gnutls_record_send (s->tls_s,
ret = gnutls_record_send (s->tls_s, buf, len); buf,
len);
if (ret > 0) if (ret > 0)
return ret; return ret;
if (GNUTLS_E_AGAIN == ret) if (GNUTLS_E_AGAIN == ret)
@@ -591,7 +755,7 @@ kick_select ()
{ {
if (MHD_ITC_IS_VALID_ (kicker)) if (MHD_ITC_IS_VALID_ (kicker))
{ {
MHD_itc_activate_ (kicker, "K"); (void) MHD_itc_activate_ (kicker, "K");
} }
} }
@@ -698,6 +862,8 @@ recv_all (struct wr_socket *sock,
} }
abort (); abort ();
} }
if (0 != strncmp (text, buf, off + ret))
abort ();
} }
if (0 != strncmp (text, buf, len)) if (0 != strncmp (text, buf, len))
abort (); abort ();
@@ -715,8 +881,10 @@ run_usock (void *cls)
{ {
struct MHD_UpgradeResponseHandle *urh = cls; struct MHD_UpgradeResponseHandle *urh = cls;
MHD_upgrade_action (urh, if (MHD_YES !=
MHD_UPGRADE_ACTION_CORK_OFF); MHD_upgrade_action (urh,
MHD_UPGRADE_ACTION_CORK_OFF))
abort ();
send_all (usock, send_all (usock,
LARGE_STRING); LARGE_STRING);
recv_all (usock, recv_all (usock,
@@ -953,7 +1121,7 @@ run_mhd_select_loop (struct MHD_Daemon *daemon)
&ws, &ws,
&es); &es);
} }
MHD_itc_destroy_ (kicker); (void) MHD_itc_destroy_ (kicker);
MHD_itc_set_invalid_ (kicker); MHD_itc_set_invalid_ (kicker);
} }
@@ -991,7 +1159,6 @@ run_mhd_epoll_loop (struct MHD_Daemon *daemon)
MHD_UNSIGNED_LONG_LONG to; MHD_UNSIGNED_LONG_LONG to;
struct timeval tv; struct timeval tv;
int ret; int ret;
char drain[128];
di = MHD_get_daemon_info (daemon, di = MHD_get_daemon_info (daemon,
MHD_DAEMON_INFO_EPOLL_FD); MHD_DAEMON_INFO_EPOLL_FD);
@@ -1023,7 +1190,7 @@ run_mhd_epoll_loop (struct MHD_Daemon *daemon)
MHD_itc_clear_ (kicker); MHD_itc_clear_ (kicker);
MHD_run (daemon); MHD_run (daemon);
} }
MHD_itc_destroy_ (kicker); (void) MHD_itc_destroy_ (kicker);
MHD_itc_set_invalid_ (kicker); MHD_itc_set_invalid_ (kicker);
} }
@@ -1203,7 +1370,6 @@ main (int argc,
if (has_param (argc, argv, "-q") || if (has_param (argc, argv, "-q") ||
has_param (argc, argv, "--quiet")) has_param (argc, argv, "--quiet"))
verbose = 0; verbose = 0;
if (test_tls) if (test_tls)
{ {
#ifdef HTTPS_SUPPORT #ifdef HTTPS_SUPPORT
@@ -1247,7 +1413,6 @@ main (int argc,
return 77; return 77;
#endif /* ! HTTPS_SUPPORT */ #endif /* ! HTTPS_SUPPORT */
} }
/* run tests */ /* run tests */
if (verbose) if (verbose)
printf ("Starting HTTP \"Upgrade\" tests with %s connections.\n", printf ("Starting HTTP \"Upgrade\" tests with %s connections.\n",
@@ -1262,7 +1427,6 @@ main (int argc,
res); res);
else if (verbose) else if (verbose)
printf ("PASSED: Upgrade with external select.\n"); printf ("PASSED: Upgrade with external select.\n");
/* Try external auto */ /* Try external auto */
res = test_upgrade (MHD_USE_AUTO, res = test_upgrade (MHD_USE_AUTO,
0); 0);
+14 -14
View File
@@ -24,7 +24,7 @@ typedef struct node
/* $NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $ */ /* $NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $ */
/* find or insert datum into search tree */ /* find or insert datum into search tree */
void * void *
tsearch (const void *vkey, /* key to be located */ tsearch (const void *vkey, /* key to be located */
void **vrootp, /* address of tree root */ void **vrootp, /* address of tree root */
int (*compar)(const void *, const void *)) int (*compar)(const void *, const void *))
{ {
@@ -38,19 +38,19 @@ tsearch (const void *vkey, /* key to be located */
{ /* Knuth's T1: */ { /* Knuth's T1: */
int r; int r;
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
return *rootp; /* we found it! */ return *rootp; /* we found it! */
rootp = (r < 0) ? rootp = (r < 0) ?
&(*rootp)->llink : /* T3: follow left branch */ &(*rootp)->llink : /* T3: follow left branch */
&(*rootp)->rlink; /* T4: follow right branch */ &(*rootp)->rlink; /* T4: follow right branch */
} }
q = malloc (sizeof(node_t)); /* T5: key not found */ q = malloc (sizeof(node_t)); /* T5: key not found */
if (q) if (q)
{ /* make new node */ { /* make new node */
*rootp = q; /* link new node to old */ *rootp = q; /* link new node to old */
q->key = vkey; /* initialize new node */ q->key = vkey; /* initialize new node */
q->llink = q->rlink = NULL; q->llink = q->rlink = NULL;
} }
return q; return q;
@@ -73,8 +73,8 @@ tfind (const void *vkey, /* key to be found */
{ /* T1: */ { /* T1: */
int r; int r;
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
return *rootp; /* key found */ return *rootp; /* key found */
rootp = (r < 0) ? rootp = (r < 0) ?
&(*rootp)->llink : /* T3: follow left branch */ &(*rootp)->llink : /* T3: follow left branch */
&(*rootp)->rlink; /* T4: follow right branch */ &(*rootp)->rlink; /* T4: follow right branch */
@@ -112,17 +112,17 @@ tdelete (const void *__restrict vkey,
&(*rootp)->llink : /* follow llink branch */ &(*rootp)->llink : /* follow llink branch */
&(*rootp)->rlink; /* follow rlink branch */ &(*rootp)->rlink; /* follow rlink branch */
if (*rootp == NULL) if (*rootp == NULL)
return NULL; /* key not found */ return NULL; /* key not found */
} }
r = (*rootp)->rlink; /* D1: */ r = (*rootp)->rlink; /* D1: */
if ((q = (*rootp)->llink) == NULL) /* Left NULL? */ if ((q = (*rootp)->llink) == NULL) /* Left NULL? */
{ {
q = r; q = r;
} }
else if (r != NULL) else if (r != NULL)
{ /* Right link is NULL? */ { /* Right link is NULL? */
if (r->llink == NULL) if (r->llink == NULL)
{ /* D2: Find successor */ { /* D2: Find successor */
r->llink = q; r->llink = q;
q = r; q = r;
} }
@@ -135,7 +135,7 @@ tdelete (const void *__restrict vkey,
q->rlink = (*rootp)->rlink; q->rlink = (*rootp)->rlink;
} }
} }
free (*rootp); /* D4: Free node */ free (*rootp); /* D4: Free node */
*rootp = q; /* link parent to new node */ *rootp = q; /* link parent to new node */
return p; return p;
} }
+1 -1
View File
@@ -49,7 +49,7 @@ ahc_echo (void *cls,
{ {
struct MHD_Response *response; struct MHD_Response *response;
enum MHD_Result ret; enum MHD_Result ret;
(void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */ (void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */
(void) upload_data; (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
response = MHD_create_response_from_buffer (0, NULL, response = MHD_create_response_from_buffer (0, NULL,
+2 -2
View File
@@ -107,9 +107,9 @@ ahc_empty (void *cls,
(void) cls; (void) cls;
(void) url; (void) url;
(void) url; (void) url;
(void) version; /* Unused. Silent compiler warning. */ (void) version; /* Unused. Silent compiler warning. */
(void) upload_data; (void) upload_data;
(void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data_size; /* Unused. Silent compiler warning. */
if (0 != strcasecmp ("GET", if (0 != strcasecmp ("GET",
method)) method))
+1 -1
View File
@@ -50,7 +50,7 @@ query_session_ahc (void *cls, struct MHD_Connection *connection,
struct MHD_Response *response; struct MHD_Response *response;
enum MHD_Result ret; enum MHD_Result ret;
int gret; int gret;
(void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */ (void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */
(void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
if (NULL == *ptr) if (NULL == *ptr)
+1 -1
View File
@@ -189,7 +189,7 @@ http_ahc (void *cls,
static int aptr; static int aptr;
struct MHD_Response *response; struct MHD_Response *response;
enum MHD_Result ret; enum MHD_Result ret;
(void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */ (void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */
(void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
if (0 != strcmp (method, MHD_HTTP_METHOD_GET)) if (0 != strcmp (method, MHD_HTTP_METHOD_GET))
+1 -1
View File
@@ -91,7 +91,7 @@ ahc_echo (void *cls,
const char *password = "testpass"; const char *password = "testpass";
const char *realm = "test@example.com"; const char *realm = "test@example.com";
enum MHD_Result ret; enum MHD_Result ret;
(void) cls; (void) url; /* Unused. Silent compiler warning. */ (void) cls; (void) url; /* Unused. Silent compiler warning. */
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
(void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
@@ -85,7 +85,7 @@ ahc_echo (void *cls,
const char *password = "testpass"; const char *password = "testpass";
const char *realm = "test@example.com"; const char *realm = "test@example.com";
enum MHD_Result ret; enum MHD_Result ret;
(void) cls; (void) url; /* Unused. Silent compiler warning. */ (void) cls; (void) url; /* Unused. Silent compiler warning. */
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
(void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */ (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
+2 -2
View File
@@ -730,9 +730,9 @@ ahc_empty (void *cls,
(void) cls; (void) cls;
(void) url; (void) url;
(void) url; (void) url;
(void) version; /* Unused. Silent compiler warning. */ (void) version; /* Unused. Silent compiler warning. */
(void) upload_data; (void) upload_data;
(void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data_size; /* Unused. Silent compiler warning. */
if (0 != strcasecmp ("GET", method)) if (0 != strcasecmp ("GET", method))
return MHD_NO; /* unexpected method */ return MHD_NO; /* unexpected method */
+1 -1
View File
@@ -121,7 +121,7 @@ ahc_echo (void *cls,
enum MHD_Result ret; enum MHD_Result ret;
(void) url; (void) url;
(void) version; /* Unused. Silent compiler warning. */ (void) version; /* Unused. Silent compiler warning. */
(void) upload_data; (void) upload_data;
(void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data_size; /* Unused. Silent compiler warning. */
+2 -2
View File
@@ -687,9 +687,9 @@ ahc_empty (void *cls,
(void) cls; (void) cls;
(void) url; (void) url;
(void) url; (void) url;
(void) version; /* Unused. Silence compiler warning. */ (void) version; /* Unused. Silence compiler warning. */
(void) upload_data; (void) upload_data;
(void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data_size; /* Unused. Silent compiler warning. */
if (0 != strcasecmp ("GET", method)) if (0 != strcasecmp ("GET", method))
return MHD_NO; /* unexpected method */ return MHD_NO; /* unexpected method */
+1 -1
View File
@@ -573,7 +573,7 @@ ahc_cancel (void *cls,
{ {
struct MHD_Response *response; struct MHD_Response *response;
enum MHD_Result ret; enum MHD_Result ret;
(void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */ (void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */
(void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
if (0 != strcasecmp ("POST", method)) if (0 != strcasecmp ("POST", method))
+1 -1
View File
@@ -84,7 +84,7 @@ ahc_echo (void *cls,
static int marker; static int marker;
struct MHD_Response *response; struct MHD_Response *response;
enum MHD_Result ret; enum MHD_Result ret;
(void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */ (void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */
(void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
if (0 != strcmp ("POST", method)) if (0 != strcmp ("POST", method))
+1 -1
View File
@@ -143,7 +143,7 @@ http_AccessHandlerCallback (void *cls,
void **con_cls) void **con_cls)
{ {
enum MHD_Result ret; enum MHD_Result ret;
(void) cls; (void) url; /* Unused. Silent compiler warning. */ (void) cls; (void) url; /* Unused. Silent compiler warning. */
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
(void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data_size; /* Unused. Silent compiler warning. */
+1 -1
View File
@@ -57,7 +57,7 @@ connection_handler (void *cls,
void **ptr) void **ptr)
{ {
static int i; static int i;
(void) cls; (void) url; /* Unused. Silent compiler warning. */ (void) cls; (void) url; /* Unused. Silent compiler warning. */
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */ (void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
(void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data_size; /* Unused. Silent compiler warning. */
+1 -1
View File
@@ -104,7 +104,7 @@ ahc_echo (void *cls,
enum MHD_Result ret; enum MHD_Result ret;
(void) url; (void) url;
(void) version; /* Unused. Silent compiler warning. */ (void) version; /* Unused. Silent compiler warning. */
(void) upload_data; (void) upload_data;
(void) upload_data_size; /* Unused. Silent compiler warning. */ (void) upload_data_size; /* Unused. Silent compiler warning. */