summaryrefslogtreecommitdiff
path: root/libgps_sock.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2015-03-30 17:10:53 -0400
committerEric S. Raymond <esr@thyrsus.com>2015-03-30 17:10:53 -0400
commit28bf37132d86cc59320e21d843960d086cef664c (patch)
treebf085b5f89f1d1061b6a88ecc66c50721b13d86c /libgps_sock.c
parentecb7e1ff3ec73000918c56861c55258c2d4deada (diff)
downloadgpsd-28bf37132d86cc59320e21d843960d086cef664c.tar.gz
Retire splint from our set of static analyzers.
The proximate cause was that we've been seing emission of error messages that were randomly and disturbingly variable across different environments - notably Raspbian and Gentoo splint gave nontrivially different results than Ubuntu 14.10 splint. And this was *not* due to Ubuntu patches! A pristine splint built from the 3.1.2 tarball on Ubuntu didn't match the Raspbian and Gentoo results either. But this has been coming for a while. Easy access to more modern static analyzers such as coverity, scan-build and cppcheck has been decreasing the utility of splint, which is unmaintained and somewhat buggy and not easy to use. Only file not cleaned is ppsthread.c, because Gary has been working on it during this cleanup. All regression tests pass. PPS observed live on GR601-W.
Diffstat (limited to 'libgps_sock.c')
-rw-r--r--libgps_sock.c33
1 files changed, 5 insertions, 28 deletions
diff --git a/libgps_sock.c b/libgps_sock.c
index a87cd444..169a9003 100644
--- a/libgps_sock.c
+++ b/libgps_sock.c
@@ -17,15 +17,11 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/select.h>
-#ifndef S_SPLINT_S
#include <sys/socket.h>
#include <unistd.h>
-#endif /* S_SPLINT_S */
#ifndef USE_QT
-#ifndef S_SPLINT_S
#include <sys/socket.h>
-#endif /* S_SPLINT_S */
#else
#include <QTcpSocket>
#endif /* USE_QT */
@@ -37,11 +33,6 @@
#ifdef SOCKET_EXPORT_ENABLE
#include "gps_json.h"
-#ifdef S_SPLINT_S
-extern char *strtok_r(char *, const char *, char **);
-#endif /* S_SPLINT_S */
-
-/*@-matchfields@*/
struct privdata_t
{
bool newstyle;
@@ -52,11 +43,9 @@ struct privdata_t
int waitcount;
#endif /* LIBGPS_DEBUG */
};
-/*@+matchfields@*/
-/*@-branchstate@*/
-int gps_sock_open(/*@null@*/const char *host, /*@null@*/const char *port,
- /*@out@*/ struct gps_data_t *gpsdata)
+int gps_sock_open(const char *host, const char *port,
+ struct gps_data_t *gpsdata)
{
if (!host)
host = "localhost";
@@ -96,7 +85,6 @@ int gps_sock_open(/*@null@*/const char *host, /*@null@*/const char *port,
#endif /* LIBGPS_DEBUG */
return 0;
}
-/*@+branchstate@*/
bool gps_sock_waiting(const struct gps_data_t *gpsdata, int timeout)
/* is there input waiting from the GPS? */
@@ -124,7 +112,6 @@ bool gps_sock_waiting(const struct gps_data_t *gpsdata, int timeout)
#endif
}
-/*@-usereleased -compdef@*/
int gps_sock_close(struct gps_data_t *gpsdata)
/* close a gpsd connection */
{
@@ -143,10 +130,8 @@ int gps_sock_close(struct gps_data_t *gpsdata)
return 0;
#endif
}
-/*@+usereleased +compdef@*/
-/*@-compdef -usedef -uniondef@*/
-int gps_sock_read(/*@out@*/struct gps_data_t *gpsdata)
+int gps_sock_read(struct gps_data_t *gpsdata)
/* wait for and read data being streamed from the daemon */
{
char *eol;
@@ -213,18 +198,14 @@ int gps_sock_read(/*@out@*/struct gps_data_t *gpsdata)
response_length = eol - PRIVATE(gpsdata)->buffer + 1;
gpsdata->online = timestamp();
status = gps_unpack(PRIVATE(gpsdata)->buffer, gpsdata);
- /*@+matchanyintegral@*/
memmove(PRIVATE(gpsdata)->buffer,
PRIVATE(gpsdata)->buffer + response_length, PRIVATE(gpsdata)->waiting - response_length);
- /*@-matchanyintegral@*/
PRIVATE(gpsdata)->waiting -= response_length;
gpsdata->set |= PACKET_SET;
return (status == 0) ? (int)response_length : status;
}
-/*@+compdef -usedef +uniondef@*/
-/*@ -branchstate -usereleased -mustfreefresh -nullstate -usedef @*/
int gps_unpack(char *buf, struct gps_data_t *gpsdata)
/* unpack a gpsd response into a status structure, buf must be writeable.
* gps_unpack() currently returns 0 in all cases, but should it ever need to
@@ -253,9 +234,8 @@ int gps_unpack(char *buf, struct gps_data_t *gpsdata)
#endif
return 0;
}
-/*@ +compdef @*/
-const char /*@observer@*/ *gps_sock_data(const struct gps_data_t *gpsdata)
+const char *gps_sock_data(const struct gps_data_t *gpsdata)
/* return the contents of the client data buffer */
{
return PRIVATE(gpsdata)->buffer;
@@ -281,8 +261,7 @@ int gps_sock_send(struct gps_data_t *gpsdata, const char *buf)
#endif
}
-int gps_sock_stream(struct gps_data_t *gpsdata, unsigned int flags,
- /*@null@*/ void *d)
+int gps_sock_stream(struct gps_data_t *gpsdata, unsigned int flags, void *d)
/* ask gpsd to stream reports at you, hiding the command details */
{
char buf[GPS_JSON_COMMAND_MAX];
@@ -330,10 +309,8 @@ int gps_sock_stream(struct gps_data_t *gpsdata, unsigned int flags,
(void)strlcat(buf, "\"split24\":true,", sizeof(buf));
if (flags & WATCH_PPS)
(void)strlcat(buf, "\"pps\":true,", sizeof(buf));
- /*@-nullpass@*//* shouldn't be needed, splint has a bug */
if (flags & WATCH_DEVICE)
str_appendf(buf, sizeof(buf), "\"device\":\"%s\",", (char *)d);
- /*@+nullpass@*/
str_rstrip_char(buf, ',');
(void)strlcat(buf, "};", sizeof(buf));
libgps_debug_trace((DEBUG_CALLS, "gps_stream() enable command: %s\n", buf));