Fixes numerous C++ errors under Windows and update test to work with CTest

See issue 2
pull/3/head
Transporter 6 years ago
parent 20cea936cf
commit ee77d96e22

@ -9,6 +9,11 @@
#include <inttypes.h>
#include <cstdlib>
#include <cstring>
#ifdef _MSC_VER
#undef min
#undef max
#include <algorithm>
#endif
#include "config.hh"
#include "exception.hh"

@ -1,5 +1,3 @@
#cmakedefine SDR_DEBUG 1
#cmakedefine SDR_WITH_FFTW 1
#cmakedefine SDR_WITH_PORTAUDIO 1
#cmakedefine SDR_WITH_RTLSDR 1
@ -8,3 +6,14 @@
#define SDR_VERSION_MINOR ${libsdr_VERSION_MINOR}
#define SDR_VERSION_PATCH ${libsdr_VERSION_PATCH}
#define SDR_VERSION_STRING "${libsdr_VERSION_MAJOR}.${libsdr_VERSION_MINOR}.${libsdr_VERSION_PATCH}"
#ifndef M_PI
#define _USE_MATH_DEFINES
#include <math.h>
#endif
#ifndef NDEBUG
#define SDR_DEBUG 1
#else
#unset SDR_DEBUG
#endif

@ -2,14 +2,47 @@
#include "exception.hh"
#include "logger.hh"
#ifndef _WIN32
#include <arpa/inet.h>
#include <netinet/in.h>
#else
#define socklen_t int
#undef min
#include <algorithm>
#endif
#include <iomanip>
using namespace sdr;
using namespace sdr::http;
#ifdef _WIN32
class WinsockWrapper
{
public:
WinsockWrapper() { WSAStartup(MAKEWORD(2, 2), &wsa); }
~WinsockWrapper() { WSACleanup(); }
private:
WSADATA wsa;
};
WinsockWrapper ww;
// Workarround for pthread for Windows
#if defined(__PTW32_LEVEL) || defined(__PTW32_VERSION)
inline bool operator< (const pthread_t& lhs, const pthread_t& rhs) { return pthread_getw32threadid_np(lhs) < pthread_getw32threadid_np(rhs); }
inline bool operator> (const pthread_t& lhs, const pthread_t& rhs) { return rhs < lhs; }
inline bool operator<=(const pthread_t& lhs, const pthread_t& rhs) { return !(lhs > rhs); }
inline bool operator>=(const pthread_t& lhs, const pthread_t& rhs) { return !(lhs < rhs); }
inline bool operator==(const pthread_t& lhs, const pthread_t& rhs) { return pthread_getw32threadid_np(lhs) == pthread_getw32threadid_np(rhs); }
inline bool operator!=(const pthread_t& lhs, const pthread_t& rhs) { return !(lhs == rhs); }
#endif
#else
#define closesocket(s) ::close(s)
#endif
/* ********************************************************************************************* *
* Utility functions
* ********************************************************************************************* */
@ -120,7 +153,7 @@ Server::start(bool wait) {
}
struct sockaddr_in serv_addr;
bzero((char *) &serv_addr, sizeof(serv_addr));
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(_port);
@ -131,7 +164,11 @@ Server::start(bool wait) {
}
int reuseaddr = 1;
#ifdef _WIN32
if (setsockopt(_socket, SOL_SOCKET, SO_REUSEADDR, (const char*)&reuseaddr, sizeof(reuseaddr))) {
#else
if (setsockopt(_socket, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr))) {
#endif
LogMessage msg(LOG_WARNING);
msg << "httpd: Can not set SO_REUSEADDR flag for socket.";
Logger::get().log(msg);
@ -151,7 +188,7 @@ void
Server::stop(bool wait) {
_is_running = false;
// Close the socket we listen on
::close(_socket); _socket = -1;
closesocket(_socket); _socket = -1;
// wait for server to join
if (wait) { this->wait(); }
}
@ -253,7 +290,7 @@ ConnectionObj::ConnectionObj(Server *server, int cli_socket)
}
ConnectionObj::~ConnectionObj() {
::close(socket); socket=-1;
closesocket(socket); socket=-1;
}
ConnectionObj *
@ -309,7 +346,7 @@ Connection::close(bool wait) {
LogMessage msg(LOG_DEBUG);
msg << "httpd: Close connection " << socket << ".";
Logger::get().log(msg);
::close(socket);
closesocket(socket);
}
}
@ -337,7 +374,11 @@ Connection::main()
{
int error = 0; socklen_t errorlen = sizeof(error);
// While socket is open
#ifdef _WIN32
while (0 == getsockopt(_object->socket, SOL_SOCKET, SO_ERROR, (char*)&error, &errorlen)) {
#else
while (0 == getsockopt(_object->socket, SOL_SOCKET, SO_ERROR, &error, &errorlen)) {
#endif
// Contstruct request & reponse instances
Request request(*this);
Response response(*this);

@ -68,9 +68,17 @@
#include <list>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#define ssize_t int
#define uint unsigned int
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#else
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#endif
#include <pthread.h>
namespace sdr {
@ -303,12 +311,20 @@ public:
inline ssize_t write(const void *data, size_t n) const {
if (0 == _object) { return -1; }
#ifdef _WIN32
return ::send((SOCKET)_object->socket, (const char*)data, n, 0);
#else
return ::write(_object->socket, data, n);
#endif
}
inline ssize_t read(void *data, size_t n) const {
if (0 == _object) { return -1; }
#ifdef _WIN32
return ::recv((SOCKET)_object->socket, (char*)data, n, 0);
#else
return ::read(_object->socket, data, n);
#endif
}
bool send(const std::string &data) const;

@ -41,9 +41,11 @@ RTLSource::RTLSource(double frequency, double sample_rate, size_t device_idx)
// Query gain factors:
int num_gains = rtlsdr_get_tuner_gains(_device, 0);
if (num_gains > 0) {
int gains[num_gains]; rtlsdr_get_tuner_gains(_device, gains);
int* gains = new int[num_gains];
rtlsdr_get_tuner_gains(_device, gains);
_gains.reserve(num_gains);
for (int i=0; i<num_gains; i++) { _gains.push_back(gains[i]); }
delete gains;
}
// Enable AGC/manual gain

@ -15,7 +15,5 @@ int main(int argc, char *argv[]) {
runner.addSuite(BufferTest::suite());
runner.addSuite(CoreUtilsTest::suite());
runner();
return 0;
return (int)runner();
}

@ -140,7 +140,7 @@ TestRunner::addSuite(TestSuite *suite)
}
void
size_t
TestRunner::operator ()()
{
size_t tests_run = 0;
@ -188,5 +188,7 @@ TestRunner::operator ()()
<< " (" << 100. * float((tests_run-tests_failed-tests_error))/(tests_run-tests_error)
<< "% passed)." << std::endl << " Where "
<< tests_error << " tests produced errors." << std::endl;
return tests_failed + tests_error;
}

@ -144,7 +144,7 @@ public:
void addSuite(TestSuite *suite);
void operator() ();
size_t operator() ();
};

Loading…
Cancel
Save