| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This creates a header for os_compat.c, and moves the related
prototypes into it from gpsd_config.h (as created by SConstruct),
after adding references to it to gpsd.h (via gpsd.h-tail) and a few
other sources that need it but don't include gpsd.h.
It also removes includes of <time.h> in the places where they were
only needed for the code now removed from gpsd_config.h.
TESTED:
Ran "scons build-all check" on OSX 10.9 (with strlcat/strlcpy but no
clock_gettime), OSX 10.12 (with strlcat/strlcpy and clock_gettime),
and Ubuntu 14 (with clock_gettime but no strlcat/strlcpy). Also
verified that fallback versions were not being included where
unnecessary.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fred Wright <fhgwright> writes:
While trying the regression tests on a MacBook (PowerPC), I ran across
some failures in the JSON unit test. Although this is ostensibly an
endian issue, it turns out that the code for parsing satellite view
data is actually incorrect for all processors, albeit more so for
big-endian processors.
The problem is that the three "integer" fields in struct satellite_t
are defined as shorts, but parsed as ints by the JSON parser. On a
big-endian processor, this causes the values to be misaddressed and
hence have incorrect values, but even on a little-endian processor
this is incorrect since it's storing four-byte values into two-byte
fields. The unit tests don't catch this aspect, since the fields are
favorably ordered such that the clobbered fields are clobbered before
being written pseudo-correctly.
I was able to demonstrate the "buffer overflow" misbehavior by
modifying the test data for the last satellite to provide the fields
in the reverse order from their order in the structure.
The simple fix for this would be just to change the shorts to ints in
the definition of struct satellite_t. On most processors, this doesn't
even cost any memory, since the presence of the double forces
eight-bye alignment, so the padded structure is 24 bytes regardless of
whether the three fields in question are shorts or ints. However,
there might be some processors with less strict alignment requirements
where using shorts would actually be helpful.
With the existing layout, the only possible fix is to add support for
shorts to the JSON parser, and adjust the satellite-view parsing
accordingly. The attached patch does that, as well as adding u_short
support for completeness (though it's not currently used). It also
provides the aforementioned change in the test data, in keeping with
the philosophy of "create a test for what just failed, so it doesn't
happen again".
Note that using shorts for these fields would be more effective if the
"used" field were also reduced to a short, instead of inheriting "int"
from "bool". That would shrink the structure to 16 bytes. It could be
further reduced to 12 bytes by using a float instead of a double for
the "ss" field (and even a float is gross overkill for this
purpose). This could all be more significant when MAXCHANNELS needs to
be increased (again) to accommodate the deployment of the newer
GNSSes.
|
|
|
|
|
| |
guard on FILE * not being NULL
initialize the buffer for easier debugging
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The proximate cause was that we've been seing emission of error
messages that were randomly and disturbingly variable across different
environments - notably Raspbian and Gentoo splint gave nontrivially
different results than Ubuntu 14.10 splint. And this was *not* due to
Ubuntu patches! A pristine splint built from the 3.1.2 tarball on
Ubuntu didn't match the Raspbian and Gentoo results either.
But this has been coming for a while. Easy access to more modern
static analyzers such as coverity, scan-build and cppcheck has been
decreasing the utility of splint, which is unmaintained and somewhat
buggy and not easy to use.
Only file not cleaned is ppsthread.c, because Gary has been working
on it during this cleanup.
All regression tests pass. PPS observed live on GR601-W.
|
| |
|
|
|
|
|
|
| |
gpsd_config.h needs time_t which is in time.h
OS X builds now. Untested.
|
|
|
|
| |
This change doesn't affect generated binary code.
|
|
|
|
| |
This change doesn't affect generated binary code.
|
|
|
|
|
|
| |
Don't use constant/expression from an array's definition when referring
to its size. Eliminates redundancy and avoids problems when array size
changes. The change doesn't affect generated code.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
All regression tests pass.
|
|
|
|
|
|
| |
Now supported: JSON arrays with int, unit, bool, and real elements.
All regressiion tests pass.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Cygwin GCC complains about code like isprint(c), where c is of type char.
The isX() and toX() functions/macros (ISO C allows either) all accept an
int, whose value should be either that of an unsigned char, or the
special value EOF (== -1).
So cast to unsigned char each argument to isprint, tolower, etc.
Silences several warnings of the form:
gpsutils.c: In function 'safe_atof':
gpsutils.c:90:5: warning: array subscript has type 'char'
[-Wchar-subscripts]
while (isspace(*p)) {
^
gpsutils.c:188:2: warning: array subscript has type 'char'
[-Wchar-subscripts]
while (isdigit(*p)) {
^
|
| |
|
|
|
|
| |
...and it's used for the new dependent _text attributes.
|
| |
|
|
|
|
|
|
|
|
| |
...rather than using type-punning pointer casts. With optimization
this will generate similarly-performing or even identical code on most
architectures/compilers.
Signed-off-by: Eric S. Raymond <esr@thyrsus.com>
|
| |
|
| |
|
|
|
|
|
| |
Should never happen, but having the bailout logic in plavce creates static
invariants that should banish a bunch of Coverity warnings.
|
| |
|
| |
|
|
|
|
|
| |
This solves Berlios tracker bug #18328: Wrong/bad locale handling in
json_read_object. All regression tests (including the JSON unit test) pass.
|
| |
|
|
|
|
| |
All regression tests pass. Livetesting with cgps looks good.
|
| |
|
|
|
|
|
|
|
| |
Sigh, no other way to get DEVICELIST to recignize both new and old
timestamps.
All regression tests pass.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Fixes Berlios tracker bug #17379: problem with different locale.
|
|
|
|
|
| |
Most of the bulk of this one is the xgpsspeed code, which was not
formerly incldecd in reindenting.
|
|
|
|
| |
...and in doing so, fix a bug in AIS parsing.
|
| |
|
| |
|