diff --git a/rtl/unix/linux.pp b/rtl/unix/linux.pp index cbd805beb7..6d2bd42069 100644 --- a/rtl/unix/linux.pp +++ b/rtl/unix/linux.pp @@ -1985,15 +1985,55 @@ function TTYName(Handle:Longint):string; Return the name of the current tty described by handle f. returns empty string in case of an error. } -Const - dev='/dev'; var - name : string; - st : stat; mydev, myino : longint; - dirstream : pdir; - d : pdirent; + st : stat; + + function mysearch(n:string): boolean; + {searches recursively for the device in the directory given by n, + returns true if found and sets the name of the device in ttyname} + var dirstream : pdir; + d : pdirent; + name : string; + st : stat; + begin + dirstream:=opendir(n); + if (linuxerror<>0) then + exit; + d:=Readdir(dirstream); + while (d<>nil) do + begin + name:=n+'/'+strpas(@(d^.name)); + fstat(name,st); + if linuxerror=0 then + begin + if ((st.mode and $E000)=$4000) and { if it is a directory } + (strpas(@(d^.name))<>'.') and { but not ., .. and fd subdirs } + (strpas(@(d^.name))<>'..') and + (strpas(@(d^.name))<>'fd') then + begin {we found a directory, search inside it} + if mysearch(name) then + begin {the device is here} + closedir(dirstream); {then don't continue searching} + mysearch:=true; + exit; + end; + end + else if (d^.ino=myino) and (st.dev=mydev) then + begin + closedir(dirstream); + ttyname:=name; + mysearch:=true; + exit; + end; + end; + d:=Readdir(dirstream); + end; + closedir(dirstream); + mysearch:=false; + end; + begin TTYName:=''; fstat(handle,st); @@ -2001,26 +2041,7 @@ begin exit; mydev:=st.dev; myino:=st.ino; - dirstream:=opendir(dev); - if (linuxerror<>0) then - exit; - d:=Readdir(dirstream); - while (d<>nil) do - begin - if (d^.ino=myino) then - begin - name:=dev+'/'+strpas(@(d^.name)); - fstat(name,st); - if (linuxerror=0) and (st.dev=mydev) then - begin - closedir(dirstream); - ttyname:=name; - exit; - end; - end; - d:=Readdir(dirstream); - end; - closedir(dirstream); + mysearch('/dev'); end; @@ -2608,7 +2629,10 @@ End. { $Log$ - Revision 1.5 2000-10-26 22:51:12 peter + Revision 1.6 2000-12-28 20:42:12 peter + * ttyname fix from the mailinglist (merged) + + Revision 1.5 2000/10/26 22:51:12 peter * nano sleep (merged) Revision 1.4 2000/10/11 13:59:16 marco