futex.2: Casting utime to uint32_t

The kernel uses the following cast:

  if (cmd == FUTEX_REQUEUE || cmd == FUTEX_CMP_REQUEUE ||
      cmd == FUTEX_CMP_REQUEUE_PI || cmd == FUTEX_WAKE_OP)
    val2 = (u32) (unsigned long) utime;

This ensures that always the least significant four bytes of the
pointer are used, both on ILP32 and LP64 systems.

On a big endian system a simple cast from 64 bit pointer to 32 bit
integer would return the most significant four bytes.

We have to make the reader of the man-page aware of the usage
of the least significant bytes.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
Heinrich Schuchardt 2015-04-13 20:50:18 +02:00 committed by Michael Kerrisk
parent c6dc40a2c9
commit 10022b8e63
1 changed files with 4 additions and 2 deletions

View File

@ -136,11 +136,13 @@ argument is a pointer to a
.IR timespec
structure that specifies a timeout for the operation.
However, notwithstanding the prototype shown above, for some operations,
this argument is instead a four-byte integer whose meaning
the least significant four bytes are used as an integer whose meaning
is determined by the operation.
For these operations, the kernel casts the
.I timeout
value to
value first to
.IR "unsigned long",
then to
.IR uint32_t ,
and in the remainder of this page, this argument is referred to as
.I val2