+# ifdef HAVE_UTMPNAME
+# define UTMP_NAME_FUNCTION utmpname
+# endif
+
+# if HAVE_STRUCT_UTMP_UT_EXIT_E_TERMINATION
+# define UT_EXIT_E_TERMINATION(U) ((U)->ut_exit.e_termination)
+# else
+# if HAVE_STRUCT_UTMP_UT_EXIT_UT_TERMINATION
+# define UT_EXIT_E_TERMINATION(U) ((U)->ut_exit.ut_termination)
+# else
+# define UT_EXIT_E_TERMINATION(U) 0
+# endif
+# endif
+
+# if HAVE_STRUCT_UTMP_UT_EXIT_E_EXIT
+# define UT_EXIT_E_EXIT(U) ((U)->ut_exit.e_exit)
+# else
+# if HAVE_STRUCT_UTMP_UT_EXIT_UT_EXIT
+# define UT_EXIT_E_EXIT(U) ((U)->ut_exit.ut_exit)
+# else
+# define UT_EXIT_E_EXIT(U) 0
+# endif
+# endif
+
+# endif
+
+/* Accessor macro for the member named ut_user or ut_name. */
+# ifdef HAVE_UTMPX_H
+
+# if HAVE_STRUCT_UTMPX_UT_USER
+# define UT_USER(Utmp) ((Utmp)->ut_user)
+# endif
+# if HAVE_STRUCT_UTMPX_UT_NAME
+# undef UT_USER
+# define UT_USER(Utmp) ((Utmp)->ut_name)
+# endif
+
+# else
+
+# if HAVE_STRUCT_UTMP_UT_USER
+# define UT_USER(Utmp) ((Utmp)->ut_user)
+# endif
+# if HAVE_STRUCT_UTMP_UT_NAME
+# undef UT_USER
+# define UT_USER(Utmp) ((Utmp)->ut_name)
+# endif
+