summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver_aivdm.c2
-rw-r--r--drivers.c4
-rw-r--r--gpsd.h-tail5
-rw-r--r--gpsd_json.c12
-rw-r--r--hex.c43
-rw-r--r--packet.c8
-rw-r--r--serial.c4
7 files changed, 41 insertions, 37 deletions
diff --git a/driver_aivdm.c b/driver_aivdm.c
index 2c55935b..2dd2cc19 100644
--- a/driver_aivdm.c
+++ b/driver_aivdm.c
@@ -207,7 +207,7 @@ bool aivdm_decode(const char *buf, size_t buflen,
size_t clen = (ais_context->bitlen + 7) / 8;
gpsd_report(LOG_INF, "AIVDM payload is %zd bits, %zd chars: %s\n",
ais_context->bitlen, clen,
- gpsd_hexdump(ais_context->bits, clen));
+ gpsd_hexdump((char *)ais_context->bits, clen));
}
/* clear waiting fragments count */
diff --git a/drivers.c b/drivers.c
index 0b36101d..31351d4a 100644
--- a/drivers.c
+++ b/drivers.c
@@ -894,13 +894,13 @@ static const struct gps_type_t oceanServer = {
static gps_mask_t rtcm104v2_analyze(struct gps_device_t *session)
{
rtcm2_unpack(&session->gpsdata.rtcm2, (char *)session->packet.isgps.buf);
- /* extra guard prevents expensive gpsd_hexdump() calls */
+ /* extra guard prevents expensive hexdump calls */
if (session->context->debug >= LOG_RAW)
gpsd_report(LOG_RAW, "RTCM 2.x packet type 0x%02x length %d words from %zd bytes: %s\n",
session->gpsdata.rtcm2.type,
session->gpsdata.rtcm2.length + 2,
session->packet.isgps.buflen,
- gpsd_hexdump(session->packet.isgps.buf,
+ gpsd_hexdump((char *)session->packet.isgps.buf,
(session->gpsdata.rtcm2.length +
2) * sizeof(isgps30bits_t)));
session->cycle_end_reliable = true;
diff --git a/gpsd.h-tail b/gpsd.h-tail
index 16d92d93..22de2d5b 100644
--- a/gpsd.h-tail
+++ b/gpsd.h-tail
@@ -651,7 +651,7 @@ extern void ntrip_report(struct gps_context_t *,
extern void gpsd_tty_init(struct gps_device_t *);
extern int gpsd_serial_open(struct gps_device_t *);
extern bool gpsd_set_raw(struct gps_device_t *);
-extern ssize_t gpsd_write(struct gps_device_t *, char const *, size_t);
+extern ssize_t gpsd_write(struct gps_device_t *, const char *, size_t);
extern bool gpsd_next_hunt_setting(struct gps_device_t *);
extern int gpsd_switch_driver(struct gps_device_t *, char *);
extern void gpsd_set_speed(struct gps_device_t *, speed_t, char, unsigned int);
@@ -669,8 +669,7 @@ extern gps_mask_t gpsd_interpret_subframe(struct gps_device_t *, unsigned int,
uint32_t[]);
extern gps_mask_t gpsd_interpret_subframe_raw(struct gps_device_t *,
unsigned int, uint32_t[]);
-extern /*@ observer @*/ char *gpsd_hexdump(/*@null@*/const void *, size_t);
-extern /*@ observer @*/ char *gpsd_hexdump_wrapper(/*@null@*/const void *, size_t, int);
+extern /*@ observer @*/ char *gpsd_hexdump(/*@null@*/char *, size_t);
extern int gpsd_hexpack(/*@in@*/const char *, /*@out@*/char *, size_t);
extern int hex2bin(const char *);
extern ssize_t hex_escapes(/*@out@*/char *, const char *);
diff --git a/gpsd_json.c b/gpsd_json.c
index 302d768f..e11fbc52 100644
--- a/gpsd_json.c
+++ b/gpsd_json.c
@@ -2010,7 +2010,7 @@ void json_aivdm_dump(const struct ais_t *ais,
(void)snprintf(buf + strlen(buf), buflen - strlen(buf),
"\"data\":\"%zd:%s\"}\r\n",
ais->type6.bitcount,
- gpsd_hexdump(ais->type6.bitdata,
+ gpsd_hexdump((char *)ais->type6.bitdata,
(ais->type6.bitcount + 7) / 8));
break;
case 7: /* Binary Acknowledge */
@@ -2340,7 +2340,7 @@ void json_aivdm_dump(const struct ais_t *ais,
(void)snprintf(buf + strlen(buf), buflen - strlen(buf),
"\"data\":\"%zd:%s\"}\r\n",
ais->type8.bitcount,
- gpsd_hexdump(ais->type8.bitdata,
+ gpsd_hexdump((char *)ais->type8.bitdata,
(ais->type8.bitcount + 7) / 8));
break;
case 9: /* Standard SAR Aircraft Position Report */
@@ -2452,7 +2452,7 @@ void json_aivdm_dump(const struct ais_t *ais,
ais->type17.lon / AIS_GNSS_LATLON_SCALE,
ais->type17.lat / AIS_GNSS_LATLON_SCALE,
ais->type17.bitcount,
- gpsd_hexdump(ais->type17.bitdata,
+ gpsd_hexdump((char *)ais->type17.bitdata,
(ais->type17.bitcount + 7) / 8));
} else {
(void)snprintf(buf + strlen(buf), buflen - strlen(buf),
@@ -2460,7 +2460,7 @@ void json_aivdm_dump(const struct ais_t *ais,
ais->type17.lon,
ais->type17.lat,
ais->type17.bitcount,
- gpsd_hexdump(ais->type17.bitdata,
+ gpsd_hexdump((char *)ais->type17.bitdata,
(ais->type17.bitcount + 7) / 8));
}
break;
@@ -2745,7 +2745,7 @@ void json_aivdm_dump(const struct ais_t *ais,
ais->type25.dest_mmsi,
ais->type25.app_id,
ais->type25.bitcount,
- gpsd_hexdump(ais->type25.bitdata,
+ gpsd_hexdump((char *)ais->type25.bitdata,
(ais->type25.bitcount + 7) / 8));
break;
case 26: /* Binary Message, Multiple Slot */
@@ -2757,7 +2757,7 @@ void json_aivdm_dump(const struct ais_t *ais,
ais->type26.dest_mmsi,
ais->type26.app_id,
ais->type26.bitcount,
- gpsd_hexdump(ais->type26.bitdata,
+ gpsd_hexdump((char *)ais->type26.bitdata,
(ais->type26.bitcount + 7) / 8),
ais->type26.radio);
break;
diff --git a/hex.c b/hex.c
index 5c6d9a38..04eae847 100644
--- a/hex.c
+++ b/hex.c
@@ -3,34 +3,39 @@
* BSD terms apply: see the file COPYING in the distribution root for details.
*/
#include <string.h>
+#include <ctype.h>
#include "gpsd.h"
-char /*@ observer @*/ *gpsd_hexdump(const void *binbuf, size_t binbuflen)
+char /*@ observer @*/ *gpsd_hexdump(char *binbuf, size_t binbuflen)
{
- static char hexbuf[MAX_PACKET_LENGTH * 2 + 1];
+ if (isprint(binbuf[binbuflen-1]))
+ return binbuf;
+ else {
+ static char hexbuf[MAX_PACKET_LENGTH * 2 + 1];
#ifndef SQUELCH_ENABLE
- size_t i, j = 0;
- size_t len =
- (size_t) ((binbuflen >
- MAX_PACKET_LENGTH) ? MAX_PACKET_LENGTH : binbuflen);
- const char *ibuf = (const char *)binbuf;
- const char *hexchar = "0123456789abcdef";
+ size_t i, j = 0;
+ size_t len =
+ (size_t) ((binbuflen >
+ MAX_PACKET_LENGTH) ? MAX_PACKET_LENGTH : binbuflen);
+ const char *ibuf = (const char *)binbuf;
+ const char *hexchar = "0123456789abcdef";
- if (NULL == binbuf || 0 == binbuflen)
- return "";
+ if (NULL == binbuf || 0 == binbuflen)
+ return "";
- /*@ -shiftimplementation @*/
- for (i = 0; i < len; i++) {
- hexbuf[j++] = hexchar[(ibuf[i] & 0xf0) >> 4];
- hexbuf[j++] = hexchar[ibuf[i] & 0x0f];
- }
- /*@ +shiftimplementation @*/
- hexbuf[j] = '\0';
+ /*@ -shiftimplementation @*/
+ for (i = 0; i < len; i++) {
+ hexbuf[j++] = hexchar[(ibuf[i] & 0xf0) >> 4];
+ hexbuf[j++] = hexchar[ibuf[i] & 0x0f];
+ }
+ /*@ +shiftimplementation @*/
+ hexbuf[j] = '\0';
#else /* SQUELCH defined */
- hexbuf[0] = '\0';
+ hexbuf[0] = '\0';
#endif /* SQUELCH_ENABLE */
- return hexbuf;
+ return hexbuf;
+ }
}
int gpsd_hexpack( /*@in@*/ const char *src, /*@out@ */ char *dst, size_t len)
diff --git a/packet.c b/packet.c
index de831260..03b8f407 100644
--- a/packet.c
+++ b/packet.c
@@ -1298,7 +1298,7 @@ static void packet_accept(struct gps_packet_t *lexer, int packet_type)
if (lexer->debug >= LOG_RAW+1)
gpsd_report(LOG_RAW+1, "Packet type %d accepted %zu = %s\n",
packet_type, packetlen,
- gpsd_hexdump(lexer->outbuffer, lexer->outbuflen));
+ gpsd_hexdump((char *)lexer->outbuffer, lexer->outbuflen));
} else {
gpsd_report(LOG_ERROR, "Rejected too long packet type %d len %zu\n",
packet_type, packetlen);
@@ -1316,7 +1316,7 @@ static void packet_discard(struct gps_packet_t *lexer)
gpsd_report(LOG_RAW + 1,
"Packet discard of %zu, chars remaining is %zu = %s\n",
discard, remaining,
- gpsd_hexdump(lexer->inbuffer, lexer->inbuflen));
+ gpsd_hexdump((char *)lexer->inbuffer, lexer->inbuflen));
}
static void character_discard(struct gps_packet_t *lexer)
@@ -1327,7 +1327,7 @@ static void character_discard(struct gps_packet_t *lexer)
if (lexer->debug >= LOG_RAW+1)
gpsd_report(LOG_RAW + 1, "Character discarded, buffer %zu chars = %s\n",
lexer->inbuflen,
- gpsd_hexdump(lexer->inbuffer, lexer->inbuflen));
+ gpsd_hexdump((char *)lexer->inbuffer, lexer->inbuflen));
}
/* get 0-origin big-endian words relative to start of packet buffer */
@@ -1943,7 +1943,7 @@ ssize_t packet_get(int fd, struct gps_packet_t *lexer)
gpsd_report(LOG_RAW + 1,
"Read %zd chars to buffer offset %zd (total %zd): %s\n",
recvd, lexer->inbuflen, lexer->inbuflen + recvd,
- gpsd_hexdump(lexer->inbufptr, (size_t) recvd));
+ gpsd_hexdump((char *)lexer->inbufptr, (size_t) recvd));
lexer->inbuflen += recvd;
}
gpsd_report(LOG_SPIN, "packet_get() fd %d -> %zd (%d)\n",
diff --git a/serial.c b/serial.c
index 0853cfc5..653313ab 100644
--- a/serial.c
+++ b/serial.c
@@ -475,7 +475,7 @@ int gpsd_serial_open(struct gps_device_t *session)
return session->gpsdata.gps_fd;
}
-ssize_t gpsd_write(struct gps_device_t * session, char const *buf, size_t len)
+ssize_t gpsd_write(struct gps_device_t * session, const char *buf, size_t len)
{
ssize_t status;
bool ok;
@@ -488,7 +488,7 @@ ssize_t gpsd_write(struct gps_device_t * session, char const *buf, size_t len)
/* extra guard prevents expensive hexdump calls */
if (session->context->debug >= LOG_IO)
gpsd_report(LOG_IO, "=> GPS: %s%s\n",
- gpsd_hexdump(buf, len), ok ? "" : " FAILED");
+ gpsd_hexdump((char *)buf, len), ok ? "" : " FAILED");
return status;
}