diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2011-09-28 00:47:59 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2011-09-28 00:47:59 -0400 |
commit | 6b0650169ade1c34425fec5a9605a0b651b3b0b4 (patch) | |
tree | a6b1792d8d6ecc5407cfdae4e646a5e8dd1322c5 /libgps_shm.c | |
parent | d70cac3fd2ab8ec27d8297dd2af07f5273233645 (diff) | |
download | gpsd-6b0650169ade1c34425fec5a9605a0b651b3b0b4.tar.gz |
Abstract out the shm export main loop.
Diffstat (limited to 'libgps_shm.c')
-rw-r--r-- | libgps_shm.c | 15 |
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 */ |