[fdo-internals] VS 2015 migration problem

Karsten Winter karsten.winter at autodesk.com
Wed Jul 15 10:14:42 PDT 2015


Currently I migrate the FDO common part to VS 2015.
Here I came to a problem with a deprecated functionality. It's in the class
fdo\unmanaged\src\common\io\FileStream.cpp on the method "InitFileStream".
The file stream will be opened and the read/write status will be evaluated
by a property of the FILE type (_flag).
But this property is now not available anymore. See comment about VC++ 14
FILE encapsulation:

In previous versions, the FILE type was completely defined in <stdio.h>, so
it was possible for user code to reach into a FILE and muck with its
internals. 
We have refactored the stdio library to improve encapsulation of the library
implementation details. 
As part of this, FILE as defined in <stdio.h> is now an opaque type and its
members are inaccessible from outside of the CRT itself.

There are other options to read the file status. But none of them are
working like FDO expects. The read-only permission how the file was opened,
can not be requested later with the file handler. I have attached a patch
with the options I used.
One option is the "fstat" method. But the "st_mode" field of the output does
not reflect how the file was opened before. It's always 33206, not matter
whether the file was opened with e.g. "rt" or "wt". 
I couldn't also find out which bit mask combination this is.
The other option I tried is the method "GetFileInformationByHandle". But
here again, the file permission defined on open the file will not be
considered. When the file will be opened with read-only, the dwAttributes
value is 8224, 
which is the combination of "FILE_ATTRIBUTE_ARCHIVE" and
"FILE_ATTRIBUTE_NOT_CONTENT_INDEXED".

It looks that the file permissions are used from the file on the disc and
not how the file handle itself was created. There is no way to request the
read-only attribute correctly.
Only when I open the file with the "CREATE_ALWAYS" (dwCreationDisposition)
flag I get the read-only attribute. But then an existing file will be erased
and overwritten(not what we want).

Some unit tests (fdo\unittest\iotests.cpp) are set-up that the file stream
has the properties of how the file was opened. Open the file with "rt" flags
expect that the file is read-only. But when the file is not read-only on the
disc,
the file stream is writeable with the current information we get from the
system!

Do you have any ideas how do we get the status of the file from the
permission we gave to the "CreateFile" or "_wfopen" method?
Otherwise we will have to change it that way that we say, we can only get
the status of the file how it is on disc, so lets work with it. Then we have
to adapt the related unit tests in "iotest.cpp"

Best regards
Karsten
FileStream.patch
<http://osgeo-org.1560.x6.nabble.com/file/n5215767/FileStream.patch>  



--
View this message in context: http://osgeo-org.1560.x6.nabble.com/VS-2015-migration-problem-tp5215767.html
Sent from the FDO Internals mailing list archive at Nabble.com.


More information about the fdo-internals mailing list