From e8d8c8bc9ea7a5d4aa87831835d0228743ea964a Mon Sep 17 00:00:00 2001 From: Robert Norris Date: Sun, 5 Mar 2017 18:43:40 +0000 Subject: Enable Windows version of gpspipe Use recv() rather than read() for Windows compatibility. Disable serial port code not available on Windows. Add open flag that's not available on Windows. TESTED: Built gpspipe for Windows under cross compiler. Run gpspipe on a Windows system and successfully connects to an instance of gpsd and dumps NMEA output to the terminal or a specified output file. Still builds and runs on a Linux system including the daemon option. Signed-off-by: Fred Wright --- gpspipe.c | 14 +++++++++++++- os_compat.h | 6 ++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gpspipe.c b/gpspipe.c index 0d4a7899..72eed301 100644 --- a/gpspipe.c +++ b/gpspipe.c @@ -37,11 +37,21 @@ #include #include #include +#ifdef HAVE_TERMIOS_H #include +#endif /* HAVE_TERMIOS_H */ #include #include #include +#ifdef HAVE_SYS_SELECT_H #include +#endif /* HAVE_SYS_SELECT_H */ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif /* HAVE_SYS_SOCKET_H */ +#ifdef HAVE_WINSOCK2_H +#include +#endif /* HAVE_WINSOCK2_H */ #include #include "gpsd.h" @@ -74,6 +84,7 @@ static void open_serial(char *device) exit(EXIT_FAILURE); } +#ifdef HAVE_TERMIOS_H /* Save current serial port settings for later */ if (tcgetattr(fd_out, &oldtio) != 0) { (void)fprintf(stderr, "gpspipe: error reading serial port settings\n"); @@ -94,6 +105,7 @@ static void open_serial(char *device) (void)fprintf(stderr, "gpspipe: error configuring serial port\n"); exit(EXIT_FAILURE); } +#endif /* HAVE_TERMIOS_H */ } static void usage(void) @@ -319,7 +331,7 @@ int main(int argc, char **argv) /* reading directly from the socket avoids decode overhead */ errno = 0; - r = (int)read(gpsdata.gps_fd, buf, sizeof(buf)); + r = (int)recv(gpsdata.gps_fd, buf, sizeof(buf), 0); if (r > 0) { int i = 0; int j = 0; diff --git a/os_compat.h b/os_compat.h index 9321809f..2b4189f0 100644 --- a/os_compat.h +++ b/os_compat.h @@ -114,6 +114,12 @@ size_t strlcpy(char *dst, const char *src, size_t size); #define SIGQUIT 3 #endif +/* Provide missing open flags for non-POSIX builds */ + +#ifndef O_NOCTTY +#define O_NOCTTY 0400 +#endif + # ifdef __cplusplus } # endif -- cgit v1.2.1