[1.5] ls -l on /cygdrive/d doesn't work

David Engraf david.engraf@sysgo.com
Tue May 26 07:28:00 GMT 2009


I think this error is located in the cygwin/ntea.cc read_ea function. 
NtQueryEaFile fails due to unsupported extended attributes on fat32 and 
iso9660 and ret is set to -1. After setting ret to -1 the function 
checks fea->EaValueLength which is in my case 8313 (see log) due to an 
uninitialized stack and read_ea return 8313. Now the calling function 
(fhandler_base::fstat_helper) is using the uninitialized data for the 
timestamp and file size and returns incorrect values.
This error doesn't happen on the new 1.7 release, but I need a solution 
for the stable version.


if (!NT_SUCCESS (status))
     {
       ret = -1;
       debug_printf ("%x = NtQueryEaFile (%s, %s), Win32 error %d",
                     status, file, attrname, RtlNtStatusToDosError 
(status));
     }
   if (!fea->EaValueLength)
     ret = 0;
   else
     {
       memcpy (attrbuf, fea->EaName + fea->EaNameLength + 1,
               fea->EaValueLength);
       ret = fea->EaValueLength;
     }



David Engraf schrieb:
> Hi,
> 
> I have encountered a problem while listening the content of a CD. When I 
> call "ls -l /cygdrive/d" the file size and creation/modification time is 
> corrupted. This also happens on usb sticks formatted with fat32. Only 
> ntfs formatted filesystems have the correct listening.
> Attached is a strace log calling the function fstat on a file located on 
> the specified filesystem.
> 
> //ISO9660
> get_file_attribute: file: d:\README.txt
> read_ea: 1. chance, C0000010 = NtQueryEaFile (d:\README.txt, .UNIXATTR), 
> Win32 error 1
> read_ea: C0000010 = NtQueryEaFile (d:\README.txt, .UNIXATTR), Win32 error 1
> read_ea: 8313 = read_ea (0, d:\README.txt, .UNIXATTR, 22A9F0, 4)
> fhandler_base::fstat_helper: 0 = fstat (, 0x22A9E0) st_atime=6B126FF 
> st_size=-40681930227712, st_mode=0x22A9F061, 
> st_ino=-4583408731929810241, sizeof=96
> fstat64: 0 = fstat (3, 0x22A9E0)
> 
> 
> //FAT32
> get_file_attribute: file: e:\README.txt
> read_ea: 1. chance, C000004F = NtQueryEaFile (e:\README.txt, .UNIXATTR), 
> Win32 error 282
> read_ea: C000004F = NtQueryEaFile (e:\README.txt, .UNIXATTR), Win32 
> error 282
> read_ea: 8313 = read_ea (0, e:\README.txt, .UNIXATTR, 22A9F0, 4)
> fhandler_base::fstat_helper: 0 = fstat (, 0x22A9E0) st_atime=6D7072 
> st_size=3328772759537140781, st_mode=0x22A9F061, 
> st_ino=-3532118121688219773, sizeof=96
> fstat64: 0 = fstat (3, 0x22A9E0)
> 
> 
> //NTFS
> get_file_attribute: file: c:\README.txt
> read_ea: 0 = read_ea (6BC, c:\README.txt, .UNIXATTR, 22A410, 4)
> fhandler_base::fstat_helper: 0 = fstat (, 0x22A400) st_atime=4A1A7CA3 
> st_size=3088, st_mode=0x8124, st_ino=3096224743855743, sizeof=96
> fstat64: 0 = fstat (6, 0x22A400)
> 
> 
> Thank you
> 

-- 
David Engraf
Product Engineer

SYSGO AG
Office Mainz
Am Pfaffenstein 14 / D-55270 Klein-Winternheim / Germany

Handelsregister: HRB Mainz 90 HRB 8066
Vorstand: Michael Tiedemann
Aufsichtsratsvorsitzender: Knut Degen
USt(VAT)-Id-Nr.: DE 149062328

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list