Skip to content
This repository was archived by the owner on Feb 5, 2025. It is now read-only.

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 subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant