aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/daemon.c
diff options
context:
space:
mode:
authorEvgeny Grin (Karlson2k) <k2k@narod.ru>2021-09-07 14:50:37 +0300
committerEvgeny Grin (Karlson2k) <k2k@narod.ru>2021-09-07 20:41:28 +0300
commitb9a1777c15389049d3b2b3ba777dd84009e10dcc (patch)
tree6910b25d2b1c4c3e2f0fb1463597a5d875ce4ba0 /src/microhttpd/daemon.c
parent6210a78fedd36b21a7e89eac9b9cb532f49ee6b4 (diff)
downloadlibmicrohttpd-b9a1777c15389049d3b2b3ba777dd84009e10dcc.tar.gz
libmicrohttpd-b9a1777c15389049d3b2b3ba777dd84009e10dcc.zip
Fixed analyzer errors: cast enum values to enum types.
enum values in C are not enum types, they are just numbers. By default numbers are mapped to signed type, like 'int'. enum types are represented with usigned types, like 'unsigned int', unless values of enum contains negative numbers. If bitwise NOT performed on pure enum value, which is automatically mapped to 'int', then result is negative number. Result of casting of negative number to unsigned type depends on architecture and may be unexpected. By explicitly casting enum values to enum types, values are converted to correct representation type, like 'unsgined int'. Result of bitwise NOT for unsigned type is predictable and does not need to be casted to the final type. Yes, casting of enum values to the same enum type looks strange, but this is the only way to properly handle bitwise NOT for enums in C.
Diffstat (limited to 'src/microhttpd/daemon.c')
-rw-r--r--src/microhttpd/daemon.c69
1 files changed, 40 insertions, 29 deletions
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 69203be7..3eed6619 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -841,8 +841,10 @@ urh_from_fdset (struct MHD_UpgradeResponseHandle *urh,
841 const MHD_socket mhd_sckt = urh->mhd.socket; 841 const MHD_socket mhd_sckt = urh->mhd.socket;
842 842
843 /* Reset read/write ready, preserve error state. */ 843 /* Reset read/write ready, preserve error state. */
844 urh->app.celi &= (~MHD_EPOLL_STATE_READ_READY & ~MHD_EPOLL_STATE_WRITE_READY); 844 urh->app.celi &= (~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY)
845 urh->mhd.celi &= (~MHD_EPOLL_STATE_READ_READY & ~MHD_EPOLL_STATE_WRITE_READY); 845 & ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY));
846 urh->mhd.celi &= (~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY)
847 & ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY));
846 848
847 if (MHD_INVALID_SOCKET != conn_sckt) 849 if (MHD_INVALID_SOCKET != conn_sckt)
848 { 850 {
@@ -937,8 +939,10 @@ urh_from_pollfd (struct MHD_UpgradeResponseHandle *urh,
937 struct pollfd p[2]) 939 struct pollfd p[2])
938{ 940{
939 /* Reset read/write ready, preserve error state. */ 941 /* Reset read/write ready, preserve error state. */
940 urh->app.celi &= (~MHD_EPOLL_STATE_READ_READY & ~MHD_EPOLL_STATE_WRITE_READY); 942 urh->app.celi &= (~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY)
941 urh->mhd.celi &= (~MHD_EPOLL_STATE_READ_READY & ~MHD_EPOLL_STATE_WRITE_READY); 943 & ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY));
944 urh->mhd.celi &= (~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY)
945 & ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY));
942 946
943 if (0 != (p[0].revents & POLLIN)) 947 if (0 != (p[0].revents & POLLIN))
944 urh->app.celi |= MHD_EPOLL_STATE_READ_READY; 948 urh->app.celi |= MHD_EPOLL_STATE_READ_READY;
@@ -1394,10 +1398,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1394 /* Discard any data received form remote. */ 1398 /* Discard any data received form remote. */
1395 urh->in_buffer_used = 0; 1399 urh->in_buffer_used = 0;
1396 /* Do not try to push data to application. */ 1400 /* Do not try to push data to application. */
1397 urh->mhd.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1401 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1398 /* Reading from remote client is not required anymore. */ 1402 /* Reading from remote client is not required anymore. */
1399 urh->in_buffer_size = 0; 1403 urh->in_buffer_size = 0;
1400 urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; 1404 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1401 connection->tls_read_ready = false; 1405 connection->tls_read_ready = false;
1402 } 1406 }
1403 1407
@@ -1435,7 +1439,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1435 { 1439 {
1436 if (GNUTLS_E_INTERRUPTED != res) 1440 if (GNUTLS_E_INTERRUPTED != res)
1437 { 1441 {
1438 urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; 1442 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1439 if (GNUTLS_E_AGAIN != res) 1443 if (GNUTLS_E_AGAIN != res)
1440 { 1444 {
1441 /* Unrecoverable error on socket was detected or 1445 /* Unrecoverable error on socket was detected or
@@ -1486,7 +1490,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1486 ((! MHD_SCKT_ERR_IS_EINTR_ (err)) && 1490 ((! MHD_SCKT_ERR_IS_EINTR_ (err)) &&
1487 (! MHD_SCKT_ERR_IS_LOW_RESOURCES_ (err)))) 1491 (! MHD_SCKT_ERR_IS_LOW_RESOURCES_ (err))))
1488 { 1492 {
1489 urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY; 1493 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1490 if ((0 == res) || 1494 if ((0 == res) ||
1491 (was_closed) || 1495 (was_closed) ||
1492 (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) || 1496 (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) ||
@@ -1504,7 +1508,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1504 { 1508 {
1505 urh->out_buffer_used += res; 1509 urh->out_buffer_used += res;
1506 if (buf_size > (size_t) res) 1510 if (buf_size > (size_t) res)
1507 urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY; 1511 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1508 } 1512 }
1509 if ( (0 == (MHD_EPOLL_STATE_READ_READY & urh->mhd.celi)) && 1513 if ( (0 == (MHD_EPOLL_STATE_READ_READY & urh->mhd.celi)) &&
1510 ( (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) || 1514 ( (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) ||
@@ -1537,7 +1541,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1537 { 1541 {
1538 if (GNUTLS_E_INTERRUPTED != res) 1542 if (GNUTLS_E_INTERRUPTED != res)
1539 { 1543 {
1540 urh->app.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1544 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1541 if (GNUTLS_E_AGAIN != res) 1545 if (GNUTLS_E_AGAIN != res)
1542 { 1546 {
1543 /* TLS connection shut down or 1547 /* TLS connection shut down or
@@ -1555,7 +1559,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1555 urh->out_buffer_used = 0; 1559 urh->out_buffer_used = 0;
1556 /* Do not try to pull more data from application. */ 1560 /* Do not try to pull more data from application. */
1557 urh->out_buffer_size = 0; 1561 urh->out_buffer_size = 0;
1558 urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY; 1562 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1559 } 1563 }
1560 } 1564 }
1561 } 1565 }
@@ -1568,7 +1572,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1568 &urh->out_buffer[res], 1572 &urh->out_buffer[res],
1569 next_out_buffer_used); 1573 next_out_buffer_used);
1570 if (data_size > (size_t) res) 1574 if (data_size > (size_t) res)
1571 urh->app.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1575 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1572 } 1576 }
1573 urh->out_buffer_used = next_out_buffer_used; 1577 urh->out_buffer_used = next_out_buffer_used;
1574 } 1578 }
@@ -1578,10 +1582,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1578 /* Unrecoverable error on socket was detected and all 1582 /* Unrecoverable error on socket was detected and all
1579 * pending data was sent to remote. */ 1583 * pending data was sent to remote. */
1580 /* Do not try to send to remote anymore. */ 1584 /* Do not try to send to remote anymore. */
1581 urh->app.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1585 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1582 /* Do not try to pull more data from application. */ 1586 /* Do not try to pull more data from application. */
1583 urh->out_buffer_size = 0; 1587 urh->out_buffer_size = 0;
1584 urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY; 1588 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1585 } 1589 }
1586 } 1590 }
1587 1591
@@ -1607,7 +1611,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1607 if ( (! MHD_SCKT_ERR_IS_EINTR_ (err)) && 1611 if ( (! MHD_SCKT_ERR_IS_EINTR_ (err)) &&
1608 (! MHD_SCKT_ERR_IS_LOW_RESOURCES_ (err)) ) 1612 (! MHD_SCKT_ERR_IS_LOW_RESOURCES_ (err)) )
1609 { 1613 {
1610 urh->mhd.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1614 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1611 if (! MHD_SCKT_ERR_IS_EAGAIN_ (err)) 1615 if (! MHD_SCKT_ERR_IS_EAGAIN_ (err))
1612 { 1616 {
1613 /* Socketpair connection shut down or 1617 /* Socketpair connection shut down or
@@ -1625,7 +1629,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1625 urh->in_buffer_used = 0; 1629 urh->in_buffer_used = 0;
1626 /* Reading from remote client is not required anymore. */ 1630 /* Reading from remote client is not required anymore. */
1627 urh->in_buffer_size = 0; 1631 urh->in_buffer_size = 0;
1628 urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; 1632 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1629 connection->tls_read_ready = false; 1633 connection->tls_read_ready = false;
1630 } 1634 }
1631 } 1635 }
@@ -1639,7 +1643,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1639 &urh->in_buffer[res], 1643 &urh->in_buffer[res],
1640 next_in_buffer_used); 1644 next_in_buffer_used);
1641 if (data_size > (size_t) res) 1645 if (data_size > (size_t) res)
1642 urh->mhd.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1646 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1643 } 1647 }
1644 urh->in_buffer_used = next_in_buffer_used; 1648 urh->in_buffer_used = next_in_buffer_used;
1645 } 1649 }
@@ -1647,10 +1651,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1647 (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) ) 1651 (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) )
1648 { 1652 {
1649 /* Do not try to push data to application. */ 1653 /* Do not try to push data to application. */
1650 urh->mhd.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1654 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1651 /* Reading from remote client is not required anymore. */ 1655 /* Reading from remote client is not required anymore. */
1652 urh->in_buffer_size = 0; 1656 urh->in_buffer_size = 0;
1653 urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; 1657 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1654 connection->tls_read_ready = false; 1658 connection->tls_read_ready = false;
1655 } 1659 }
1656 } 1660 }
@@ -1679,10 +1683,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1679 /* Discard any data unsent to remote. */ 1683 /* Discard any data unsent to remote. */
1680 urh->out_buffer_used = 0; 1684 urh->out_buffer_used = 0;
1681 /* Do not try to sent to remote anymore. */ 1685 /* Do not try to sent to remote anymore. */
1682 urh->app.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1686 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1683 /* Do not try to pull more data from application. */ 1687 /* Do not try to pull more data from application. */
1684 urh->out_buffer_size = 0; 1688 urh->out_buffer_size = 0;
1685 urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY; 1689 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1686 } 1690 }
1687} 1691}
1688 1692
@@ -3099,7 +3103,8 @@ internal_suspend_connection_ (struct MHD_Connection *connection)
3099 EDLL_remove (daemon->eready_head, 3103 EDLL_remove (daemon->eready_head,
3100 daemon->eready_tail, 3104 daemon->eready_tail,
3101 connection); 3105 connection);
3102 connection->epoll_state &= ~MHD_EPOLL_STATE_IN_EREADY_EDLL; 3106 connection->epoll_state &=
3107 ~((enum MHD_EpollState) MHD_EPOLL_STATE_IN_EREADY_EDLL);
3103 } 3108 }
3104 if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET)) 3109 if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET))
3105 { 3110 {
@@ -3108,7 +3113,8 @@ internal_suspend_connection_ (struct MHD_Connection *connection)
3108 connection->socket_fd, 3113 connection->socket_fd,
3109 NULL)) 3114 NULL))
3110 MHD_PANIC (_ ("Failed to remove FD from epoll set.\n")); 3115 MHD_PANIC (_ ("Failed to remove FD from epoll set.\n"));
3111 connection->epoll_state &= ~MHD_EPOLL_STATE_IN_EPOLL_SET; 3116 connection->epoll_state &=
3117 ~((enum MHD_EpollState) MHD_EPOLL_STATE_IN_EPOLL_SET);
3112 } 3118 }
3113 connection->epoll_state |= MHD_EPOLL_STATE_SUSPENDED; 3119 connection->epoll_state |= MHD_EPOLL_STATE_SUSPENDED;
3114 } 3120 }
@@ -3308,7 +3314,7 @@ resume_suspended_connections (struct MHD_Daemon *daemon)
3308 pos->epoll_state |= MHD_EPOLL_STATE_IN_EREADY_EDLL \ 3314 pos->epoll_state |= MHD_EPOLL_STATE_IN_EREADY_EDLL \
3309 | MHD_EPOLL_STATE_READ_READY 3315 | MHD_EPOLL_STATE_READ_READY
3310 | MHD_EPOLL_STATE_WRITE_READY; 3316 | MHD_EPOLL_STATE_WRITE_READY;
3311 pos->epoll_state &= ~MHD_EPOLL_STATE_SUSPENDED; 3317 pos->epoll_state &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_SUSPENDED);
3312 } 3318 }
3313#endif 3319#endif
3314 } 3320 }
@@ -3758,7 +3764,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
3758 EDLL_remove (daemon->eready_head, 3764 EDLL_remove (daemon->eready_head,
3759 daemon->eready_tail, 3765 daemon->eready_tail,
3760 pos); 3766 pos);
3761 pos->epoll_state &= ~MHD_EPOLL_STATE_IN_EREADY_EDLL; 3767 pos->epoll_state &=
3768 ~((enum MHD_EpollState) MHD_EPOLL_STATE_IN_EREADY_EDLL);
3762 } 3769 }
3763 if ( (-1 != daemon->epoll_fd) && 3770 if ( (-1 != daemon->epoll_fd) &&
3764 (0 != (pos->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET)) ) 3771 (0 != (pos->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET)) )
@@ -3773,8 +3780,11 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
3773 EPOLL_CTL_DEL, 3780 EPOLL_CTL_DEL,
3774 pos->socket_fd, 3781 pos->socket_fd,
3775 NULL)) 3782 NULL))
3776 MHD_PANIC (_ ("Failed to remove FD from epoll set.\n")); 3783 MHD_PANIC (_ (
3777 pos->epoll_state &= ~MHD_EPOLL_STATE_IN_EPOLL_SET; 3784 "Failed to remove FD from epoll set.\n"));
3785 pos->epoll_state &=
3786 ~((enum MHD_EpollState)
3787 MHD_EPOLL_STATE_IN_EPOLL_SET);
3778 } 3788 }
3779 } 3789 }
3780#endif 3790#endif
@@ -5125,7 +5135,8 @@ MHD_epoll (struct MHD_Daemon *daemon,
5125 EDLL_remove (daemon->eready_head, 5135 EDLL_remove (daemon->eready_head,
5126 daemon->eready_tail, 5136 daemon->eready_tail,
5127 pos); 5137 pos);
5128 pos->epoll_state &= ~MHD_EPOLL_STATE_IN_EREADY_EDLL; 5138 pos->epoll_state &=
5139 ~((enum MHD_EpollState) MHD_EPOLL_STATE_IN_EREADY_EDLL);
5129 } 5140 }
5130 } 5141 }
5131 } 5142 }
@@ -6502,7 +6513,7 @@ MHD_start_daemon_va (unsigned int flags,
6502 *pflags |= MHD_USE_INTERNAL_POLLING_THREAD; 6513 *pflags |= MHD_USE_INTERNAL_POLLING_THREAD;
6503 } 6514 }
6504 if (0 == (*pflags & MHD_USE_INTERNAL_POLLING_THREAD)) 6515 if (0 == (*pflags & MHD_USE_INTERNAL_POLLING_THREAD))
6505 *pflags = (*pflags & ((enum MHD_FLAG) ~MHD_USE_ITC)); /* useless if we are using 'external' select */ 6516 *pflags = (*pflags & ~((enum MHD_FLAG) MHD_USE_ITC)); /* useless if we are using 'external' select */
6506 else 6517 else
6507 { 6518 {
6508#ifdef HAVE_LISTEN_SHUTDOWN 6519#ifdef HAVE_LISTEN_SHUTDOWN