diff options
-rw-r--r-- | driver_aivdm.c | 2 | ||||
-rw-r--r-- | drivers.c | 4 | ||||
-rw-r--r-- | gpsd.h-tail | 5 | ||||
-rw-r--r-- | gpsd_json.c | 12 | ||||
-rw-r--r-- | hex.c | 43 | ||||
-rw-r--r-- | packet.c | 8 | ||||
-rw-r--r-- | serial.c | 4 |
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 */ @@ -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; @@ -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) @@ -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", @@ -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; } |