1+ #include <ctype.h>
12#include <errno.h>
23#include <string.h>
34#include <stdint.h>
@@ -227,7 +228,7 @@ struct qmi_response_type_v01 *qmi_tlv_get_result(struct qmi_tlv *tlv)
227228}
228229
229230#define MIN (x , y ) ((x) < (y) ? (x) : (y))
230- #define LINE_LENGTH 64
231+ #define LINE_LENGTH 40
231232
232233static inline uint8_t to_hex (uint8_t ch )
233234{
@@ -238,7 +239,7 @@ static inline uint8_t to_hex(uint8_t ch)
238239void qmi_tlv_dump (struct qmi_tlv * tlv ) {
239240 struct qmi_tlv_item * item ;
240241 struct qmi_header * pkt ;
241- unsigned offset = 0 ;
242+ unsigned offset = sizeof ( struct qmi_header ) ;
242243 void * pkt_data ;
243244 int i = 0 , li , j , k ;
244245 uint8_t ch ;
@@ -254,10 +255,11 @@ void qmi_tlv_dump(struct qmi_tlv *tlv) {
254255 printf ("<<< msg_id : 0x%1$04x (%1$u)\n" , pkt -> msg_id );
255256 printf ("<<< txn_id : 0x%1$04x (%1$u)\n" , pkt -> txn_id );
256257 printf ("<<< TLVs:\n" );
257- while (offset < tlv -> size - sizeof (struct qmi_header )) {
258+ // I do not understand why this -1 is needed
259+ while (offset < tlv -> size - 1 ) {
258260 item = pkt_data + offset ;
259261 printf ("<<< TLV %d: {id: 0x%02x, len: 0x%02x}\n" , i , item -> key , item -> len );
260- if (item -> len > pkt -> msg_len - offset ) {
262+ if (item -> len > pkt -> msg_len + sizeof ( struct qmi_header ) - offset ) {
261263 fprintf (stderr , "Invalid item length!\n" );
262264 return ;
263265 }
@@ -271,6 +273,18 @@ void qmi_tlv_dump(struct qmi_tlv *tlv) {
271273 line [li ++ ] = to_hex (ch );
272274 line [li ++ ] = k < linelen - 1 ? ':' : ' ' ;
273275 }
276+
277+ for (; k < LINE_LENGTH ; k ++ ) {
278+ line [li ++ ] = ' ' ;
279+ line [li ++ ] = ' ' ;
280+ line [li ++ ] = ' ' ;
281+ }
282+
283+ for (k = 0 ; k < linelen ; k ++ ) {
284+ ch = item -> data [j + k ];
285+ line [li ++ ] = isprint (ch ) ? ch : '.' ;
286+ }
287+
274288 line [li ] = '\0' ;
275289
276290 printf ("%s\n\n" , line );
0 commit comments