diff options
author | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2021-09-07 14:50:37 +0300 |
---|---|---|
committer | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2021-09-07 20:41:28 +0300 |
commit | b9a1777c15389049d3b2b3ba777dd84009e10dcc (patch) | |
tree | 6910b25d2b1c4c3e2f0fb1463597a5d875ce4ba0 /src/microhttpd/daemon.c | |
parent | 6210a78fedd36b21a7e89eac9b9cb532f49ee6b4 (diff) | |
download | libmicrohttpd-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.c | 69 |
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 |