library: find tty device name of process quicker
The procps library attempts to work out the tty of a process through several methods. For things like /dev/tty123 or /dev/foo it works fine. For tty devices that put the minor number in a directory of the major name this fails. So then we have to fallback to stating things like the processes STDERR and try again. Considering a lot of processes sit on ttys such as /dev/pts/3 this is a lot of wasted time. At the point of entering driver_name we know "/dev/pts" and we know "3" we just didn't join them up the right way as this is old code. This change now looks for /dev/pts/3 as well. It does it after looking for /dev/pts3 so the behaviour is the same. References: https://bugs.debian.org/770215 Signed-off-by: Craig Small <csmall@enc.com.au>
This commit is contained in:
committed by
Craig Small
parent
80ad63dc31
commit
f888a30d23
@ -132,9 +132,12 @@ static int driver_name(char *restrict const buf, unsigned maj, unsigned min){
|
||||
}
|
||||
sprintf(buf, "/dev/%s%d", tmn->name, min); /* like "/dev/ttyZZ255" */
|
||||
if(stat(buf, &sbuf) < 0){
|
||||
if(tmn->devfs_type) return 0;
|
||||
sprintf(buf, "/dev/%s", tmn->name); /* like "/dev/ttyZZ255" */
|
||||
if(stat(buf, &sbuf) < 0) return 0;
|
||||
sprintf(buf, "/dev/%s/%d", tmn->name, min); /* like "/dev/pts/255" */
|
||||
if(stat(buf, &sbuf) < 0){
|
||||
if(tmn->devfs_type) return 0;
|
||||
sprintf(buf, "/dev/%s", tmn->name); /* like "/dev/ttyZZ255" */
|
||||
if(stat(buf, &sbuf) < 0) return 0;
|
||||
}
|
||||
}
|
||||
if(min != MINOR_OF(sbuf.st_rdev)) return 0;
|
||||
if(maj != MAJOR_OF(sbuf.st_rdev)) return 0;
|
||||
|
Reference in New Issue
Block a user