summaryrefslogtreecommitdiff
path: root/libgps_sock.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2011-09-27 15:49:40 -0400
committerEric S. Raymond <esr@thyrsus.com>2011-09-27 15:49:40 -0400
commite7ad4f5d8ccb1203b6590c763444755c58a1d759 (patch)
treeabe00dad0624148a28228fba247a54b9567384a4 /libgps_sock.c
parentc7d7030b8881be73bbbe1492ef4ddd6892d81a2f (diff)
downloadgpsd-e7ad4f5d8ccb1203b6590c763444755c58a1d759.tar.gz
Converge the library APIs for different transports more closely.
Diffstat (limited to 'libgps_sock.c')
-rw-r--r--libgps_sock.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/libgps_sock.c b/libgps_sock.c
index ae4d45c3..cc4c8234 100644
--- a/libgps_sock.c
+++ b/libgps_sock.c
@@ -566,15 +566,17 @@ int gps_sock_stream(struct gps_data_t *gpsdata, unsigned int flags,
}
int gps_sock_mainloop(struct gps_data_t *gpsdata, int timeout,
- void (*hook)(struct gps_data_t *gpsdata))
+ int (*hook)(struct gps_data_t *gpsdata, bool))
/* run a socket main loop with a specified handler */
{
for (;;) {
- if (!gps_waiting(gpsdata, timeout)) {
- return -1;
+ if (!gps_sock_waiting(gpsdata, timeout)) {
+ if ((*hook)(gpsdata, false) != 0)
+ break;
} else {
- (void)gps_read(gpsdata);
- (*hook)(gpsdata);
+ (void)gps_sock_read(gpsdata);
+ if ((*hook)(gpsdata, true) != 0)
+ break;
}
}
(void)gps_close(gpsdata);