2011/9/20 Lionel Elie Mamane <lio...@mamane.lu> > 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: > > Ok, thanks! :) I know the concept of union, my problem was the definition of "QuadPart".
> 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; > > > It's true, using unions is clearer and cleaner than using forced type castings. > Do not hesitate to CC to me any additional question you have on this > matter. > > > > 2011/9/12 Lionel Elie Mamane <lio...@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 >
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice