Hi, The Gnulib module 'readutmp' has changed a lot recently: It can now determine the boot time appropriately on all kinds of platforms, including OpenBSD, Android, Minix, Haiku, and Windows.
By the fact that the same code for determination of the boot time is used by the program invocations "who -a" and "update", these have become more consistent. (I'll submit a NEWS entry about this soon.) In particular: * There is no need any more to exclude building 'uptime' on some platforms. * Code for specific platforms, that is in src/uptime.c but not in src/who.c, is no longer needed. Here is a proposed patch for simplification. Tested on: - glibc, - the platforms with sysctl KERN_BOOTTIME (macOS 12.5, FreeBSD 13.2, NetBSD 9.3, OpenBSD 7.2, Minix 3.3), - the platforms with <OS.h> (Haiku r1beta4).
>From f0efeac3b34eb1099c50a149333ef26ee91f92e8 Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Sat, 12 Aug 2023 23:08:58 +0200 Subject: [PATCH] uptime: Simplify following gnulib changes * gnulib: Update to newest. * src/uptime.c: Don't include <sys/sysctl.h>, <OS.h>. (print_uptime): Don't call sysctl, get_system_info, as Gnulib's readutmp module now does this. * build-aux/gen-lists-of-programs.sh (build_if_possible_progs): Remove uptime. (normal_progs): Add uptime. * configure.ac: Remove GNULIB_BOOT_TIME invocation. * m4/boottime.m4: Remove file. --- build-aux/gen-lists-of-programs.sh | 2 +- configure.ac | 2 - gnulib | 2 +- m4/boottime.m4 | 65 ------------------------------ src/uptime.c | 30 -------------- 5 files changed, 2 insertions(+), 99 deletions(-) delete mode 100644 m4/boottime.m4 diff --git a/build-aux/gen-lists-of-programs.sh b/build-aux/gen-lists-of-programs.sh index 3ec9a6dd1..4b6af8a4f 100755 --- a/build-aux/gen-lists-of-programs.sh +++ b/build-aux/gen-lists-of-programs.sh @@ -33,7 +33,6 @@ build_if_possible_progs=' stdbuf stty timeout - uptime users who ' @@ -132,6 +131,7 @@ normal_progs=' unexpand uniq unlink + uptime vdir wc whoami diff --git a/configure.ac b/configure.ac index afc1098f7..786ce81a5 100644 --- a/configure.ac +++ b/configure.ac @@ -406,8 +406,6 @@ AC_DEFUN([coreutils_DUMMY_1], ]) coreutils_DUMMY_1 -GNULIB_BOOT_TIME([gl_ADD_PROG([optional_bin_progs], [uptime])]) - AC_SYS_POSIX_TERMIOS() gl_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL diff --git a/gnulib b/gnulib index e14d7e198..92a6fbdec 160000 --- a/gnulib +++ b/gnulib @@ -1 +1 @@ -Subproject commit e14d7e198f96039dbc4fb2118739e6ca1fc4cec6 +Subproject commit 92a6fbdeccc6373e554d014ba9465b8d1d9cd150 diff --git a/m4/boottime.m4 b/m4/boottime.m4 deleted file mode 100644 index aa440ce1d..000000000 --- a/m4/boottime.m4 +++ /dev/null @@ -1,65 +0,0 @@ -# boottime.m4 serial 4 -# Determine whether this system has infrastructure for obtaining the boot time. - -# Copyright (C) 1996-2023 Free Software Foundation, Inc. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program 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 General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <https://www.gnu.org/licenses/>. - -# GNULIB_BOOT_TIME([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -* ---------------------------------------------------------- -AC_DEFUN([GNULIB_BOOT_TIME], -[ - AC_CHECK_FUNCS([sysctl]) - AC_CHECK_HEADERS_ONCE([sys/param.h]) - AC_CHECK_HEADERS([sys/sysctl.h], [], [], - [AC_INCLUDES_DEFAULT - [#if HAVE_SYS_PARAM_H - #include <sys/param.h> - #endif]]) - AC_CHECK_HEADERS_ONCE([utmpx.h OS.h]) - AC_CACHE_CHECK( - [whether we can get the system boot time], - [gnulib_cv_have_boot_time], - [ - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( -[AC_INCLUDES_DEFAULT -#if HAVE_SYSCTL && HAVE_SYS_SYSCTL_H -# if HAVE_SYS_PARAM_H -# include <sys/param.h> /* needed for OpenBSD 3.0 */ -# endif -# include <sys/sysctl.h> -#endif -#if HAVE_UTMPX_H -# include <utmpx.h> -#endif -#include <utmp.h> -#if HAVE_OS_H -# include <OS.h> -#endif -], -[[ -#if (defined BOOT_TIME \ - || (defined CTL_KERN && defined KERN_BOOTTIME) \ - || HAVE_OS_H) -/* your system *does* have the infrastructure to determine boot time */ -#else -please_tell_us_how_to_determine_boot_time_on_your_system -#endif -]])], - [gnulib_cv_have_boot_time=yes], - [gnulib_cv_have_boot_time=no]) - ]) - AS_IF([test $gnulib_cv_have_boot_time = yes], [$1], [$2]) -]) diff --git a/src/uptime.c b/src/uptime.c index 22a3bdb19..c29798d32 100644 --- a/src/uptime.c +++ b/src/uptime.c @@ -22,14 +22,6 @@ #include <sys/types.h> #include "system.h" -#if HAVE_SYSCTL && HAVE_SYS_SYSCTL_H && ! defined __GLIBC__ -# include <sys/sysctl.h> -#endif - -#if HAVE_OS_H -# include <OS.h> -#endif - #include "c-strtod.h" #include "long-options.h" #include "quote.h" @@ -78,28 +70,6 @@ print_uptime (idx_t n, struct gl_utmp const *this) } #endif /* HAVE_PROC_UPTIME */ -#if HAVE_SYSCTL && ! defined __GLIBC__ \ - && defined CTL_KERN && defined KERN_BOOTTIME - { - /* FreeBSD specific: fetch sysctl "kern.boottime". */ - static int request[2] = { CTL_KERN, KERN_BOOTTIME }; - struct timeval result; - size_t result_len = sizeof result; - - if (sysctl (request, 2, &result, &result_len, nullptr, 0) >= 0) - boot_time = result.tv_sec; - } -#endif - -#if HAVE_OS_H /* BeOS */ - { - system_info si; - - get_system_info (&si); - boot_time = si.boot_time / 1000000; - } -#endif - /* Loop through all the utmp entries we just read and count up the valid ones, also in the process possibly gleaning boottime. */ while (n--) -- 2.34.1