adjust utmpx struct layout for time64, 32-/64-bit arch compat
authorRich Felker <dalias@aerifal.cx>
Sun, 22 Dec 2019 17:37:16 +0000 (12:37 -0500)
committerRich Felker <dalias@aerifal.cx>
Sun, 22 Dec 2019 17:37:16 +0000 (12:37 -0500)
commit1e7f0fcd7ff2096904fd93a2ee6d12a2392be392
tree71bcdc753853d22268ca7472ab7dabcbde4abeb0
parent3f959f6f76f16b7d954a6d8a134f3c30228d3be0
adjust utmpx struct layout for time64, 32-/64-bit arch compat

since time64 switchover has changed the size and layout of the struct
anyway, take the opportunity to fix it up so that it can be shared
between 32- and 64-bit ABIs on the same system as long as byte order
matches.

the ut_type member is explicitly padded to make up for m68k having
only 2-byte alignment; explicit padding has no effect on other archs.

ut_session is changed from long to int, with endian-matched padding.
this affects 64-bit archs as well, but brings the type into alignment
with glibc's x86_64 struct, so it should not break software, and does
not break on-disk format. the semantic type is int (pid-like) anyway.
the padding produces correct alignment for the ut_tv member on 32-bit
archs that don't naturally align it, so that ABI matches 64-bit.

this type is presently not used anywhere in the ABI between libc and
libc consumers; it's only used between pairs of consumers if a
third-party utmp library using the system utmpx.h is in use.
include/utmpx.h