[1/5] login: Consolidate utmp and utmpx headers

Message ID 20200729205117.2925113-1-adhemerval.zanella@linaro.org
State Superseded
Headers
Series [1/5] login: Consolidate utmp and utmpx headers |

Commit Message

Adhemerval Zanella July 29, 2020, 8:51 p.m. UTC
  It moves the 'struct lastlog', 'struct utmp', and 'struct utmpx' to
specific files and consolidates the s390-32 utmp.h and utmpx.h headers.

Checked on x86_64-linux-gnu and i686-linux-gnu.  I also checked with
a build for s390-linux-gnu.
---
 bits/struct_lastlog.h                         |  34 +++++
 bits/struct_utmp.h                            |  55 ++++++++
 bits/utmp.h                                   |  48 +------
 login/Makefile                                |   3 +-
 sysdeps/gnu/bits/struct_utmpx.h               |  55 ++++++++
 sysdeps/gnu/bits/utmpx.h                      |  34 +----
 .../sysv/linux/s390/bits/struct_lastlog.h     |  35 +++++
 .../unix/sysv/linux/s390/bits/struct_utmp.h   |  51 +++++++
 .../s390/bits/{utmpx.h => struct_utmpx.h}     |  57 +-------
 sysdeps/unix/sysv/linux/s390/bits/utmp.h      | 127 ------------------
 10 files changed, 238 insertions(+), 261 deletions(-)
 create mode 100644 bits/struct_lastlog.h
 create mode 100644 bits/struct_utmp.h
 create mode 100644 sysdeps/gnu/bits/struct_utmpx.h
 create mode 100644 sysdeps/unix/sysv/linux/s390/bits/struct_lastlog.h
 create mode 100644 sysdeps/unix/sysv/linux/s390/bits/struct_utmp.h
 rename sysdeps/unix/sysv/linux/s390/bits/{utmpx.h => struct_utmpx.h} (56%)
 delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/utmp.h
  

Comments

Joseph Myers July 29, 2020, 9:08 p.m. UTC | #1
On Wed, 29 Jul 2020, Adhemerval Zanella via Libc-alpha wrote:

> It moves the 'struct lastlog', 'struct utmp', and 'struct utmpx' to
> specific files and consolidates the s390-32 utmp.h and utmpx.h headers.
> 
> Checked on x86_64-linux-gnu and i686-linux-gnu.  I also checked with
> a build for s390-linux-gnu.
> ---
>  bits/struct_lastlog.h                         |  34 +++++
>  bits/struct_utmp.h                            |  55 ++++++++

An installed header just defining a single type should be 
bits/types/<type>.h, not bits/<type>.h.
  
Adhemerval Zanella July 30, 2020, 12:36 p.m. UTC | #2
On 29/07/2020 18:08, Joseph Myers wrote:
> On Wed, 29 Jul 2020, Adhemerval Zanella via Libc-alpha wrote:
> 
>> It moves the 'struct lastlog', 'struct utmp', and 'struct utmpx' to
>> specific files and consolidates the s390-32 utmp.h and utmpx.h headers.
>>
>> Checked on x86_64-linux-gnu and i686-linux-gnu.  I also checked with
>> a build for s390-linux-gnu.
>> ---
>>  bits/struct_lastlog.h                         |  34 +++++
>>  bits/struct_utmp.h                            |  55 ++++++++
> 
> An installed header just defining a single type should be 
> bits/types/<type>.h, not bits/<type>.h.
> 

Ack, I fixed it on the 'login: Move gnu utmpx to default implementation'
patch as well for utmpx.h header.
  
Lukasz Majewski Oct. 22, 2020, 8:06 a.m. UTC | #3
Hi Adhemerval,

> It moves the 'struct lastlog', 'struct utmp', and 'struct utmpx' to
> specific files and consolidates the s390-32 utmp.h and utmpx.h
> headers.
> 
> Checked on x86_64-linux-gnu and i686-linux-gnu.  I also checked with
> a build for s390-linux-gnu.
> ---
>  bits/struct_lastlog.h                         |  34 +++++
>  bits/struct_utmp.h                            |  55 ++++++++
>  bits/utmp.h                                   |  48 +------
>  login/Makefile                                |   3 +-
>  sysdeps/gnu/bits/struct_utmpx.h               |  55 ++++++++
>  sysdeps/gnu/bits/utmpx.h                      |  34 +----
>  .../sysv/linux/s390/bits/struct_lastlog.h     |  35 +++++
>  .../unix/sysv/linux/s390/bits/struct_utmp.h   |  51 +++++++
>  .../s390/bits/{utmpx.h => struct_utmpx.h}     |  57 +-------
>  sysdeps/unix/sysv/linux/s390/bits/utmp.h      | 127
> ------------------ 10 files changed, 238 insertions(+), 261
> deletions(-) create mode 100644 bits/struct_lastlog.h
>  create mode 100644 bits/struct_utmp.h
>  create mode 100644 sysdeps/gnu/bits/struct_utmpx.h
>  create mode 100644 sysdeps/unix/sysv/linux/s390/bits/struct_lastlog.h
>  create mode 100644 sysdeps/unix/sysv/linux/s390/bits/struct_utmp.h
>  rename sysdeps/unix/sysv/linux/s390/bits/{utmpx.h => struct_utmpx.h}
> (56%) delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/utmp.h
> 

Thanks for refactoring and consolidating the code.

Reviewed-by: Lukasz Majewski <lukma@denx.de>

> diff --git a/bits/struct_lastlog.h b/bits/struct_lastlog.h
> new file mode 100644
> index 0000000000..122a44abd0
> --- /dev/null
> +++ b/bits/struct_lastlog.h
> @@ -0,0 +1,34 @@
> +/* The 'struct lastlog' type.
> +   Copyright (C) 2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be
> useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef _UTMP_H
> +# error "Never include <bits/struct_lastlog.h> directly; use
> <utmp.h> instead." +#endif
> +
> +/* The structure describing an entry in the database of
> +   previous logins.  */
> +struct lastlog
> +  {
> +#if __WORDSIZE_TIME64_COMPAT32
> +    int32_t ll_time;
> +#else
> +    __time_t ll_time;
> +#endif
> +    char ll_line[UT_LINESIZE];
> +    char ll_host[UT_HOSTSIZE];
> +  };
> diff --git a/bits/struct_utmp.h b/bits/struct_utmp.h
> new file mode 100644
> index 0000000000..4b05c91515
> --- /dev/null
> +++ b/bits/struct_utmp.h
> @@ -0,0 +1,55 @@
> +/* The 'struct utmp' type, describing entries in the utmp file.
> +   Copyright (C) 2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be
> useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef _UTMP_H
> +# error "Never include <bits/struct_utmp.h> directly; use <utmp.h>
> instead." +#endif
> +
> +/* The structure describing an entry in the user accounting
> database.  */ +struct utmp
> +{
> +  short int ut_type;		/* Type of login.  */
> +  pid_t ut_pid;			/* Process ID of login
> process.  */
> +  char ut_line[UT_LINESIZE]
> +    __attribute_nonstring__;	/* Devicename.  */
> +  char ut_id[4]
> +    __attribute_nonstring__;	/* Inittab ID.  */
> +  char ut_user[UT_NAMESIZE]
> +    __attribute_nonstring__;	/* Username.  */
> +  char ut_host[UT_HOSTSIZE]
> +    __attribute_nonstring__;	/* Hostname for remote login.  */
> +  struct exit_status ut_exit;	/* Exit status of a process
> marked
> +				   as DEAD_PROCESS.  */
> +/* The ut_session and ut_tv fields must be the same size when
> compiled
> +   32- and 64-bit.  This allows data files and shared memory to be
> +   shared between 32- and 64-bit applications.  */
> +#if __WORDSIZE_TIME64_COMPAT32
> +  int32_t ut_session;		/* Session ID, used for
> windowing.  */
> +  struct
> +  {
> +    int32_t tv_sec;		/* Seconds.  */
> +    int32_t tv_usec;		/* Microseconds.  */
> +  } ut_tv;			/* Time entry was made.  */
> +#else
> +  long int ut_session;		/* Session ID, used for
> windowing.  */
> +  struct timeval ut_tv;		/* Time entry was made.  */
> +#endif
> +
> +  int32_t ut_addr_v6[4];	/* Internet address of remote host.
> */
> +  char __glibc_reserved[20];		/* Reserved for future
> use.  */ +};
> diff --git a/bits/utmp.h b/bits/utmp.h
> index b82d14536f..1647d0c67b 100644
> --- a/bits/utmp.h
> +++ b/bits/utmp.h
> @@ -31,18 +31,7 @@
>  #define UT_HOSTSIZE	256
>  
>  
> -/* The structure describing an entry in the database of
> -   previous logins.  */
> -struct lastlog
> -  {
> -#if __WORDSIZE_TIME64_COMPAT32
> -    int32_t ll_time;
> -#else
> -    __time_t ll_time;
> -#endif
> -    char ll_line[UT_LINESIZE];
> -    char ll_host[UT_HOSTSIZE];
> -  };
> +#include <bits/struct_lastlog.h>
>  
>  
>  /* The structure describing the status of a terminated process.  This
> @@ -53,40 +42,7 @@ struct exit_status
>      short int e_exit;		/* Process exit status.  */
>    };
>  
> -
> -/* The structure describing an entry in the user accounting
> database.  */ -struct utmp
> -{
> -  short int ut_type;		/* Type of login.  */
> -  pid_t ut_pid;			/* Process ID of login
> process.  */
> -  char ut_line[UT_LINESIZE]
> -    __attribute_nonstring__;	/* Devicename.  */
> -  char ut_id[4]
> -    __attribute_nonstring__;	/* Inittab ID.  */
> -  char ut_user[UT_NAMESIZE]
> -    __attribute_nonstring__;	/* Username.  */
> -  char ut_host[UT_HOSTSIZE]
> -    __attribute_nonstring__;	/* Hostname for remote login.  */
> -  struct exit_status ut_exit;	/* Exit status of a process
> marked
> -				   as DEAD_PROCESS.  */
> -/* The ut_session and ut_tv fields must be the same size when
> compiled
> -   32- and 64-bit.  This allows data files and shared memory to be
> -   shared between 32- and 64-bit applications.  */
> -#if __WORDSIZE_TIME64_COMPAT32
> -  int32_t ut_session;		/* Session ID, used for
> windowing.  */
> -  struct
> -  {
> -    int32_t tv_sec;		/* Seconds.  */
> -    int32_t tv_usec;		/* Microseconds.  */
> -  } ut_tv;			/* Time entry was made.  */
> -#else
> -  long int ut_session;		/* Session ID, used for
> windowing.  */
> -  struct timeval ut_tv;		/* Time entry was made.  */
> -#endif
> -
> -  int32_t ut_addr_v6[4];	/* Internet address of remote host.
> */
> -  char __glibc_reserved[20];		/* Reserved for future
> use.  */ -};
> +#include <bits/struct_utmp.h>
>  
>  /* Backwards compatibility hacks.  */
>  #define ut_name		ut_user
> diff --git a/login/Makefile b/login/Makefile
> index d897057bbd..58d5d4d64a 100644
> --- a/login/Makefile
> +++ b/login/Makefile
> @@ -23,7 +23,8 @@ subdir	:= login
>  
>  include ../Makeconfig
>  
> -headers	:= utmp.h bits/utmp.h lastlog.h pty.h
> +headers	:= utmp.h bits/utmp.h lastlog.h pty.h
> bits/struct_lastlog.h \
> +	   bits/struct_utmp.h bits/struct_utmpx.h
>  
>  routines := getlogin getlogin_r setlogin getlogin_r_chk \
>  	    getutent getutent_r getutid getutline getutid_r
> getutline_r \ diff --git a/sysdeps/gnu/bits/struct_utmpx.h
> b/sysdeps/gnu/bits/struct_utmpx.h new file mode 100644
> index 0000000000..8bfc786cd8
> --- /dev/null
> +++ b/sysdeps/gnu/bits/struct_utmpx.h
> @@ -0,0 +1,55 @@
> +/* The 'struct utmpx' type.
> +   Copyright (C) 2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be
> useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef _UTMPX_H
> +# error "Never include <bits/struct_utmpx.h> directly; use <utmpx.h>
> instead." +#endif
> +
> +/* The structure describing an entry in the user accounting
> database.  */ +struct utmpx
> +{
> +  short int ut_type;		/* Type of login.  */
> +  __pid_t ut_pid;		/* Process ID of login process.  */
> +  char ut_line[__UT_LINESIZE]
> +    __attribute_nonstring__;	/* Devicename.  */
> +  char ut_id[4]
> +    __attribute_nonstring__;	/* Inittab ID.  */
> +  char ut_user[__UT_NAMESIZE]
> +    __attribute_nonstring__;	/* Username.  */
> +  char ut_host[__UT_HOSTSIZE]
> +    __attribute_nonstring__;	/* Hostname for remote login.  */
> +  struct __exit_status ut_exit;	/* Exit status of a process
> marked
> +				   as DEAD_PROCESS.  */
> +
> +/* The fields ut_session and ut_tv must be the same size when
> compiled
> +   32- and 64-bit.  This allows files and shared memory to be shared
> +   between 32- and 64-bit applications.  */
> +#if __WORDSIZE_TIME64_COMPAT32
> +  __int32_t ut_session;		/* Session ID, used for
> windowing.  */
> +  struct
> +  {
> +    __int32_t tv_sec;		/* Seconds.  */
> +    __int32_t tv_usec;		/* Microseconds.  */
> +  } ut_tv;			/* Time entry was made.  */
> +#else
> +  long int ut_session;		/* Session ID, used for
> windowing.  */
> +  struct timeval ut_tv;		/* Time entry was made.  */
> +#endif
> +  __int32_t ut_addr_v6[4];	/* Internet address of remote
> host.  */
> +  char __glibc_reserved[20];		/* Reserved for future
> use.  */ +};
> diff --git a/sysdeps/gnu/bits/utmpx.h b/sysdeps/gnu/bits/utmpx.h
> index dfd55bfcc3..12ee26871e 100644
> --- a/sysdeps/gnu/bits/utmpx.h
> +++ b/sysdeps/gnu/bits/utmpx.h
> @@ -51,39 +51,7 @@ struct __exit_status
>    };
>  
>  
> -/* The structure describing an entry in the user accounting
> database.  */ -struct utmpx
> -{
> -  short int ut_type;		/* Type of login.  */
> -  __pid_t ut_pid;		/* Process ID of login process.  */
> -  char ut_line[__UT_LINESIZE]
> -    __attribute_nonstring__;	/* Devicename.  */
> -  char ut_id[4]
> -    __attribute_nonstring__;	/* Inittab ID.  */
> -  char ut_user[__UT_NAMESIZE]
> -    __attribute_nonstring__;	/* Username.  */
> -  char ut_host[__UT_HOSTSIZE]
> -    __attribute_nonstring__;	/* Hostname for remote login.  */
> -  struct __exit_status ut_exit;	/* Exit status of a process
> marked
> -				   as DEAD_PROCESS.  */
> -
> -/* The fields ut_session and ut_tv must be the same size when
> compiled
> -   32- and 64-bit.  This allows files and shared memory to be shared
> -   between 32- and 64-bit applications.  */
> -#if __WORDSIZE_TIME64_COMPAT32
> -  __int32_t ut_session;		/* Session ID, used for
> windowing.  */
> -  struct
> -  {
> -    __int32_t tv_sec;		/* Seconds.  */
> -    __int32_t tv_usec;		/* Microseconds.  */
> -  } ut_tv;			/* Time entry was made.  */
> -#else
> -  long int ut_session;		/* Session ID, used for
> windowing.  */
> -  struct timeval ut_tv;		/* Time entry was made.  */
> -#endif
> -  __int32_t ut_addr_v6[4];	/* Internet address of remote
> host.  */
> -  char __glibc_reserved[20];		/* Reserved for future
> use.  */ -};
> +#include <bits/struct_utmpx.h>
>  
>  
>  /* Values for the `ut_type' field of a `struct utmpx'.  */
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_lastlog.h
> b/sysdeps/unix/sysv/linux/s390/bits/struct_lastlog.h new file mode
> 100644 index 0000000000..2fa409aeec
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/s390/bits/struct_lastlog.h
> @@ -0,0 +1,35 @@
> +/* The 'struct lastlog' type.
> +   Copyright (C) 2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be
> useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef _UTMP_H
> +# error "Never include <bits/struct_lastlog.h> directly; use
> <utmp.h> instead." +#endif
> +
> +/* The structure describing an entry in the database of
> +   previous logins.  */
> +struct lastlog
> +  {
> +#if __WORDSIZE == 32
> +    int64_t ll_time;
> +#else
> +    __time_t ll_time;
> +#endif
> +    char ll_line[UT_LINESIZE];
> +    char ll_host[UT_HOSTSIZE];
> +  };
> +
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_utmp.h
> b/sysdeps/unix/sysv/linux/s390/bits/struct_utmp.h new file mode 100644
> index 0000000000..748240e528
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/s390/bits/struct_utmp.h
> @@ -0,0 +1,51 @@
> +/* The 'struct utmp' type, describing entries in the utmp file.
> +   Copyright (C) 2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be
> useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +/* The structure describing an entry in the user accounting
> database.  */ +struct utmp
> +{
> +  short int ut_type;		/* Type of login.  */
> +  pid_t ut_pid;			/* Process ID of login
> process.  */
> +  char ut_line[UT_LINESIZE]
> +     __attribute_nonstring__;	/* Devicename.  */
> +  char ut_id[4]
> +    __attribute_nonstring__;	/* Inittab ID.  */
> +  char ut_user[UT_NAMESIZE]
> +     __attribute_nonstring__;	/* Username.  */
> +  char ut_host[UT_HOSTSIZE]
> +     __attribute_nonstring__;	/* Hostname for remote login.
> */
> +  struct exit_status ut_exit;	/* Exit status of a process
> marked
> +				   as DEAD_PROCESS.  */
> +/* The ut_session and ut_tv fields must be the same size when
> compiled
> +   32- and 64-bit.  This allows data files and shared memory to be
> +   shared between 32- and 64-bit applications.  */
> +#if __WORDSIZE == 32
> +  int64_t ut_session;		/* Session ID, used for
> windowing.  */
> +  struct
> +  {
> +    int64_t tv_sec;		/* Seconds.  */
> +    int64_t tv_usec;		/* Microseconds.  */
> +  } ut_tv;			/* Time entry was made.  */
> +#else
> +  long int ut_session;		/* Session ID, used for
> windowing.  */
> +  struct timeval ut_tv;		/* Time entry was made.  */
> +#endif
> +
> +  int32_t ut_addr_v6[4];	/* Internet address of remote host.
> */
> +  char __glibc_reserved[20];		/* Reserved for future
> use.  */ +};
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/utmpx.h
> b/sysdeps/unix/sysv/linux/s390/bits/struct_utmpx.h similarity index
> 56% rename from sysdeps/unix/sysv/linux/s390/bits/utmpx.h
> rename to sysdeps/unix/sysv/linux/s390/bits/struct_utmpx.h
> index d68df97bef..67fd7be51c 100644
> --- a/sysdeps/unix/sysv/linux/s390/bits/utmpx.h
> +++ b/sysdeps/unix/sysv/linux/s390/bits/struct_utmpx.h
> @@ -1,5 +1,5 @@
> -/* Structures and definitions for the user accounting database.  GNU
> version.
> -   Copyright (C) 1997-2020 Free Software Foundation, Inc.
> +/* The 'struct utmpx' type.
> +   Copyright (C) 2020 Free Software Foundation, Inc.
>     This file is part of the GNU C Library.
>  
>     The GNU C Library is free software; you can redistribute it and/or
> @@ -17,40 +17,9 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #ifndef _UTMPX_H
> -# error "Never include <bits/utmpx.h> directly; use <utmpx.h>
> instead." +# error "Never include <bits/struct_utmpx.h> directly; use
> <utmpx.h> instead." #endif
>  
> -#include <bits/types.h>
> -#include <sys/time.h>
> -#include <bits/wordsize.h>
> -
> -
> -#ifdef __USE_GNU
> -# include <paths.h>
> -# define _PATH_UTMPX	_PATH_UTMP
> -# define _PATH_WTMPX	_PATH_WTMP
> -#endif
> -
> -
> -#define __UT_LINESIZE	32
> -#define __UT_NAMESIZE	32
> -#define __UT_HOSTSIZE	256
> -
> -
> -/* The structure describing the status of a terminated process.  This
> -   type is used in `struct utmpx' below.  */
> -struct __exit_status
> -  {
> -#ifdef __USE_GNU
> -    short int e_termination;	/* Process termination status.
> */
> -    short int e_exit;		/* Process exit status.  */
> -#else
> -    short int __e_termination;	/* Process termination status.
>  */
> -    short int __e_exit;		/* Process exit status.  */
> -#endif
> -  };
> -
> -
>  /* The structure describing an entry in the user accounting
> database.  */ struct utmpx
>  {
> @@ -84,23 +53,3 @@ struct utmpx
>    __int32_t ut_addr_v6[4];	/* Internet address of remote
> host.  */ char __glibc_reserved[20];		/* Reserved for
> future use.  */ };
> -
> -
> -/* Values for the `ut_type' field of a `struct utmpx'.  */
> -#define EMPTY		0	/* No valid user accounting
> information.  */ -
> -#ifdef __USE_GNU
> -# define RUN_LVL	1	/* The system's runlevel.  */
> -#endif
> -#define BOOT_TIME	2	/* Time of system boot.  */
> -#define NEW_TIME	3	/* Time after system clock changed.
>  */ -#define OLD_TIME	4	/* Time when system clock
> changed.  */ -
> -#define INIT_PROCESS	5	/* Process spawned by the init
> process.  */ -#define LOGIN_PROCESS	6	/* Session leader
> of a logged in user.  */ -#define USER_PROCESS	7	/*
> Normal process.  */ -#define DEAD_PROCESS	8	/*
> Terminated process.  */ -
> -#ifdef __USE_GNU
> -# define ACCOUNTING	9	/* System accounting.  */
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/utmp.h
> b/sysdeps/unix/sysv/linux/s390/bits/utmp.h deleted file mode 100644
> index ec0ee02303..0000000000
> --- a/sysdeps/unix/sysv/linux/s390/bits/utmp.h
> +++ /dev/null
> @@ -1,127 +0,0 @@
> -/* The `struct utmp' type, describing entries in the utmp file.  GNU
> version.
> -   Copyright (C) 1993-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be
> useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _UTMP_H
> -# error "Never include <bits/utmp.h> directly; use <utmp.h> instead."
> -#endif
> -
> -#include <paths.h>
> -#include <sys/time.h>
> -#include <sys/types.h>
> -#include <bits/wordsize.h>
> -
> -
> -#define UT_LINESIZE	32
> -#define UT_NAMESIZE	32
> -#define UT_HOSTSIZE	256
> -
> -
> -/* The structure describing an entry in the database of
> -   previous logins.  */
> -struct lastlog
> -  {
> -#if __WORDSIZE == 32
> -    int64_t ll_time;
> -#else
> -    __time_t ll_time;
> -#endif
> -    char ll_line[UT_LINESIZE];
> -    char ll_host[UT_HOSTSIZE];
> -  };
> -
> -
> -/* The structure describing the status of a terminated process.  This
> -   type is used in `struct utmp' below.  */
> -struct exit_status
> -  {
> -    short int e_termination;	/* Process termination status.
> */
> -    short int e_exit;		/* Process exit status.  */
> -  };
> -
> -
> -/* The structure describing an entry in the user accounting
> database.  */ -struct utmp
> -{
> -  short int ut_type;		/* Type of login.  */
> -  pid_t ut_pid;			/* Process ID of login
> process.  */
> -  char ut_line[UT_LINESIZE]
> -     __attribute_nonstring__;	/* Devicename.  */
> -  char ut_id[4]
> -    __attribute_nonstring__;	/* Inittab ID.  */
> -  char ut_user[UT_NAMESIZE]
> -     __attribute_nonstring__;	/* Username.  */
> -  char ut_host[UT_HOSTSIZE]
> -     __attribute_nonstring__;	/* Hostname for remote login.
> */
> -  struct exit_status ut_exit;	/* Exit status of a process
> marked
> -				   as DEAD_PROCESS.  */
> -/* The ut_session and ut_tv fields must be the same size when
> compiled
> -   32- and 64-bit.  This allows data files and shared memory to be
> -   shared between 32- and 64-bit applications.  */
> -#if __WORDSIZE == 32
> -  int64_t ut_session;		/* Session ID, used for
> windowing.  */
> -  struct
> -  {
> -    int64_t tv_sec;		/* Seconds.  */
> -    int64_t tv_usec;		/* Microseconds.  */
> -  } ut_tv;			/* Time entry was made.  */
> -#else
> -  long int ut_session;		/* Session ID, used for
> windowing.  */
> -  struct timeval ut_tv;		/* Time entry was made.  */
> -#endif
> -
> -  int32_t ut_addr_v6[4];	/* Internet address of remote host.
> */
> -  char __glibc_reserved[20];		/* Reserved for future
> use.  */ -};
> -
> -/* Backwards compatibility hacks.  */
> -#define ut_name		ut_user
> -#ifndef _NO_UT_TIME
> -/* We have a problem here: `ut_time' is also used otherwise.  Define
> -   _NO_UT_TIME if the compiler complains.  */
> -# define ut_time	ut_tv.tv_sec
> -#endif
> -#define ut_xtime	ut_tv.tv_sec
> -#define ut_addr		ut_addr_v6[0]
> -
> -
> -/* Values for the `ut_type' field of a `struct utmp'.  */
> -#define EMPTY		0	/* No valid user accounting
> information.  */ -
> -#define RUN_LVL		1	/* The system's runlevel.  */
> -#define BOOT_TIME	2	/* Time of system boot.  */
> -#define NEW_TIME	3	/* Time after system clock changed.
>  */ -#define OLD_TIME	4	/* Time when system clock
> changed.  */ -
> -#define INIT_PROCESS	5	/* Process spawned by the init
> process.  */ -#define LOGIN_PROCESS	6	/* Session leader
> of a logged in user.  */ -#define USER_PROCESS	7	/*
> Normal process.  */ -#define DEAD_PROCESS	8	/*
> Terminated process.  */ -
> -#define ACCOUNTING	9
> -
> -/* Old Linux name for the EMPTY type.  */
> -#define UT_UNKNOWN	EMPTY
> -
> -
> -/* Tell the user that we have a modern system with UT_HOST, UT_PID,
> -   UT_TYPE, UT_ID and UT_TV fields.  */
> -#define _HAVE_UT_TYPE	1
> -#define _HAVE_UT_PID	1
> -#define _HAVE_UT_ID	1
> -#define _HAVE_UT_TV	1
> -#define _HAVE_UT_HOST	1




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
  

Patch

diff --git a/bits/struct_lastlog.h b/bits/struct_lastlog.h
new file mode 100644
index 0000000000..122a44abd0
--- /dev/null
+++ b/bits/struct_lastlog.h
@@ -0,0 +1,34 @@ 
+/* The 'struct lastlog' type.
+   Copyright (C) 2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _UTMP_H
+# error "Never include <bits/struct_lastlog.h> directly; use <utmp.h> instead."
+#endif
+
+/* The structure describing an entry in the database of
+   previous logins.  */
+struct lastlog
+  {
+#if __WORDSIZE_TIME64_COMPAT32
+    int32_t ll_time;
+#else
+    __time_t ll_time;
+#endif
+    char ll_line[UT_LINESIZE];
+    char ll_host[UT_HOSTSIZE];
+  };
diff --git a/bits/struct_utmp.h b/bits/struct_utmp.h
new file mode 100644
index 0000000000..4b05c91515
--- /dev/null
+++ b/bits/struct_utmp.h
@@ -0,0 +1,55 @@ 
+/* The 'struct utmp' type, describing entries in the utmp file.
+   Copyright (C) 2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _UTMP_H
+# error "Never include <bits/struct_utmp.h> directly; use <utmp.h> instead."
+#endif
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmp
+{
+  short int ut_type;		/* Type of login.  */
+  pid_t ut_pid;			/* Process ID of login process.  */
+  char ut_line[UT_LINESIZE]
+    __attribute_nonstring__;	/* Devicename.  */
+  char ut_id[4]
+    __attribute_nonstring__;	/* Inittab ID.  */
+  char ut_user[UT_NAMESIZE]
+    __attribute_nonstring__;	/* Username.  */
+  char ut_host[UT_HOSTSIZE]
+    __attribute_nonstring__;	/* Hostname for remote login.  */
+  struct exit_status ut_exit;	/* Exit status of a process marked
+				   as DEAD_PROCESS.  */
+/* The ut_session and ut_tv fields must be the same size when compiled
+   32- and 64-bit.  This allows data files and shared memory to be
+   shared between 32- and 64-bit applications.  */
+#if __WORDSIZE_TIME64_COMPAT32
+  int32_t ut_session;		/* Session ID, used for windowing.  */
+  struct
+  {
+    int32_t tv_sec;		/* Seconds.  */
+    int32_t tv_usec;		/* Microseconds.  */
+  } ut_tv;			/* Time entry was made.  */
+#else
+  long int ut_session;		/* Session ID, used for windowing.  */
+  struct timeval ut_tv;		/* Time entry was made.  */
+#endif
+
+  int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
+  char __glibc_reserved[20];		/* Reserved for future use.  */
+};
diff --git a/bits/utmp.h b/bits/utmp.h
index b82d14536f..1647d0c67b 100644
--- a/bits/utmp.h
+++ b/bits/utmp.h
@@ -31,18 +31,7 @@ 
 #define UT_HOSTSIZE	256
 
 
-/* The structure describing an entry in the database of
-   previous logins.  */
-struct lastlog
-  {
-#if __WORDSIZE_TIME64_COMPAT32
-    int32_t ll_time;
-#else
-    __time_t ll_time;
-#endif
-    char ll_line[UT_LINESIZE];
-    char ll_host[UT_HOSTSIZE];
-  };
+#include <bits/struct_lastlog.h>
 
 
 /* The structure describing the status of a terminated process.  This
@@ -53,40 +42,7 @@  struct exit_status
     short int e_exit;		/* Process exit status.  */
   };
 
-
-/* The structure describing an entry in the user accounting database.  */
-struct utmp
-{
-  short int ut_type;		/* Type of login.  */
-  pid_t ut_pid;			/* Process ID of login process.  */
-  char ut_line[UT_LINESIZE]
-    __attribute_nonstring__;	/* Devicename.  */
-  char ut_id[4]
-    __attribute_nonstring__;	/* Inittab ID.  */
-  char ut_user[UT_NAMESIZE]
-    __attribute_nonstring__;	/* Username.  */
-  char ut_host[UT_HOSTSIZE]
-    __attribute_nonstring__;	/* Hostname for remote login.  */
-  struct exit_status ut_exit;	/* Exit status of a process marked
-				   as DEAD_PROCESS.  */
-/* The ut_session and ut_tv fields must be the same size when compiled
-   32- and 64-bit.  This allows data files and shared memory to be
-   shared between 32- and 64-bit applications.  */
-#if __WORDSIZE_TIME64_COMPAT32
-  int32_t ut_session;		/* Session ID, used for windowing.  */
-  struct
-  {
-    int32_t tv_sec;		/* Seconds.  */
-    int32_t tv_usec;		/* Microseconds.  */
-  } ut_tv;			/* Time entry was made.  */
-#else
-  long int ut_session;		/* Session ID, used for windowing.  */
-  struct timeval ut_tv;		/* Time entry was made.  */
-#endif
-
-  int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
-  char __glibc_reserved[20];		/* Reserved for future use.  */
-};
+#include <bits/struct_utmp.h>
 
 /* Backwards compatibility hacks.  */
 #define ut_name		ut_user
diff --git a/login/Makefile b/login/Makefile
index d897057bbd..58d5d4d64a 100644
--- a/login/Makefile
+++ b/login/Makefile
@@ -23,7 +23,8 @@  subdir	:= login
 
 include ../Makeconfig
 
-headers	:= utmp.h bits/utmp.h lastlog.h pty.h
+headers	:= utmp.h bits/utmp.h lastlog.h pty.h bits/struct_lastlog.h \
+	   bits/struct_utmp.h bits/struct_utmpx.h
 
 routines := getlogin getlogin_r setlogin getlogin_r_chk \
 	    getutent getutent_r getutid getutline getutid_r getutline_r \
diff --git a/sysdeps/gnu/bits/struct_utmpx.h b/sysdeps/gnu/bits/struct_utmpx.h
new file mode 100644
index 0000000000..8bfc786cd8
--- /dev/null
+++ b/sysdeps/gnu/bits/struct_utmpx.h
@@ -0,0 +1,55 @@ 
+/* The 'struct utmpx' type.
+   Copyright (C) 2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _UTMPX_H
+# error "Never include <bits/struct_utmpx.h> directly; use <utmpx.h> instead."
+#endif
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmpx
+{
+  short int ut_type;		/* Type of login.  */
+  __pid_t ut_pid;		/* Process ID of login process.  */
+  char ut_line[__UT_LINESIZE]
+    __attribute_nonstring__;	/* Devicename.  */
+  char ut_id[4]
+    __attribute_nonstring__;	/* Inittab ID.  */
+  char ut_user[__UT_NAMESIZE]
+    __attribute_nonstring__;	/* Username.  */
+  char ut_host[__UT_HOSTSIZE]
+    __attribute_nonstring__;	/* Hostname for remote login.  */
+  struct __exit_status ut_exit;	/* Exit status of a process marked
+				   as DEAD_PROCESS.  */
+
+/* The fields ut_session and ut_tv must be the same size when compiled
+   32- and 64-bit.  This allows files and shared memory to be shared
+   between 32- and 64-bit applications.  */
+#if __WORDSIZE_TIME64_COMPAT32
+  __int32_t ut_session;		/* Session ID, used for windowing.  */
+  struct
+  {
+    __int32_t tv_sec;		/* Seconds.  */
+    __int32_t tv_usec;		/* Microseconds.  */
+  } ut_tv;			/* Time entry was made.  */
+#else
+  long int ut_session;		/* Session ID, used for windowing.  */
+  struct timeval ut_tv;		/* Time entry was made.  */
+#endif
+  __int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
+  char __glibc_reserved[20];		/* Reserved for future use.  */
+};
diff --git a/sysdeps/gnu/bits/utmpx.h b/sysdeps/gnu/bits/utmpx.h
index dfd55bfcc3..12ee26871e 100644
--- a/sysdeps/gnu/bits/utmpx.h
+++ b/sysdeps/gnu/bits/utmpx.h
@@ -51,39 +51,7 @@  struct __exit_status
   };
 
 
-/* The structure describing an entry in the user accounting database.  */
-struct utmpx
-{
-  short int ut_type;		/* Type of login.  */
-  __pid_t ut_pid;		/* Process ID of login process.  */
-  char ut_line[__UT_LINESIZE]
-    __attribute_nonstring__;	/* Devicename.  */
-  char ut_id[4]
-    __attribute_nonstring__;	/* Inittab ID.  */
-  char ut_user[__UT_NAMESIZE]
-    __attribute_nonstring__;	/* Username.  */
-  char ut_host[__UT_HOSTSIZE]
-    __attribute_nonstring__;	/* Hostname for remote login.  */
-  struct __exit_status ut_exit;	/* Exit status of a process marked
-				   as DEAD_PROCESS.  */
-
-/* The fields ut_session and ut_tv must be the same size when compiled
-   32- and 64-bit.  This allows files and shared memory to be shared
-   between 32- and 64-bit applications.  */
-#if __WORDSIZE_TIME64_COMPAT32
-  __int32_t ut_session;		/* Session ID, used for windowing.  */
-  struct
-  {
-    __int32_t tv_sec;		/* Seconds.  */
-    __int32_t tv_usec;		/* Microseconds.  */
-  } ut_tv;			/* Time entry was made.  */
-#else
-  long int ut_session;		/* Session ID, used for windowing.  */
-  struct timeval ut_tv;		/* Time entry was made.  */
-#endif
-  __int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
-  char __glibc_reserved[20];		/* Reserved for future use.  */
-};
+#include <bits/struct_utmpx.h>
 
 
 /* Values for the `ut_type' field of a `struct utmpx'.  */
diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_lastlog.h b/sysdeps/unix/sysv/linux/s390/bits/struct_lastlog.h
new file mode 100644
index 0000000000..2fa409aeec
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/bits/struct_lastlog.h
@@ -0,0 +1,35 @@ 
+/* The 'struct lastlog' type.
+   Copyright (C) 2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _UTMP_H
+# error "Never include <bits/struct_lastlog.h> directly; use <utmp.h> instead."
+#endif
+
+/* The structure describing an entry in the database of
+   previous logins.  */
+struct lastlog
+  {
+#if __WORDSIZE == 32
+    int64_t ll_time;
+#else
+    __time_t ll_time;
+#endif
+    char ll_line[UT_LINESIZE];
+    char ll_host[UT_HOSTSIZE];
+  };
+
diff --git a/sysdeps/unix/sysv/linux/s390/bits/struct_utmp.h b/sysdeps/unix/sysv/linux/s390/bits/struct_utmp.h
new file mode 100644
index 0000000000..748240e528
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/bits/struct_utmp.h
@@ -0,0 +1,51 @@ 
+/* The 'struct utmp' type, describing entries in the utmp file.
+   Copyright (C) 2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmp
+{
+  short int ut_type;		/* Type of login.  */
+  pid_t ut_pid;			/* Process ID of login process.  */
+  char ut_line[UT_LINESIZE]
+     __attribute_nonstring__;	/* Devicename.  */
+  char ut_id[4]
+    __attribute_nonstring__;	/* Inittab ID.  */
+  char ut_user[UT_NAMESIZE]
+     __attribute_nonstring__;	/* Username.  */
+  char ut_host[UT_HOSTSIZE]
+     __attribute_nonstring__;	/* Hostname for remote login.  */
+  struct exit_status ut_exit;	/* Exit status of a process marked
+				   as DEAD_PROCESS.  */
+/* The ut_session and ut_tv fields must be the same size when compiled
+   32- and 64-bit.  This allows data files and shared memory to be
+   shared between 32- and 64-bit applications.  */
+#if __WORDSIZE == 32
+  int64_t ut_session;		/* Session ID, used for windowing.  */
+  struct
+  {
+    int64_t tv_sec;		/* Seconds.  */
+    int64_t tv_usec;		/* Microseconds.  */
+  } ut_tv;			/* Time entry was made.  */
+#else
+  long int ut_session;		/* Session ID, used for windowing.  */
+  struct timeval ut_tv;		/* Time entry was made.  */
+#endif
+
+  int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
+  char __glibc_reserved[20];		/* Reserved for future use.  */
+};
diff --git a/sysdeps/unix/sysv/linux/s390/bits/utmpx.h b/sysdeps/unix/sysv/linux/s390/bits/struct_utmpx.h
similarity index 56%
rename from sysdeps/unix/sysv/linux/s390/bits/utmpx.h
rename to sysdeps/unix/sysv/linux/s390/bits/struct_utmpx.h
index d68df97bef..67fd7be51c 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/utmpx.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/struct_utmpx.h
@@ -1,5 +1,5 @@ 
-/* Structures and definitions for the user accounting database.  GNU version.
-   Copyright (C) 1997-2020 Free Software Foundation, Inc.
+/* The 'struct utmpx' type.
+   Copyright (C) 2020 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -17,40 +17,9 @@ 
    <https://www.gnu.org/licenses/>.  */
 
 #ifndef _UTMPX_H
-# error "Never include <bits/utmpx.h> directly; use <utmpx.h> instead."
+# error "Never include <bits/struct_utmpx.h> directly; use <utmpx.h> instead."
 #endif
 
-#include <bits/types.h>
-#include <sys/time.h>
-#include <bits/wordsize.h>
-
-
-#ifdef __USE_GNU
-# include <paths.h>
-# define _PATH_UTMPX	_PATH_UTMP
-# define _PATH_WTMPX	_PATH_WTMP
-#endif
-
-
-#define __UT_LINESIZE	32
-#define __UT_NAMESIZE	32
-#define __UT_HOSTSIZE	256
-
-
-/* The structure describing the status of a terminated process.  This
-   type is used in `struct utmpx' below.  */
-struct __exit_status
-  {
-#ifdef __USE_GNU
-    short int e_termination;	/* Process termination status.  */
-    short int e_exit;		/* Process exit status.  */
-#else
-    short int __e_termination;	/* Process termination status.  */
-    short int __e_exit;		/* Process exit status.  */
-#endif
-  };
-
-
 /* The structure describing an entry in the user accounting database.  */
 struct utmpx
 {
@@ -84,23 +53,3 @@  struct utmpx
   __int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
   char __glibc_reserved[20];		/* Reserved for future use.  */
 };
-
-
-/* Values for the `ut_type' field of a `struct utmpx'.  */
-#define EMPTY		0	/* No valid user accounting information.  */
-
-#ifdef __USE_GNU
-# define RUN_LVL	1	/* The system's runlevel.  */
-#endif
-#define BOOT_TIME	2	/* Time of system boot.  */
-#define NEW_TIME	3	/* Time after system clock changed.  */
-#define OLD_TIME	4	/* Time when system clock changed.  */
-
-#define INIT_PROCESS	5	/* Process spawned by the init process.  */
-#define LOGIN_PROCESS	6	/* Session leader of a logged in user.  */
-#define USER_PROCESS	7	/* Normal process.  */
-#define DEAD_PROCESS	8	/* Terminated process.  */
-
-#ifdef __USE_GNU
-# define ACCOUNTING	9	/* System accounting.  */
-#endif
diff --git a/sysdeps/unix/sysv/linux/s390/bits/utmp.h b/sysdeps/unix/sysv/linux/s390/bits/utmp.h
deleted file mode 100644
index ec0ee02303..0000000000
--- a/sysdeps/unix/sysv/linux/s390/bits/utmp.h
+++ /dev/null
@@ -1,127 +0,0 @@ 
-/* The `struct utmp' type, describing entries in the utmp file.  GNU version.
-   Copyright (C) 1993-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#ifndef _UTMP_H
-# error "Never include <bits/utmp.h> directly; use <utmp.h> instead."
-#endif
-
-#include <paths.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <bits/wordsize.h>
-
-
-#define UT_LINESIZE	32
-#define UT_NAMESIZE	32
-#define UT_HOSTSIZE	256
-
-
-/* The structure describing an entry in the database of
-   previous logins.  */
-struct lastlog
-  {
-#if __WORDSIZE == 32
-    int64_t ll_time;
-#else
-    __time_t ll_time;
-#endif
-    char ll_line[UT_LINESIZE];
-    char ll_host[UT_HOSTSIZE];
-  };
-
-
-/* The structure describing the status of a terminated process.  This
-   type is used in `struct utmp' below.  */
-struct exit_status
-  {
-    short int e_termination;	/* Process termination status.  */
-    short int e_exit;		/* Process exit status.  */
-  };
-
-
-/* The structure describing an entry in the user accounting database.  */
-struct utmp
-{
-  short int ut_type;		/* Type of login.  */
-  pid_t ut_pid;			/* Process ID of login process.  */
-  char ut_line[UT_LINESIZE]
-     __attribute_nonstring__;	/* Devicename.  */
-  char ut_id[4]
-    __attribute_nonstring__;	/* Inittab ID.  */
-  char ut_user[UT_NAMESIZE]
-     __attribute_nonstring__;	/* Username.  */
-  char ut_host[UT_HOSTSIZE]
-     __attribute_nonstring__;	/* Hostname for remote login.  */
-  struct exit_status ut_exit;	/* Exit status of a process marked
-				   as DEAD_PROCESS.  */
-/* The ut_session and ut_tv fields must be the same size when compiled
-   32- and 64-bit.  This allows data files and shared memory to be
-   shared between 32- and 64-bit applications.  */
-#if __WORDSIZE == 32
-  int64_t ut_session;		/* Session ID, used for windowing.  */
-  struct
-  {
-    int64_t tv_sec;		/* Seconds.  */
-    int64_t tv_usec;		/* Microseconds.  */
-  } ut_tv;			/* Time entry was made.  */
-#else
-  long int ut_session;		/* Session ID, used for windowing.  */
-  struct timeval ut_tv;		/* Time entry was made.  */
-#endif
-
-  int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
-  char __glibc_reserved[20];		/* Reserved for future use.  */
-};
-
-/* Backwards compatibility hacks.  */
-#define ut_name		ut_user
-#ifndef _NO_UT_TIME
-/* We have a problem here: `ut_time' is also used otherwise.  Define
-   _NO_UT_TIME if the compiler complains.  */
-# define ut_time	ut_tv.tv_sec
-#endif
-#define ut_xtime	ut_tv.tv_sec
-#define ut_addr		ut_addr_v6[0]
-
-
-/* Values for the `ut_type' field of a `struct utmp'.  */
-#define EMPTY		0	/* No valid user accounting information.  */
-
-#define RUN_LVL		1	/* The system's runlevel.  */
-#define BOOT_TIME	2	/* Time of system boot.  */
-#define NEW_TIME	3	/* Time after system clock changed.  */
-#define OLD_TIME	4	/* Time when system clock changed.  */
-
-#define INIT_PROCESS	5	/* Process spawned by the init process.  */
-#define LOGIN_PROCESS	6	/* Session leader of a logged in user.  */
-#define USER_PROCESS	7	/* Normal process.  */
-#define DEAD_PROCESS	8	/* Terminated process.  */
-
-#define ACCOUNTING	9
-
-/* Old Linux name for the EMPTY type.  */
-#define UT_UNKNOWN	EMPTY
-
-
-/* Tell the user that we have a modern system with UT_HOST, UT_PID,
-   UT_TYPE, UT_ID and UT_TV fields.  */
-#define _HAVE_UT_TYPE	1
-#define _HAVE_UT_PID	1
-#define _HAVE_UT_ID	1
-#define _HAVE_UT_TV	1
-#define _HAVE_UT_HOST	1