diff options
author | Gary E. Miller <gem@rellim.com> | 2015-04-28 18:07:54 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2015-04-28 18:09:29 -0700 |
commit | 838d9fefa4bef2469cf2c6e8ec908e949215d8ee (patch) | |
tree | 31959f15be5eb75e83585c0d86ce566fd4040cf0 /libgps_shm.c | |
parent | 8559faf6866ec954fde105c32e4b07cb69bba64b (diff) | |
download | gpsd-838d9fefa4bef2469cf2c6e8ec908e949215d8ee.tar.gz |
Revert "Copy structs using assignment, not memcpy()."
This reverts commit d1965788249d7e22cdde4021d452cf0dc6c6b9bd.
This breaks my build on Gentoo running gcc 4.9.2
libgps_shm.c: In function 'int gps_shm_read(gps_data_t*)':
libgps_shm.c:122:12: error: no match for 'operator=' (operand types are
'gps_data_t' and 'volatile gps_data_t')
noclobber = shared->gpsdata;
^
libgps_shm.c:122:12: note: candidate is:
In file included from gpsd.h:350:0,
from libgps_shm.c:30:
gps.h:1918:8: note: gps_data_t& gps_data_t::operator=(const gps_data_t&)
struct gps_data_t {
^
gps.h:1918:8: note: no known conversion for argument 1 from 'volatile
gps_data_t' to 'const gps_data_t&'
Diffstat (limited to 'libgps_shm.c')
-rw-r--r-- | libgps_shm.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/libgps_shm.c b/libgps_shm.c index d32add79..34de8efa 100644 --- a/libgps_shm.c +++ b/libgps_shm.c @@ -119,14 +119,18 @@ int gps_shm_read(struct gps_data_t *gpsdata) */ before = shared->bookend1; memory_barrier(); - noclobber = shared->gpsdata; + (void)memcpy((void *)&noclobber, + (void *)&shared->gpsdata, + sizeof(struct gps_data_t)); memory_barrier(); after = shared->bookend2; if (before != after) return 0; else { - *gpsdata = noclobber; + (void)memcpy((void *)gpsdata, + (void *)&noclobber, + sizeof(struct gps_data_t)); gpsdata->privdata = private_save; PRIVATE(gpsdata)->tick = after; if ((gpsdata->set & REPORT_IS)!=0) { |