[Libreoffice] Mi first very little patch
Lionel Elie Mamane
lionel at mamane.lu
Tue Sep 20 03:11:20 PDT 2011
On Mon, Sep 12, 2011 at 10:45:31PM +0200, CaStarCo wrote:
> @Lionel , What is the QuadPart member of the structure? The high
> part? the low part? or another thing?
The union is fully described at
http://msdn.microsoft.com/en-us/library/aa383713(v=vs.85).aspx
Are you familiar with the concept of C/C++ union? If not, Google gives
a few hits that don't seem too bad at first sight:
http://www.cplusplus.com/doc/tutorial/other_data_types/#union
http://www.go4expert.com/forums/showthread.php?t=15
http://en.wikipedia.org/wiki/Union_(computer_science)
http://msdn.microsoft.com/en-us/library/y9zewe0d(v=vs.80).aspx
To get to your question, the QuadPart is the whole 64 bits, that is
the combination of the high part *and* the low part.
Essentially, the paragraph I quoted says that to treat the FILETIME
value as a 64bit integer, one should proceed as such:
__int64 Value;
FILETIME *ft = // some value
ULARGE_INTEGER t;
t.LowPart = ft->dwLowDateTime;
t.HighPart = ft->dwHighDateTime;
// Now, t.QuadPart contains the right 64 bits integer
Value = t.QuadPart; // or use t.QuadPart directly instead of Value
instead of:
Value = *(__int64*)ft;
Do not hesitate to CC to me any additional question you have on this
matter.
> 2011/9/12 Lionel Elie Mamane <lionel at mamane.lu>
>> On Sun, Sep 11, 2011 at 10:04:52PM +0200, CaStarCo wrote:
>>> I've created a second (very little too) patch to reduce the scope of a
>>> variable.
>>> --- a/sal/osl/w32/file_dirvol.cxx
>>> +++ b/sal/osl/w32/file_dirvol.cxx
>>> @@ -60,7 +60,6 @@ extern "C" BOOL TimeValueToFileTime(const TimeValue *cpTimeVal, FILETIME *pFTime
>> Thank you for your contribution to LibreOffice, it is most
>> welcome. Looking at that function in that file, it needs a more
>> thorough cleanup, and maybe other functions in that file and/or in
>> other files in the same directory; see
>> http://msdn.microsoft.com/en-us/library/ms724284%28v=VS.85%29.aspx, in
>> particular:
>> It is not recommended that you add and subtract values from the
>> FILETIME structure to obtain relative times. Instead, you should copy
>> the low- and high-order parts of the file time to a ULARGE_INTEGER
>> structure, perform 64-bit arithmetic on the QuadPart member, and copy
>> the LowPart and HighPart members into the FILETIME structure.
>> Do not cast a pointer to a FILETIME structure to either a
>> ULARGE_INTEGER* or __int64* value because it can cause alignment
>> faults on 64-bit Windows.
>> It would be best to look at every place that FILETIME is used in that
>> directory.
>> Just in case you want to volunteer for that cleanup :)
>> When you send a patch, could you please confirm the patch is licensed
>> under MPL1.1/LGPLv3+? To make things easier, you can do a one-time
>> blanket "all my patches" thing if you wish, sort of common to do that.
--
Lionel
More information about the LibreOffice
mailing list