@@ -524,42 +524,52 @@ static int mice_cmp (const void *px, const void *py)
524
524
* AX.25 destination field. The form should be APxxxx.
525
525
*
526
526
* Search the list looking for the maximum length match.
527
- * For example,
528
- * APXR = Xrouter
529
- * APX = Xastir
527
+ *
528
+ * tocalls was sorted by decreasing length so the search will go from
529
+ * most specific to least specific.
530
+ * Example: APY350 or APY008 would match those specific models before
531
+ * getting to the more generic APY.
530
532
*
531
533
*------------------------------------------------------------------*/
532
534
533
535
void deviceid_decode_dest (char * dest , char * device , size_t device_size )
534
536
{
535
- strlcpy (device , "UNKNOWN vendor/model" , device_size );
536
-
537
537
if (ptocalls == NULL ) {
538
538
text_color_set (DW_COLOR_ERROR );
539
539
dw_printf ("deviceid_decode_dest called without any deviceid data.\n" );
540
+ strlcpy (device , "Internal error - UNKNOWN vendor/model" , device_size );
540
541
return ;
541
542
}
542
543
544
+ * device = '\0' ;
545
+
543
546
for (int n = 0 ; n < tocalls_count ; n ++ ) {
544
547
if (strncmp (dest , ptocalls [n ].tocall , strlen (ptocalls [n ].tocall )) == 0 ) {
545
548
546
- if (ptocalls [n ].vendor != NULL ) {
549
+ if (ptocalls [n ].vendor != NULL && ptocalls [n ].model != NULL ) { // both vendor & model
550
+ snprintf (device , device_size , "%s %s" , ptocalls [n ].vendor , ptocalls [n ].model );
551
+ }
552
+
553
+ else if (ptocalls [n ].vendor != NULL ) { // only vendor
547
554
strlcpy (device , ptocalls [n ].vendor , device_size );
548
555
}
549
556
550
- if (ptocalls [n ].vendor != NULL && ptocalls [ n ]. model != NULL ) {
551
- strlcat (device , " " , device_size );
557
+ else if (ptocalls [n ].model != NULL ) { // only model
558
+ strlcpy (device , ptocalls [ n ]. model , device_size );
552
559
}
553
560
554
- if ( ptocalls [ n ]. model != NULL ) {
555
- strlcat ( device , ptocalls [ n ]. model , device_size ) ;
561
+ else { // found in table but no vendor or model
562
+ break ;
556
563
}
564
+
557
565
return ;
558
566
}
559
567
}
560
568
561
- // Not found in table.
569
+ // Not found in table. Or found but both vendor and model are missing.
570
+
562
571
strlcpy (device , "UNKNOWN vendor/model" , device_size );
572
+ return ;
563
573
564
574
} // end deviceid_decode_dest
565
575
0 commit comments