Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix build on 32-bit architectures #124

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

flimberger
Copy link

Commit eab3ebc changed all occurrences of unsigned long to uint64_t, which does not work when it is used in callback functions whose signatures are defined with unsigned long by libXt. On 64-bit machines, unsigned long and uint64_t are the same type, but on 32-bit machines, long has only 32 bits. This makes the callback function pointer incompatible with the callback function parameter type.

The callback functions in question are the following (from X11/Intrinsic.h):

typedef Boolean (XtConvertSelectionProc)(
Widget /
widget /,
Atom
/* selection /,
Atom
/* target /,
Atom
/* type_return /,
XtPointer
/* value_return /,
unsigned long
/* length_return /,
int
/* format_return /
);
typedef Boolean (XtConvertSelectionProc)(
Widget /
widget /,
Atom
/
selection /,
Atom
/* target /,
Atom
/* type_return /,
XtPointer
/* value_return /,
unsigned long
/* length_return /,
int
/* format_return */
);

Both functions use pointers to unsigned long as output parameters for data length, so the functions implementing these callbacks have to use unsigned long, too.

Commit eab3ebc changed all occurrences of unsigned long to uint64_t,
which does not work when it is used in callback functions whose
signatures are defined with unsigned long by libXt. On 64-bit machines,
unsigned long and uint64_t are the same type, but on 32-bit machines,
long has only 32 bits. This makes the callback function pointer
incompatible with the callback function parameter type.

The callback functions in question are the following (from
X11/Intrinsic.h):

typedef Boolean (*XtConvertSelectionProc)(
    Widget 		/* widget */,
    Atom*		/* selection */,
    Atom*		/* target */,
    Atom*		/* type_return */,
    XtPointer*		/* value_return */,
    unsigned long*	/* length_return */,
    int*		/* format_return */
);
typedef Boolean (*XtConvertSelectionProc)(
    Widget 		/* widget */,
    Atom*		/* selection */,
    Atom*		/* target */,
    Atom*		/* type_return */,
    XtPointer*		/* value_return */,
    unsigned long*	/* length_return */,
    int*		/* format_return */
);

Both functions use pointers to unsigned long as output parameters for
data length, so the functions implementing these callbacks have to use
unsigned long, too.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant