[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: RFE: stat(1) flag for learning the d_type value of a given file
From: |
Eric Blake |
Subject: |
Re: RFE: stat(1) flag for learning the d_type value of a given file |
Date: |
Mon, 13 Oct 2014 14:34:37 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.1.1 |
On 10/13/2014 02:14 PM, Pádraig Brady wrote:
> On 10/13/2014 08:56 PM, Eric Blake wrote:
>> The Cygwin developers have been trying to improve some d_type hints
>> given during readdir(), to return DT_DIR instead of DT_UNKNOWN for
>> obvious directories, as an example. But testing the patches for
>> correctness has proved to be a bit of a challenge for testing. On an
>> IRC chat, we discovered that it is really difficult to find out what
>> d_type lists for a given file without using a debugger or writing a
>> custom program - most GNU code is using it as an optimization to avoid
>> lstat(), but never directly outputs that the optimization took place.
>> So the idea was raised: could we teach stat(1) a new format arg that
>> would make it painfully obvious what d_type hint is associated with a
>> given file?
>>
>> Of course, such a format is not trivial, and must not be part of the
>> default stat output. Given 'stat --format=... a', you'd have to do
>> readdir() on "." until you find "a", in order to get to the d_type. But
>> I couldn't think of any better utility to enhance to easily get at
>> d_type information from the shell. At least, stat(1) feels like a
>> better choice than ls(1) for adding the enhanced output information.
>>
>> What do you think? Should I spend time writing up a patch?
>
> Maybe, though coreutils' tests also check d_type is available.
> Would this suffice for cygwin?
>
> http://git.sv.gnu.org/gitweb/?p=coreutils.git;a=blob;f=tests/d_type-check;hb=HEAD
That seems like a useful starting point for a hack, but it's a bit too
platform-specific (libc = ctypes.cdll.LoadLibrary("libc.so.6") has no
chance on Cygwin, and even hardcoding the assumption that DT_DIR==4 is a
bit risky, although it works for Cygwin). The fact that it takes that
much effort in python is making me like the idea of a stat format
modifier even more, especially since d_type exists on multiple platforms.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature