@@ -1471,18 +1471,20 @@ static char* LinuxProcessTable_updateTtyDevice(TtyDriver* ttyDrivers, unsigned l
14711471 if (min > ttyDrivers [i ].minorTo ) {
14721472 continue ;
14731473 }
1474+
14741475 unsigned int idx = min - ttyDrivers [i ].minorFrom ;
1476+
14751477 struct stat sb ;
1476- char * fullPath ;
1478+
14771479 for (;;) {
1478- xAsprintf (& fullPath , "%s/%d" , ttyDrivers [i ].path , idx );
1480+ char * fullPath = NULL ;
1481+ size_t fullPathLen = xAsprintf (& fullPath , "%s/%d" , ttyDrivers [i ].path , idx );
14791482 int err = stat (fullPath , & sb );
14801483 if (err == 0 && major (sb .st_rdev ) == maj && minor (sb .st_rdev ) == min ) {
14811484 return fullPath ;
14821485 }
1483- free (fullPath );
14841486
1485- xAsprintf ( & fullPath , "%s%d" , ttyDrivers [i ].path , idx );
1487+ xSnprintf ( fullPath , fullPathLen + 1 , "%s%d" , ttyDrivers [i ].path , idx );
14861488 err = stat (fullPath , & sb );
14871489 if (err == 0 && major (sb .st_rdev ) == maj && minor (sb .st_rdev ) == min ) {
14881490 return fullPath ;
@@ -1495,12 +1497,14 @@ static char* LinuxProcessTable_updateTtyDevice(TtyDriver* ttyDrivers, unsigned l
14951497
14961498 idx = min ;
14971499 }
1500+
14981501 int err = stat (ttyDrivers [i ].path , & sb );
14991502 if (err == 0 && tty_nr == sb .st_rdev ) {
15001503 return xStrdup (ttyDrivers [i ].path );
15011504 }
15021505 }
1503- char * out ;
1506+
1507+ char * out = NULL ;
15041508 xAsprintf (& out , "/dev/%u:%u" , maj , min );
15051509 return out ;
15061510}
0 commit comments