From 773a4dd661794aae12433aa5edc5715b0d1e038e Mon Sep 17 00:00:00 2001 From: John Date: Thu, 18 May 2023 13:20:33 +0200 Subject: [PATCH] improve compilability --- CMakeLists.txt | 1 + configure.ac | 2 ++ src/ebusd/Makefile.am | 1 + src/lib/ebus/device.cpp | 9 +++++++-- src/lib/utils/httpclient.cpp | 2 ++ src/lib/utils/tcpsocket.cpp | 15 ++++++++++----- 6 files changed, 23 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e4e68d0e..2d311930 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,6 +64,7 @@ check_include_file(sys/time.h HAVE_SYS_TIME_H) check_include_file(syslog.h HAVE_SYSLOG_H) check_include_file(time.h HAVE_TIME_H) check_include_file(termios.h HAVE_TERMIOS_H) +check_function_exists(cfsetspeed HAVE_CFSETSPEED) set(CMAKE_REQUIRED_LIBRARIES pthread rt) check_function_exists(pthread_setname_np HAVE_PTHREAD_SETNAME_NP) diff --git a/configure.ac b/configure.ac index eec309b7..ad7453ed 100755 --- a/configure.ac +++ b/configure.ac @@ -27,6 +27,8 @@ AC_CHECK_HEADERS([arpa/inet.h \ time.h \ termios.h]) +AC_CHECK_FUNC([cfsetspeed], [AC_DEFINE(HAVE_CFSETSPEED, [1], [Defined if cfsetspeed() is available.])]) + AC_CHECK_LIB([pthread], [pthread_setname_np], AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], [1], [Defined if pthread_setname_np is available.]), AC_MSG_RESULT([Could not find pthread_setname_np in pthread.])) diff --git a/src/ebusd/Makefile.am b/src/ebusd/Makefile.am index eb630716..38826824 100644 --- a/src/ebusd/Makefile.am +++ b/src/ebusd/Makefile.am @@ -11,6 +11,7 @@ ebusd_SOURCES = \ datahandler.h datahandler.cpp \ network.h network.cpp \ mainloop.h mainloop.cpp \ + scan.h scan.cpp \ main.h main.cpp if MQTT diff --git a/src/lib/ebus/device.cpp b/src/lib/ebus/device.cpp index a53a65dd..e8acb069 100755 --- a/src/lib/ebus/device.cpp +++ b/src/lib/ebus/device.cpp @@ -886,7 +886,12 @@ result_t SerialDevice::open() { // create new settings memset(&newSettings, 0, sizeof(newSettings)); +#ifdef HAVE_CFSETSPEED cfsetspeed(&newSettings, m_enhancedProto ? (m_enhancedHighSpeed ? B115200 : B9600) : B2400); +#else + cfsetispeed(&newSettings, m_enhancedProto ? (m_enhancedHighSpeed ? B115200 : B9600) : B2400); + cfsetospeed(&newSettings, m_enhancedProto ? (m_enhancedHighSpeed ? B115200 : B9600) : B2400); +#endif newSettings.c_cflag |= (CS8 | CLOCAL | CREAD); newSettings.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // non-canonical mode newSettings.c_iflag |= IGNPAR; // ignore parity errors @@ -924,8 +929,8 @@ void SerialDevice::close() { } void SerialDevice::checkDevice() { - int port; - if (ioctl(m_fd, TIOCMGET, &port) == -1) { + int cnt; + if (ioctl(m_fd, FIONREAD, &cnt) == -1) { close(); } } diff --git a/src/lib/utils/httpclient.cpp b/src/lib/utils/httpclient.cpp index 279a031f..3fa8a9aa 100755 --- a/src/lib/utils/httpclient.cpp +++ b/src/lib/utils/httpclient.cpp @@ -435,6 +435,7 @@ bool HttpClient::request(const string& method, const string& uri, const string& string headers = result.substr(0, pos+2); // including final \r\n const char* hdrs = headers.c_str(); *response = result.substr(pos+4); +#ifdef HAVE_TIME_H if (time) { pos = headers.find("\r\nLast-Modified: "); if (pos != string::npos && headers.substr(pos+42, 4) == " GMT") { @@ -474,6 +475,7 @@ bool HttpClient::request(const string& method, const string& uri, const string& } } } +#endif pos = headers.find("\r\nContent-Length: "); if (pos == string::npos) { disconnect(); diff --git a/src/lib/utils/tcpsocket.cpp b/src/lib/utils/tcpsocket.cpp index 5e6268f7..6c6d09a4 100755 --- a/src/lib/utils/tcpsocket.cpp +++ b/src/lib/utils/tcpsocket.cpp @@ -124,11 +124,6 @@ int tcpKeepAliveInterval) { } #endif } -#ifndef HAVE_PPOLL -#ifndef HAVE_PSELECT - timeout = 0; -#endif -#endif if (tcpConnectTimeout > 0 && fcntl(sfd, F_SETFL, O_NONBLOCK) < 0) { // set non-blocking close(sfd); return -1; @@ -140,9 +135,15 @@ int tcpKeepAliveInterval) { return -1; } if (tcpConnectTimeout > 0) { +#if defined(HAVE_PPOLL) || defined(HAVE_PSELECT) struct timespec tdiff; tdiff.tv_sec = tcpConnectTimeout; tdiff.tv_nsec = 0; +#else + struct timeval tdiff; + tdiff.tv_sec = tcpConnectTimeout; + tdiff.tv_usec = 0; +#endif #ifdef HAVE_PPOLL nfds_t nfds = 1; struct pollfd fds[nfds]; @@ -159,7 +160,11 @@ int tcpKeepAliveInterval) { FD_ZERO(&writefds); FD_ZERO(&exceptfds); FD_SET(sfd, &readfds); +#ifdef HAVE_PSELECT ret = pselect(sfd + 1, &readfds, &writefds, &exceptfds, &tdiff, nullptr); +#else + ret = select(sfd + 1, &readfds, &writefds, &exceptfds, &tdiff); +#endif if (ret >= 1 && FD_ISSET(sfd, &exceptfds)) { ret = -1; }