On Fri, 21 Sep 2012, Marcin Cieslak wrote:
> + union {
> + XtPointer ptr;
> + Dimension dim;
> + } wide;
> + XtVaGetValues(dir_label, XmNwidth, &wide.ptr, NULL);
> + d_width = wide.dim;
> + XtVaGetValues(file_label, XmNwidth, &wide.ptr, NULL);
> + f_width = wide.dim;
Sorry, this is wrong - it fail on 64-bit big endian platform
with 32-bit ints (tried on 64-bit Solaris 9).
Of course, we can do:
XtPointer wide;
Dimension d_width, f_width;
XtVaGetValues(dir_label, XmNwidth, &wide, NULL);
d_width = (Dimension)wide;
XtVaGetValues(file_label, XmNwidth, &wide, NULL);
f_width = (Dimension)wide;
but this will cause "cast from pointer to integer of different
size" warnings.
C99 solution to this is:
#include <inttypes.h>
...
XtPointer wide;
Dimension d_width, f_width;
XtVaGetValues(dir_label, XmNwidth, &wide, NULL);
d_width = (Dimension)(uintptr_t)wide;
but not everyone is getting C99 integer types.
It has even been reported as a bug:
http://bugs.motifzone.net/show_bug.cgi?id=1497
What is the proper practice to cast XtPointer safely
among X developers? We need to fix all cases of:
int something;
XtVaGetValues(...,...,XmSomething, &something, ...);
since this causes overwrite of the neighbouring values
on the stack (and was the cause of dtfile crash).
//Marcin
------------------------------------------------------------------------------
How fast is your code?
3 out of 4 devs don\\\'t know how their code performs in production.
Find out how slow your code is with AppDynamics Lite.
http://ad.doubleclick.net/clk;262219672;13503038;z?
http://info.appdynamics.com/FreeJavaPerformanceDownload.html
_______________________________________________
cdesktopenv-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cdesktopenv-devel