www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 8291] New: dirEntry cannot handle root directories + unhandled exception causes crash

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8291

           Summary: dirEntry cannot handle root directories + unhandled
                    exception causes crash
           Product: D
           Version: D2
          Platform: All
        OS/Version: Windows
            Status: NEW
          Severity: major
          Priority: P2
         Component: Phobos
        AssignedTo: nobody puremagic.com
        ReportedBy: mp81ss rambler.ru



1) Wrong root handling api/params.
To stat a root directory, the "GetFileAttributes" API must be used instead of
"FindFirstFile".
To stat all files in a root dir, "C:\*" must be passed to FindFirstFile.
In all other cases, a path with [back]slash removed can be passed to
"FindFirstFile".
I know this in crazy, if you don't believe me, read CAREFULLY the FindFirstFile
docs.
P.S.:
This should make you see that the dirEntries method may have some problems...

2) Crash
The result of FindFirstFile is "enforced" in _init private method and NOT
CAUGHT in the caller public method dirEntry, and this crashes the client app.
It would be better to throw a FileException in _init and catch+rethrow it in
dirEntry.

Found on 2.059

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 24 2012
parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8291


Vladimir Panteleev <thecybershadow gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |thecybershadow gmail.com



21:31:50 PST ---

 1) Wrong root handling api/params.
 To stat a root directory, the "GetFileAttributes" API must be used instead of
 "FindFirstFile".
 To stat all files in a root dir, "C:\*" must be passed to FindFirstFile.
 In all other cases, a path with [back]slash removed can be passed to
 "FindFirstFile".
 I know this in crazy, if you don't believe me, read CAREFULLY the FindFirstFile
 docs.
 P.S.:
 This should make you see that the dirEntries method may have some problems...
The following program works as expected, and prints the files/directories in the root of my C: drive: import std.stdio; import std.file; void main() { writeln(dirEntries(`C:\`, SpanMode.shallow)); } Can you clarify the problem?
 2) Crash
 The result of FindFirstFile is "enforced" in _init private method and NOT
 CAUGHT in the caller public method dirEntry, and this crashes the client app.
 It would be better to throw a FileException in _init and catch+rethrow it in
 dirEntry.
So what is the exact problem? Isn't a FileException thrown in either case? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 21 2012