On 26 Aug 2014, at 8:19 AM, Bo Thorsen wrote:
> Which is probably the way people will have to go about doing it. Since 
> this distinction isn't reliably available on Linux and it is on Windows, 
> then the proper way would be to be able to get the native handle on the 
> drive to call Windows methods on it.

But see again what I wrote a couple of days ago: QStorageInfo should not report 
that a network drive is NTFS.  On Linux, an NFS mount has fileSystemType "nfs". 
 On OS X, if I mount a Windows drive and run the storageview example, that 
drive has fileSystemType "smbfs".

So even after over-simplifying, we already have API which is inconsistent on 
Windows compared to the other platforms.  This is making the problem of how to 
identify network drives worse, so IMO some kind of fix needs to be done.  I 
wrote up https://bugreports.qt-project.org/browse/QTBUG-40980 but I didn't find 
a Windows API to directly give us that string: the network protocol used to 
mount the drive.  see 
http://stackoverflow.com/questions/10800616/determine-protocol-of-a-network-drive

This version of the patch was the last one which had RemoteVolume as a 
VolumeTypeFlag:

https://codereview.qt-project.org/#/c/73945/41/src/corelib/io/qvolumeinfo.h

and here

https://codereview.qt-project.org/#/c/73945/41/src/corelib/io/qvolumeinfo_win.cpp

is how to use GetDriveType on Windows.  (Even the current version uses it 
internally and doesn't expose the result.)  And here (line 318)

https://codereview.qt-project.org/#/c/73945/41/src/corelib/io/qvolumeinfo_unix.cpp
 

is a (primitive) way of consulting a list of known network types on Linux.  
It's unfortunate to need such a list at all, but if there really is no other 
way to find out, maybe it's not so bad?  I don't worry much about the 
maintenance burden because new filesystem sharing protocols are not invented 
very often, and anyone can submit a patch to add a new one to the list.

After the harrowing review process (92 rounds of patches over 9 months!) the 
VolumeTypeFlag didn't end up in the final patch.  It's a credit to Ivan that he 
had the patience to finally get the current form of QStorageInfo into 5.4 
branch at all.  But obviously some users have a need to distinguish network 
drives from local ones anyway, so IMO there's nothing wrong with writing 
another patch to make this info available again.  Of course trying to 
distinguish all the other types: internal, removable, optical, and RAM drives, 
would probably be futile on many platforms.  We have several bools already, so 
how about adding a bool isRemote() accessor?

If we don't do that, then we know what to expect: some developers will try to 
make their own lists of network drive types (incomplete of course) and check 
the fileSystemType against the list.  (And it won't even work on Windows.)  In 
a global way of thinking it's much worse to impose this burden than to take it 
upon ourselves.  And yet on Windows  GetDriveType can already tell us whether 
it's a network volume or not.  That is what the original poster is asking for, 
and it doesn't seem so hard to provide.

_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to