gpsd-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gpsd-dev] [PATCH 2/2] Enable Windows version of gpspipe


From: Robert Norris
Subject: [gpsd-dev] [PATCH 2/2] Enable Windows version of gpspipe
Date: Sun, 5 Mar 2017 18:43:40 +0000

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.
---
 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 <string.h>
 #include <strings.h>
 #include <fcntl.h>
+#ifdef HAVE_TERMIOS_H
 #include <termios.h>
+#endif /* HAVE_TERMIOS_H */
 #include <sys/time.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#ifdef HAVE_SYS_SELECT_H
 #include <sys/select.h>
+#endif /* HAVE_SYS_SELECT_H */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif /* HAVE_SYS_SOCKET_H */
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif /* HAVE_WINSOCK2_H */
 #include <unistd.h>
 
 #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
-- 
2.11.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]