summaryrefslogtreecommitdiff
path: root/libgpsd_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgpsd_core.c')
-rw-r--r--libgpsd_core.c88
1 files changed, 16 insertions, 72 deletions
diff --git a/libgpsd_core.c b/libgpsd_core.c
index 33d2a48a..bd821a60 100644
--- a/libgpsd_core.c
+++ b/libgpsd_core.c
@@ -25,11 +25,9 @@
#include <sys/select.h>
#include <sys/stat.h>
#include <assert.h>
-#ifndef S_SPLINT_S
#include <sys/wait.h>
#include <sys/socket.h>
#include <unistd.h>
-#endif /* S_SPLINT_S */
#include "gpsd.h"
#include "matrix.h"
@@ -63,9 +61,7 @@ static pthread_mutex_t report_mutex;
void gpsd_acquire_reporting_lock(void)
{
int err;
- /*@ -unrecog (splint has no pthread declarations as yet) @*/
err = pthread_mutex_lock(&report_mutex);
- /*@ +unrecog @*/
if ( 0 != err ) {
/* POSIX says pthread_mutex_lock() should only fail if the
thread holding the lock has died. Best for gppsd to just die
@@ -80,9 +76,7 @@ void gpsd_acquire_reporting_lock(void)
void gpsd_release_reporting_lock(void)
{
int err;
- /*@ -unrecog (splint has no pthread declarations as yet) @*/
err = pthread_mutex_unlock(&report_mutex);
- /*@ +unrecog @*/
if ( 0 != err ) {
/* POSIX says pthread_mutex_unlock() should only fail when
trying to unlock a lock that does not exist, or is not owned by
@@ -97,7 +91,7 @@ void gpsd_release_reporting_lock(void)
#endif /* PPS_ENABLE */
#ifndef SQUELCH_ENABLE
-static void visibilize(/*@out@*/char *outbuf, size_t outlen,
+static void visibilize(char *outbuf, size_t outlen,
const char *inbuf, size_t inlen)
{
const char *sp;
@@ -248,10 +242,8 @@ static void gpsd_run_device_hook(struct gpsd_errout_t *errout,
}
}
-/*@-kepttrans@*/
int gpsd_switch_driver(struct gps_device_t *session, char *type_name)
{
- /*@-mustfreeonly@*/
const struct gps_type_t **dp;
bool first_sync = (session->device_type != NULL);
unsigned int i;
@@ -261,14 +253,13 @@ int gpsd_switch_driver(struct gps_device_t *session, char *type_name)
gpsd_log(&session->context->errout, LOG_PROG,
"switch_driver(%s) called...\n", type_name);
- /*@ -compmempass @*/
for (dp = gpsd_drivers, i = 0; *dp; dp++, i++)
if (strcmp((*dp)->type_name, type_name) == 0) {
gpsd_log(&session->context->errout, LOG_PROG,
"selecting %s driver...\n",
(*dp)->type_name);
gpsd_assert_sync(session);
- /*@i@*/ session->device_type = *dp;
+ session->device_type = *dp;
session->driver_index = i;
#ifdef RECONFIGURE_ENABLE
session->gpsdata.dev.mincycle = session->device_type->min_cycle;
@@ -286,14 +277,10 @@ int gpsd_switch_driver(struct gps_device_t *session, char *type_name)
gpsd_log(&session->context->errout, LOG_ERROR,
"invalid GPS type \"%s\".\n", type_name);
return 0;
- /*@ +compmempass @*/
- /*@+mustfreeonly@*/
}
-/*@+kepttrans@*/
-/*@-compdestroy -mustfreeonly -observertrans -dependenttrans@*/
void gps_context_init(struct gps_context_t *context,
- /*@observer@*/const char *label)
+ const char *label)
{
(void)memset(context, '\0', sizeof(struct gps_context_t));
//context.readonly = false;
@@ -305,32 +292,23 @@ void gps_context_init(struct gps_context_t *context,
errout_reset(&context->errout);
context->errout.label = (char *)label;
-#if !defined(S_SPLINT_S) && defined(PPS_ENABLE)
- /*@-nullpass@*/
+#if defined(PPS_ENABLE)
(void)pthread_mutex_init(&report_mutex, NULL);
- /*@+nullpass@*/
-#endif /* defined(S_SPLINT_S) defined(PPS_ENABLE) */
+#endif /* defined(PPS_ENABLE) */
}
-/*@+compdestroy +mustfreeonly +observertrans +dependenttrans@*/
void gpsd_init(struct gps_device_t *session, struct gps_context_t *context,
const char *device)
/* initialize GPS polling */
{
- /*@ -mayaliasunique @*/
if (device != NULL)
(void)strlcpy(session->gpsdata.dev.path, device,
sizeof(session->gpsdata.dev.path));
- /*@ -mustfreeonly @*/
session->device_type = NULL; /* start by hunting packets */
session->observed = 0;
session->sourcetype = source_unknown; /* gpsd_open() sets this */
session->servicetype = service_unknown; /* gpsd_open() sets this */
- /*@ -temptrans @*/
session->context = context;
- /*@ +temptrans @*/
- /*@ +mayaliasunique @*/
- /*@ +mustfreeonly @*/
memset( session->subtype, 0, sizeof( session->subtype));
gps_clear_fix(&session->gpsdata.fix);
gps_clear_fix(&session->newdata);
@@ -382,10 +360,8 @@ void gpsd_deactivate(struct gps_device_t *session)
session->gpsdata.dev.path,
"DEACTIVATE");
#ifdef PPS_ENABLE
- /*@-mustfreeonly@*/
session->pps_thread.report_hook = NULL; /* tell any PPS-watcher thread to die */
#endif /* PPS_ENABLE */
- /*@-mustfreeonly@*/
/* mark it inactivated */
session->gpsdata.online = (timestamp_t)0;
}
@@ -425,7 +401,6 @@ static void ppsthread_log(volatile struct pps_thread_t *pps_thread,
#endif /* PPS_ENABLE */
-/*@-usereleased -compdef -compmempass@*/
void gpsd_clear(struct gps_device_t *session)
/* device has been opened - clear its storage for use */
{
@@ -446,15 +421,14 @@ void gpsd_clear(struct gps_device_t *session)
/* set up the context structure for the PPS thread monitor */
memset((void *)&session->pps_thread, 0, sizeof(session->pps_thread));
session->pps_thread.devicefd = session->gpsdata.gps_fd;
- /*@i2@*/session->pps_thread.devicename = session->gpsdata.dev.path;
+ session->pps_thread.devicename = session->gpsdata.dev.path;
session->pps_thread.pps_hook = NULL;
session->pps_thread.log_hook = ppsthread_log;
- /*@i4@*/session->pps_thread.context = (void *)session;
+ session->pps_thread.context = (void *)session;
#endif /* PPS_ENABLE */
session->opentime = time(NULL);
}
-/*@+usereleased +compdef +compmempass@*/
int gpsd_open(struct gps_device_t *session)
/* open a device for access to its data */
@@ -527,7 +501,6 @@ int gpsd_open(struct gps_device_t *session)
#endif /* NETFEED_ENABLE */
#ifdef PASSTHROUGH_ENABLE
if (str_starts_with(session->gpsdata.dev.path, "gpsd://")) {
- /*@-branchstate -nullpass@*/
char server[strlen(session->gpsdata.dev.path)+1], *port;
socket_t dsock;
(void)strlcpy(server, session->gpsdata.dev.path + 7, sizeof(server));
@@ -547,23 +520,21 @@ int gpsd_open(struct gps_device_t *session)
} else
gpsd_log(&session->context->errout, LOG_SPIN,
"remote gpsd feed opened on fd %d\n", dsock);
- /*@+branchstate +nullpass@*/
/* watch to remote is issued when WATCH is */
session->gpsdata.gps_fd = dsock;
session->sourcetype = source_gpsd;
return session->gpsdata.gps_fd;
}
#endif /* PASSTHROUGH_ENABLE */
-#if defined(NMEA2000_ENABLE) && !defined(S_SPLINT_S)
+#if defined(NMEA2000_ENABLE)
if (str_starts_with(session->gpsdata.dev.path, "nmea2000://")) {
return nmea2000_open(session);
}
-#endif /* defined(NMEA2000_ENABLE) && !defined(S_SPLINT_S) */
+#endif /* defined(NMEA2000_ENABLE) */
/* fall through to plain serial open */
return gpsd_serial_open(session);
}
-/*@ -branchstate @*/
int gpsd_activate(struct gps_device_t *session, const int mode)
/* acquire a connection to the GPS device */
{
@@ -584,7 +555,6 @@ int gpsd_activate(struct gps_device_t *session, const int mode)
(session->sourcetype != source_can)) {
const struct gps_type_t **dp;
- /*@ -mustfreeonly @*/
for (dp = gpsd_drivers; *dp; dp++) {
if ((*dp)->probe_detect != NULL) {
gpsd_log(&session->context->errout, LOG_PROG,
@@ -605,7 +575,6 @@ int gpsd_activate(struct gps_device_t *session, const int mode)
(*dp)->type_name);
}
}
- /*@ +mustfreeonly @*/
gpsd_log(&session->context->errout, LOG_PROG,
"no probe matched...\n");
}
@@ -628,7 +597,6 @@ int gpsd_activate(struct gps_device_t *session, const int mode)
return session->gpsdata.gps_fd;
}
-/*@ +branchstate @*/
#ifndef NOFLOATS_ENABLE
/*****************************************************************************
@@ -828,7 +796,6 @@ static gps_mask_t fill_dop(const struct gpsd_errout_t *errout,
dop->vdop, pdop, dop->pdop, tdop, dop->tdop, gdop, dop->gdop);
#endif
- /*@ -usedef @*/
if (isnan(dop->xdop) != 0) {
dop->xdop = xdop;
}
@@ -850,7 +817,6 @@ static gps_mask_t fill_dop(const struct gpsd_errout_t *errout,
if (isnan(dop->gdop) != 0) {
dop->gdop = gdop;
}
- /*@ +usedef @*/
return DOP_SET;
}
@@ -1002,18 +968,15 @@ static void gpsd_error_model(struct gps_device_t *session,
}
/* save old fix for later error computations */
- /*@ -mayaliasunique @*/
if (fix->mode >= MODE_2D)
(void)memcpy(oldfix, fix, sizeof(struct gps_fix_t));
- /*@ +mayaliasunique @*/
}
#endif /* NOFLOATS_ENABLE */
-/*@ -mustdefine -compdef @*/
-int gpsd_await_data(/*@out@*/fd_set *rfds,
- /*@out@*/fd_set *efds,
+int gpsd_await_data(fd_set *rfds,
+ fd_set *efds,
const int maxfd,
- /*@in@*/fd_set *all_fds,
+ fd_set *all_fds,
struct gpsd_errout_t *errout)
/* await data from any socket in the all_fds set */
{
@@ -1034,7 +997,6 @@ int gpsd_await_data(/*@out@*/fd_set *rfds,
* the once-per-second wakeup when no sensors are attached.
* This cuts power consumption.
*/
- /*@ -usedef -nullpass @*/
errno = 0;
status = pselect(maxfd + 1, rfds, NULL, NULL, NULL, NULL);
@@ -1058,7 +1020,6 @@ int gpsd_await_data(/*@out@*/fd_set *rfds,
return AWAIT_FAILED;
}
}
- /*@ +usedef +nullpass @*/
if (errout->debug >= LOG_SPIN) {
int i;
@@ -1079,7 +1040,6 @@ int gpsd_await_data(/*@out@*/fd_set *rfds,
return AWAIT_GOT_INPUT;
}
-/*@ +mustdefine +compdef @*/
static bool hunt_failure(struct gps_device_t *session)
/* after a bad packet, what should cue us to go to next autobaud setting? */
@@ -1191,9 +1151,7 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
#endif /* TIMING_ENABLE */
if (session->lexer.type >= COMMENT_PACKET) {
- /*@-shiftnegative@*/
session->observed |= PACKET_TYPEMASK(session->lexer.type);
- /*@+shiftnegative@*/
}
/* can we get a full packet from the device? */
@@ -1278,7 +1236,6 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
*/
driver_change = new_packet_type && !dependent_nmea;
}
- /*@-nullderef@*/
if (driver_change) {
const struct gps_type_t **dp;
@@ -1291,7 +1248,6 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
break;
}
}
- /*@+nullderef@*/
session->badcount = 0;
session->gpsdata.dev.driver_mode = (session->lexer.type > NMEA_PACKET) ? MODE_BINARY : MODE_NMEA;
/* FALL THROUGH */
@@ -1322,7 +1278,6 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
&& (session->drivers_identified & (1 << session->driver_index)) == 0) {
speed_t speed = gpsd_get_speed(session);
- /*@-nullderef@*/
/* coverity[var_deref_op] */
gpsd_log(&session->context->errout, LOG_INF,
"%s identified as type %s, %ld sec @ %ubps\n",
@@ -1330,7 +1285,6 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
session->device_type->type_name,
time(NULL) - session->opentime,
(unsigned int)speed);
- /*@+nullderef@*/
/* fire the init_query method */
if (session->device_type != NULL
@@ -1390,7 +1344,6 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
* methods or an event hook had been active before that, we
* keep the information about those capabilities.
*/
- /*@-mustfreeonly@*/
if (!STICKY(session->device_type)
&& session->last_controller != NULL
&& STICKY(session->last_controller))
@@ -1400,7 +1353,6 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
"reverted to %s driver...\n",
session->device_type->type_name);
}
- /*@+mustfreeonly@*/
#endif /* RECONFIGURE_ENABLE */
#ifdef TIMING_ENABLE
@@ -1429,7 +1381,6 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
#endif /* NOFLOATS_ENABLE */
/* copy/merge device data into staging buffers */
- /*@-nullderef -nullpass@*/
if ((session->gpsdata.set & CLEAR_IS) != 0)
gps_clear_fix(&session->gpsdata.fix);
/* don't downgrade mode if holding previous fix */
@@ -1440,10 +1391,9 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
gps_merge_fix(&session->gpsdata.fix,
session->gpsdata.set, &session->newdata);
#ifndef NOFLOATS_ENABLE
- /*@i1@*/gpsd_error_model(session, &session->gpsdata.fix, &session->oldfix);
+ gpsd_error_model(session, &session->gpsdata.fix, &session->oldfix);
#endif /* NOFLOATS_ENABLE */
- /*@+nullderef -nullpass@*/
/*
* Count good fixes. We used to check
@@ -1471,7 +1421,6 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
* Sanity check. This catches a surprising number of port and
* driver errors, including 32-vs.-64-bit problems.
*/
- /*@+relaxtypes +longunsignedintegral@*/
if ((session->gpsdata.set & TIME_SET) != 0) {
if (session->newdata.time > time(NULL) + (60 * 60 * 24 * 365))
gpsd_log(&session->context->errout, LOG_WARN,
@@ -1480,7 +1429,6 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
gpsd_log(&session->context->errout, LOG_ERROR,
"date is negative!\n");
}
- /*@-relaxtypes -longunsignedintegral@*/
return session->gpsdata.set;
}
@@ -1605,7 +1553,7 @@ int gpsd_multipoll(const bool data_ready,
/* handle data contained in this packet */
if (device->lexer.type != BAD_PACKET)
- /*@i1@*/handler(device, changed);
+ handler(device, changed);
#ifdef __future__
/*
@@ -1643,7 +1591,7 @@ void gpsd_wrap(struct gps_device_t *session)
gpsd_deactivate(session);
}
-void gpsd_zero_satellites( /*@out@*/ struct gps_data_t *out)
+void gpsd_zero_satellites( struct gps_data_t *out)
{
(void)memset(out->skyview, '\0', sizeof(out->skyview));
out->satellites_visible = 0;
@@ -1659,7 +1607,7 @@ void gpsd_zero_satellites( /*@out@*/ struct gps_data_t *out)
}
#ifdef NTP_ENABLE
-void ntp_latch(struct gps_device_t *device, struct timedelta_t /*@out@*/*td)
+void ntp_latch(struct gps_device_t *device, struct timedelta_t *td)
/* latch the fact that we've saved a fix */
{
double fix_time, integral, fractional;
@@ -1684,16 +1632,12 @@ void ntp_latch(struct gps_device_t *device, struct timedelta_t /*@out@*/*td)
* fix_time is in microSec
* OK since GPS timestamps are millSec or worse */
fractional = modf(fix_time, &integral);
- /*@-type@*/ /* splint is confused about struct timespec */
td->real.tv_sec = (time_t)integral;
td->real.tv_nsec = (long)(fractional * 1e+9);
- /*@+type@*/
#ifdef PPS_ENABLE
/* thread-safe update */
- /*@-compdef@*/
pps_thread_fixin(&device->pps_thread, td);
- /*@+compdef@*/
#endif /* PPS_ENABLE */
}
#endif /* NTP_ENABLE */