From cc0a30a876adffa5ec110df9f4e0f21097f6d73e Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 9 Aug 2023 12:06:25 -0700 Subject: [PATCH] Adjust to random-seed move For some time, GNU/Linux systems have put their random-seed file somewhere other than where src/filelock.c looks for it. Catch up to this by having 'configure' scout for it. * configure.ac (BOOT_TIME_FILE): Define this at configure-time. * nt/inc/ms-w32.h (BOOT_TIME_FILE): Override 'configure'. * src/filelock.c (BOOT_TIME_FILE): Remove default definition, since 'configure' defaults it now. --- configure.ac | 31 +++++++++++++++++++++++++++++++ nt/inc/ms-w32.h | 1 + src/filelock.c | 6 ------ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index 6e080c1c666..56c8cf1ae05 100644 --- a/configure.ac +++ b/configure.ac @@ -2625,6 +2625,37 @@ AC_DEFUN fi AC_SUBST([AUTO_DEPEND]) +AC_CACHE_CHECK([for old but post-boot file], + [emacs_cv_boot_time_file], + [AS_CASE([$opsys], + [*bsd|darwin|dragonfly], + [emacs_cv_boot_time_file='not needed'], + [emacs_cv_boot_time_file=unknown + AS_IF([test $cross_compiling = no], + [# systemd puts it in /var/lib/systemd. + # initscripts puts it in /var/lib/urandom (previously /var/lib). + # Linux drivers/char/random.c before 2022-02-21 suggests /var/run. + for file in \ + /var/lib/systemd/random-seed \ + /var/lib/urandom/random-seed \ + /var/lib/random-seed \ + /var/run/random-seed + do + test -f $file && { emacs_cv_boot_time_file=$file; break; } + done])])]) +AS_CASE([$emacs_cv_boot_time_file], + [/*|*:*], [BOOT_TIME_FILE=\"$emacs_cv_boot_time_file\"], + [NULL|nullptr|0], [BOOT_TIME_FILE=$emacs_cv_boot_time_file], + ['not needed'], [BOOT_TIME_FILE=NULL], + [# Guess systemd if unknown. + # If guess is wrong, Emacs falls back on something else. + BOOT_TIME_FILE=\"/var/lib/systemd/random-seed\"]) +AC_DEFINE_UNQUOTED([BOOT_TIME_FILE], [$BOOT_TIME_FILE], + [Name of file that, if it exists, postdates boot and predates + the first Emacs invocation; or a null pointer if no such file is known. + This file is used only on GNU/Linux and other systems + that lack the FreeBSD-style sysctl with KERN_BOOTTIME.]) + #### Choose a window system. ## We leave window_system equal to none if diff --git a/nt/inc/ms-w32.h b/nt/inc/ms-w32.h index 58be1199345..b23fd5030fa 100644 --- a/nt/inc/ms-w32.h +++ b/nt/inc/ms-w32.h @@ -121,6 +121,7 @@ #define HAVE_C99_STRTOLD 1 the output, but that's gross. So this should do; if the file is not there, the boot time will be returned as zero, and filelock.c already handles that. */ +#undef BOOT_TIME_FILE #define BOOT_TIME_FILE "C:/pagefile.sys" /* ============================================================ */ diff --git a/src/filelock.c b/src/filelock.c index 66b8fd2ceac..0ad130353f3 100644 --- a/src/filelock.c +++ b/src/filelock.c @@ -59,12 +59,6 @@ Copyright (C) 1985-1987, 1993-1994, 1996, 1998-2023 Free Software #include #endif -/* A file whose last-modified time is just after the most recent boot. - Define this to be NULL to disable checking for this file. */ -#ifndef BOOT_TIME_FILE -#define BOOT_TIME_FILE "/var/run/random-seed" -#endif - /* Boot time is not available on Android. */ #if defined HAVE_ANDROID && !defined ANDROID_STUBIFY -- 2.39.2