--- libutempter-1.1.6/utempter.c.old	2010-11-04 17:14:53.000000000 +0000
+++ libutempter-1.1.6/utempter.c	2018-07-15 07:52:35.620000000 +0000
@@ -32,15 +32,8 @@
 #include <pwd.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
-#include <utmp.h>
-
-#ifdef __GLIBC__
-# include <pty.h>
-#elif defined(__FreeBSD__)
-# include <libutil.h>
-#else
-# error Unsupported platform
-#endif /* __GLIBC__ || __FreeBSD__ */
+#include <paths.h>  /* _PATH_WTMP */
+#include <utmpx.h>
 
 #define	DEV_PREFIX	"/dev/"
 #define	DEV_PREFIX_LEN	(sizeof(DEV_PREFIX)-1)
@@ -106,17 +99,12 @@
 
 static int
 write_uwtmp_record(const char *user, const char *term, const char *host,
-#ifdef __GLIBC__
 		   pid_t pid,
-#endif
 		   int add)
 {
-	struct utmp ut;
+	struct utmpx ut;
 	struct timeval tv;
-
-#ifdef __GLIBC__
 	size_t offset;
-#endif
 
 	memset(&ut, 0, sizeof(ut));
 
@@ -128,8 +116,6 @@
 	if (host)
 		strncpy(ut.ut_host, host, sizeof(ut.ut_host));
 
-#ifdef __GLIBC__
-
 	offset = (strlen(term) <= sizeof(ut.ut_id)) ? 0 :
 			strlen(term) - sizeof(ut.ut_id);
 	strncpy(ut.ut_id, term + offset, sizeof(ut.ut_id));
@@ -144,38 +130,17 @@
 	ut.ut_tv.tv_sec = tv.tv_sec;
 	ut.ut_tv.tv_usec = tv.tv_usec;
 
-	setutent();
-	if (!pututline(&ut))
+	setutxent();
+	if (!pututxline(&ut))
 	{
 #ifdef	UTEMPTER_DEBUG
 		fprintf(stderr, "utempter: pututline: %s\n", strerror(errno));
 #endif
 		exit(EXIT_FAILURE);
 	}
-	endutent();
-
-	(void) updwtmp(_PATH_WTMP, &ut);
-
-#elif defined(__FreeBSD__)
-
-	ut.ut_time = tv.tv_sec;
-
-	if (add)
-	{
-		login(&ut);
-	} else
-	{
-		if (logout(term) != 1)
-		{
-#ifdef	UTEMPTER_DEBUG
-			fprintf(stderr, "utempter: logout: %s\n",
-				strerror(errno));
-#endif
-			exit(EXIT_FAILURE);
-		}
-	}
+	endutxent();
 
-#endif /* __GLIBC__ || __FreeBSD__ */
+	(void) updwtmpx(_PATH_WTMP, &ut);
 
 #ifdef	UTEMPTER_DEBUG
 	fprintf(stderr,
@@ -255,8 +220,6 @@
 	validate_device(device);
 
 	return write_uwtmp_record(pw->pw_name, device + DEV_PREFIX_LEN, host,
-#ifdef __GLIBC__
 				  pid,
-#endif
 				  add);
 }