summaryrefslogtreecommitdiff
path: root/libgps_shm.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2011-09-28 00:47:59 -0400
committerEric S. Raymond <esr@thyrsus.com>2011-09-28 00:47:59 -0400
commit6b0650169ade1c34425fec5a9605a0b651b3b0b4 (patch)
treea6b1792d8d6ecc5407cfdae4e646a5e8dd1322c5 /libgps_shm.c
parentd70cac3fd2ab8ec27d8297dd2af07f5273233645 (diff)
downloadgpsd-6b0650169ade1c34425fec5a9605a0b651b3b0b4.tar.gz
Abstract out the shm export main loop.
Diffstat (limited to 'libgps_shm.c')
-rw-r--r--libgps_shm.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/libgps_shm.c b/libgps_shm.c
index c14ef4ea..82c35968 100644
--- a/libgps_shm.c
+++ b/libgps_shm.c
@@ -109,6 +109,21 @@ void gps_shm_close(struct gps_data_t *gpsdata)
(void)shmdt((const void *)gpsdata->privdata);
}
+int gps_shm_mainloop(struct gps_data_t *gpsdata, int timeout UNUSED,
+ void (*hook)(struct gps_data_t *gpsdata))
+/* run a shm main loop with a specified handler */
+{
+ for (;;) {
+ int status = gps_shm_read(gpsdata);
+
+ if (status == -1)
+ return -1;
+ if (status > 0)
+ (*hook)(gpsdata);
+ }
+ return 0;
+}
+
#endif /* SHM_EXPORT_ENABLE */
/* end */