On Oct 9 08:31, Eric Blake wrote: > On 10/09/2014 07:24 AM, corinna@cygwin.com wrote: > > > Log message: > > * fhandler_proc.cc (fhandler_proc::readdir): Set dirent d_type. > > * fhandler_process.cc (fhandler_process::readdir): Ditto. > > * fhandler_procnet.cc (fhandler_procnet::readdir): Ditto. > > * fhandler_procsys.cc (fhandler_procsys::readdir): Ditto. > > * fhandler_procsysvipc.cc (fhandler_procsysvipc::readdir): Ditto. > > * fhandler_virtual.h (virt_ftype_to_dtype): Define new inline function > > to generate dirent d_type from virtual_ftype_t. > > Most of these look okay; but I have a problem with fhandler_procsys.cc: > > > @@ -357,10 +358,17 @@ > > res = ENMFILE; > > else > > { > > + struct stat st; > > + char *file = tp.c_get (); > > + > > sys_wcstombs (de->d_name, NAME_MAX + 1, f.dbi.ObjectName.Buffer, > > f.dbi.ObjectName.Length / sizeof (WCHAR)); > > de->d_ino = hash_path_name (get_ino (), de->d_name); > > - de->d_type = 0; > > + stpcpy (stpcpy (stpcpy (file, get_name ()), "/"), de->d_name); > > + if (!lstat64 (file, &st)) > > + de->d_type = IFTODT (st.st_mode); > > + else > > + de->d_type = DT_UNKNOWN; > > The whole point of d_type is for optimization, to tell a process when it > can avoid the overhead of an lstat() because the system was able to > obtain the information in a cheaper manner. But if you have to resort > to an lstat() to get the information, then you are wasting cycles on the > case of a user that doesn't care about d_type. I'd rather we always > return DT_UNKNOWN if the only way we'd get a better type is by calling > lstat(). I see. The idea here was to try and, at least on my machine, it was still *very* fast, likely because the whole thing occurs only in globally allocated memory and there's no disk access or paging involved. The question is, what exactly do we lose? /proc/sys isn't often accessed at all (I guess) and what could be gained? Yaakov asked for setting d_type under /proc, so he might enlighten us which tools make heavy use of the stuff, so the net gain is > 0... Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Maintainer cygwin AT cygwin DOT com Red Hat