Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package blog for openSUSE:Factory checked in 
at 2026-07-06 12:27:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/blog (Old)
 and      /work/SRC/openSUSE:Factory/.blog.new.1982 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "blog"

Mon Jul  6 12:27:35 2026 rev:27 rq:1363463 version:2.45

Changes:
--------
--- /work/SRC/openSUSE:Factory/blog/blog.changes        2026-06-22 
18:06:08.266702816 +0200
+++ /work/SRC/openSUSE:Factory/.blog.new.1982/blog.changes      2026-07-06 
12:28:01.926437575 +0200
@@ -1,0 +2,47 @@
+Thu Jul  2 10:33:48 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Update to version 2.45
+  Fix early boot LUKS prompt on s390x and resolve memory corruptions
+  This update addresses several critical issues in the early boot phase,
+  especially on s390x architectures, and hardens the daemon's architecture:
+  - Initrd/Dracut: Properly include `systemd-ask-password-blog.path` in
+    sysinit.target.wants during the initrd phase to ensure LUKS password
+    prompts are captured early in the zipl phase.
+  - Systemd Units: Drop restrictive 
`ConditionKernelCommandLine=!plymouth.enable=0`
+    to prevent the agent from being disabled by standard mainframe boot 
parameters.
+  - Memory Corruption: Fix a critical heap corruption by renaming the 
conflicting
+    `alignof()` macro to `ALIGNED_SIZEOF()` and zeroing allocated memory for
+    `struct request` (memset) to prevent reading uninitialized pointers #5.
+  - Kernel Command Line: Improve `parse_cmdline()` to support boolean 
parameters
+    without an explicit value (e.g., `blog.silent` defaults to 
`blog.silent=1`).
+  - New Features: Introduce `blog.silent` to suppress console I/O and 
`blog.coldboot`
+    to explicitly trigger the early coldstart password query.
+  - Lifecycle: Switch `KillMode=none` to `KillMode=mixed` to comply with modern
+    systemd process lifecycle management.
+  Fixes: gh#bitstreamout/showconsole#5
+  Fixes: gh#bitstreamout/showconsole#6
+  Fixes: bsc#1264176
+
+-------------------------------------------------------------------
+Tue Jun 30 14:11:48 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Update to version 2.44
+  Harden blog and use shims units to handle plymouth
+  Disable coldstart requests via epoll
+  Avoid handling fd twice in epoll loop
+
+-------------------------------------------------------------------
+Mon Jun 29 13:14:14 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Correct latest changes of 2.43
+
+-------------------------------------------------------------------
+Thu Jun 25 13:38:15 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Update to version 2.43
+  Make sure that if blog is running it is identified as plymouth Latest
+  also add conflicts to systemd-ask-password-console units in the
+  systemd-ask-password-blog units. This should avoid conflicting password
+  agents asking the same question in s390x.
+
+-------------------------------------------------------------------

Old:
----
  showconsole-2.42.tar.gz

New:
----
  showconsole-2.45.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ blog.spec ++++++
--- /var/tmp/diff_new_pack.c7NNmT/_old  2026-07-06 12:28:03.094478086 +0200
+++ /var/tmp/diff_new_pack.c7NNmT/_new  2026-07-06 12:28:03.094478086 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           blog
-Version:        2.42
+Version:        2.45
 %define sonum   2
 Release:        0
 Summary:        Boot logging
@@ -63,6 +63,7 @@
 Group:          System/Base
 Requires:       blog = %{version}
 Requires:       systemd
+Requires:       udev
 Conflicts:      plymouth
 Conflicts:      plymouth-dracut
 
@@ -202,14 +203,21 @@
 %{_unitdir}/blog-switch-root.service
 %{_unitdir}/blog-umount.service
 %{_unitdir}/blog.service
+%{_unitdir}/plymouth-quit-wait.service
+%{_unitdir}/plymouth-quit.service
+%{_unitdir}/plymouth-read-write.service
+%{_unitdir}/plymouth-start.service
 %{_unitdir}/systemd-ask-password-blog.path
 %{_unitdir}/systemd-ask-password-blog.service
 %{_unitdir}/default.target.wants/blog-quit.service
+%{_unitdir}/default.target.wants/plymouth-quit.service
+%{_unitdir}/default.target.wants/plymouth-quit-wait.service
 %{_unitdir}/emergency.target.wants/blog-quit.service
 %{_unitdir}/halt.target.wants/blog-halt.service
 %{_unitdir}/halt.target.wants/blog-switch-initramfs.service
 %{_unitdir}/initrd-switch-root.target.wants/blog-switch-root.service
 %{_unitdir}/initrd-switch-root.target.wants/blog.service
+%{_unitdir}/initrd-switch-root.target.wants/plymouth-start.service
 %{_unitdir}/kexec.target.wants/blog-kexec.service
 %{_unitdir}/kexec.target.wants/blog-switch-initramfs.service
 %{_unitdir}/local-fs-pre.target.wants/blog-umount.service
@@ -219,6 +227,9 @@
 %{_unitdir}/reboot.target.wants/blog-switch-initramfs.service
 %{_unitdir}/rescue.target.wants/blog-quit.service
 %{_unitdir}/sysinit.target.wants/blog-store-messages.service
+%{_unitdir}/sysinit.target.wants/plymouth-read-write.service
 %{_unitdir}/sysinit.target.wants/blog.service
+%{_unitdir}/sysinit.target.wants/plymouth-start.service
+%{_unitdir}/sysinit.target.wants/systemd-ask-password-blog.path
 %ghost %attr(0644,root,root) 
%{_unitdir}/systemd-ask-password-blog.service.wants/systemd-vconsole-setup.service
 

++++++ showconsole-2.42.tar.gz -> showconsole-2.45.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/Makefile 
new/showconsole-2.45/Makefile
--- old/showconsole-2.42/Makefile       2026-06-22 15:46:21.000000000 +0200
+++ new/showconsole-2.45/Makefile       2026-07-02 11:25:23.000000000 +0200
@@ -15,7 +15,7 @@
 DEBUG   =
 DESTDIR         =
 MAJOR   :=     2
-MINOR   :=     42
+MINOR   :=     45
 VERSION         :=     $(MAJOR).$(MINOR)
 DATE    =      $(shell date +'%d%b%y' | tr '[:lower:]' '[:upper:]')
 COPTS    =
@@ -153,12 +153,17 @@
        ln_r () { \
            local rel="$$(realpath -m --relative-to=$${2%/*}/ $${1%/*}/)"; \
            ln -sf $${rel}/$${1##*/} $${initdir}$${2}; }; \
-       . ./module-setup.sh ; \
+       . ./module-setup.sh; \
        set -xe; install
        $(MKDIR)        $(DESTDIR)$(SYSDUNITS)/local-fs-pre.target.wants
        $(MKDIR)        $(DESTDIR)$(SYSDUNITS)/default.target.wants
+       $(MKDIR)        $(DESTDIR)$(SYSDUNITS)/sysinit.target.wants
+       $(LINK) ../blog-store-messages.service  
$(DESTDIR)$(SYSDUNITS)/sysinit.target.wants/
+       $(LINK) ../plymouth-read-write.service  
$(DESTDIR)$(SYSDUNITS)/sysinit.target.wants/
        $(LINK) ../blog-umount.service  
$(DESTDIR)$(SYSDUNITS)/local-fs-pre.target.wants/
        $(LINK) ../blog-quit.service    
$(DESTDIR)$(SYSDUNITS)/default.target.wants/
+       $(LINK) ../plymouth-quit.service        
$(DESTDIR)$(SYSDUNITS)/default.target.wants/
+       $(LINK) ../plymouth-quit-wait.service   
$(DESTDIR)$(SYSDUNITS)/default.target.wants/
 
 #
 # Make distribution
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/blog.service 
new/showconsole-2.45/blog.service
--- old/showconsole-2.42/blog.service   2026-06-22 15:46:21.000000000 +0200
+++ new/showconsole-2.45/blog.service   2026-07-02 11:25:23.000000000 +0200
@@ -1,5 +1,5 @@
 [Unit]
-Description=Start Blogd at System Bootup
+Description=Start Blogd Core Engine
 DefaultDependencies=no
 Wants=systemd-ask-password-blog.path systemd-vconsole-setup.service
 After=systemd-vconsole-setup.service systemd-udev-trigger.service 
systemd-udevd.service
@@ -11,8 +11,8 @@
 RefuseManualStart=true
 
 [Service]
+ExecStart=/sbin/blogd
 Type=forking
 RemainAfterExit=yes
 KillMode=mixed
 SendSIGKILL=no
-ExecStart=/sbin/blogd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/blogd.8.in 
new/showconsole-2.45/blogd.8.in
--- old/showconsole-2.42/blogd.8.in     2026-06-22 15:46:21.000000000 +0200
+++ new/showconsole-2.45/blogd.8.in     2026-07-02 11:25:23.000000000 +0200
@@ -1,12 +1,13 @@
 .\"
 .\" Copyright 2000 Werner Fink, 2000 SuSE GmbH Nuernberg, Germany.
+.\" Copyright 2026 SUSE Software Solutions Germany GmbH
 .\"
 .\" 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 2 of the License, or
 .\" (at your option) any later version.
 .\"
-.TH BLOGD 8 "Jan 14, 2016" "Version 2.12" "The SUSE boot concept"
+.TH BLOGD 8 "Jul 02, 2026" "Version 2.45" "The SUSE boot concept"
 .UC 8
 .SH NAME
 blogd \- boot logging on /dev/console
@@ -46,34 +47,41 @@
 This option is used at shutdown, that is reboot, halt, and poweroff
 but also for kexec.
 .SH BOOT PARAMETERS
+The
+.B blogd
+evaluates the following kernel command line parameters:
+.TP
+.B blog\&.silent[=1|on|yes|true]
+If set, all output to the underlying character devices is suppressed.
+This is useful to prevent the console from being flooded with messages.
+.TP
+.B blog\&.coldboot[=1|on|yes|true]
+If set, explicitly enables the early coldstart scan for systemd password 
+requests (e.g. for LUKS decryption) during the initrd phase.
+.TP
+.B blog\&.timeout=<integer>
 On 
 .B s390x
 (64-bit IBM System/390) and
 .B z/Architecture
-the
-.B blogd
-knows currently one kernel command line parameter
-.BI blog\&.timeout= <integer>
-with
-.I <integer>
-the timeout for the
+this specifies the timeout for the
 .B MORE
-prompt on
+prompt on the
 .I 3215
 console.  If set to
 .I 0
 the boot process does not need manual support.
 .SH SIGNALS
 .B blogd
-knows a few signal to contol its behavior.
+knows a few signals to control its behavior.
 .TP
 .BR SIGQUIT ", " SIGINT ", and " SIGTERM
 will cause
 .B blogd
-tries to write out the ring buffer and to exit.
+to try to write out the ring buffer and to exit.
 .TP
 .B SIGIO
-says
+tells
 .B blogd
 that now it is able to write on
 .I @@BOOT_LOGFILE@@
@@ -82,13 +90,13 @@
 messages are written to that file.
 After a reboot the file
 .I @@BOOT_OLDLOGFILE@@
-may exists where the former messages
+may exist where the former messages
 can be found including the messages at
 shutdown upto the point where the file
 systems become unmounted.
 .TP
 .B SIGSYS
-says
+tells
 .B blogd
 that it should stop writing to disk but
 continue to repeat messages to the old
@@ -134,6 +142,7 @@
 .SH COPYRIGHT
 2000,2015 Werner Fink,
 2000 SuSE GmbH Nuernberg, Germany,
-2015 SuSE Linux GmbH.
+2015 SuSE Linux GmbH,
+2026 SUSE Software Solutions Germany GmbH.
 .SH AUTHOR
 Werner Fink <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/blogd.c new/showconsole-2.45/blogd.c
--- old/showconsole-2.42/blogd.c        2026-06-22 15:46:21.000000000 +0200
+++ new/showconsole-2.45/blogd.c        2026-07-02 11:25:23.000000000 +0200
@@ -44,6 +44,8 @@
 extern volatile sig_atomic_t signaled;
 extern volatile sig_atomic_t asking;
 extern int final;
+extern int console_silent;
+extern int coldboot;
 
 static int show_status;
 static const char console[] = "/dev/console";
@@ -249,7 +251,7 @@
 int main(int argc, char *argv[])
 {
     char ptsname[NAME_MAX+1];
-    const char *tty, *stt;
+    const char *tty, *stt, *val;
     volatile char *arg0;
     struct console *c;
     struct termios o;
@@ -284,6 +286,18 @@
     argv += optind;
     argc -= optind;
 
+    parse_cmdline();   /* Parse the kernel command line for blog.<key>(=<val>) 
*/
+    val = value_cmdline("silent");
+    if (val) {
+        if (strcmp(val, "1") == 0 || strcasecmp(val, "on") == 0 || 
strcasecmp(val, "yes") == 0 || strcasecmp(val, "true"))
+            console_silent = 1;
+    }
+    val = value_cmdline("coldboot");
+    if (val) {
+        if (strcmp(val, "1") == 0 || strcasecmp(val, "on") == 0 || 
strcasecmp(val, "yes") == 0 || strcasecmp(val, "true"))
+            coldboot = 1;
+    }
+
     myname = program_invocation_short_name;
     getconsoles(1);
 
@@ -348,10 +362,7 @@
        }
 #if defined(__s390__) || defined(__s390x__)
        if ((c->flags & CON_3215) && final == 0) {
-           char *timeout;
-
-           parse_cmdline();    /* Parse the kernel command line for 
blog.<key>=<val> */
-           timeout = value_cmdline("timeout");
+           char *timeout = value_cmdline("timeout");
 
            if (timeout && isinteger(timeout)) {
                int vmcp = openvmcp();
@@ -369,11 +380,12 @@
                usleep(1000);
            }
 
-           free_cmdline();
        }
 #endif
     }
 
+    free_cmdline();    /* free cmd list after last usage of value_cmdline() */
+
     if (openpty(&ptm, &pts, ptsname, &o, &w) < 0)
        error("can not open pty/tty pair");
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/libconsole/coldstart.c 
new/showconsole-2.45/libconsole/coldstart.c
--- old/showconsole-2.42/libconsole/coldstart.c 2026-06-22 15:46:21.000000000 
+0200
+++ new/showconsole-2.45/libconsole/coldstart.c 2026-07-02 11:25:23.000000000 
+0200
@@ -105,10 +105,11 @@
     in_ask_section = 0;
 
     /* Allocate memory for our custom wrapper structure */
-    if (posix_memalign((void**)&req, sizeof(void*), alignof(struct request)) 
!= 0 || !req) {
+    if (posix_memalign((void**)&req, sizeof(void*), ALIGNED_SIZEOF(struct 
request)) != 0 || !req) {
        fclose(fp);
        error("memory allocation: %m");
     }
+    memset(req, 0, sizeof(struct request));
 
     while (fgets(line, sizeof(line), fp)) {
        char *eq, *key, *value;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/libconsole/console.c 
new/showconsole-2.45/libconsole/console.c
--- old/showconsole-2.42/libconsole/console.c   2026-06-22 15:46:21.000000000 
+0200
+++ new/showconsole-2.45/libconsole/console.c   2026-07-02 11:25:23.000000000 
+0200
@@ -110,6 +110,16 @@
 int final = 0;
 
 /*
+ * Should the console be silent?
+ */
+int console_silent = 0;
+
+/*
+ * Should the cold start scan for asking password be active?
+ */
+int coldboot = 0;
+
+/*
  * Avoid trouble if linked with e.g. blogger as there
  * is no external arg0 but linker on ppc64 and s390/x
  * seems to expect this.
@@ -514,7 +524,8 @@
 
 static void ask_for_password(void) attribute((noinline));
 
-static int coldstart_active = 0;
+static int coldstart_active;
+static int coldstart_triggered;
 static char *coldstart_socket_path = NULL;
 
 static void coldstart_next(void)
@@ -603,9 +614,10 @@
 
     (void)mlockall(MCL_FUTURE);
 
-    /* Phase 2: Start processing coldstart requests via epoll */
-    coldstart_active = 1;
-    coldstart_next();
+    if (coldboot) {
+       /* Phase 2: Start processing coldstart requests via epoll */
+       coldstart_active = 1;
+    }
 }
 
 /*
@@ -778,6 +790,12 @@
        start_logging();
     }
 
+    /* Launch coldstart password queries strictly after setup, right before 
epoll_wait */
+    if (coldstart_active && !coldstart_triggered) {
+       coldstart_triggered = 1;
+       coldstart_next();
+    }
+
     (void)more_input(5000, 0);
 
     if (nsigsys) {  /* Stop writing logs to disk, only repeat messages */
@@ -854,8 +872,8 @@
 
     if (password) {
        memset(password, 0, MAX_PASSLEN);
-        munmap(password, MAX_PASSLEN+sizeof(int32_t));
-        password = NULL;
+       munmap(password, MAX_PASSLEN+sizeof(int32_t));
+       password = NULL;
     }
 
     if (pwprompt) {
@@ -930,10 +948,10 @@
     if (!cons)
        error("missing console pointer");
 
-    if (posix_memalign((void**)&newc, sizeof(void*), alignof(struct 
console)+strlen(name)+1) != 0 || !newc)
+    if (posix_memalign((void**)&newc, sizeof(void*), ALIGNED_SIZEOF(struct 
console)+strlen(name)+1) != 0 || !newc)
        error("memory allocation");
 
-    newc->tty = ((char*)newc)+alignof(struct console);
+    newc->tty = ((char*)newc)+ALIGNED_SIZEOF(struct console);
     strcpy(newc->tty, name);
     newc->flags = cflags;
     newc->dev = dev;
@@ -1145,7 +1163,10 @@
                size_t ret;
                if (c->fd < 0)
                    continue;
-               ret = c->out(c->fd, thead, len, c->max_canon);
+               if (console_silent)
+                   ret = len;
+               else
+                   ret = c->out(c->fd, thead, len, c->max_canon);
                if (ret < 1)
                    goto flush;
                len = ret;                              /* First make write out 
all but Second? */
@@ -1169,7 +1190,10 @@
            size_t ret;
            if (c->fd < 0)
                continue;
-           ret = c->out(c->fd, trans, cnt, c->max_canon);
+           if (console_silent)
+               ret = cnt;
+           else
+               ret = c->out(c->fd, trans, cnt, c->max_canon);
            if (ret < 1) {
                if (cnt <= (size_t)(tend - ttail)) {
                    memcpy(ttail, trans, cnt);
@@ -1289,13 +1313,12 @@
                    free(coldstart_socket_path);
                    coldstart_socket_path = NULL;
                }
-           } else {
-               if (pwd_client_fd >= 0) {
-                   (void)do_answer_password(pwd_client_fd);
-                   epoll_delete(pwd_client_fd);
-                   close(pwd_client_fd);
-                   pwd_client_fd = -1;
-               }
+           }
+           if (pwd_client_fd >= 0) {
+               (void)do_answer_password(pwd_client_fd);
+               epoll_delete(pwd_client_fd);
+               close(pwd_client_fd);
+               pwd_client_fd = -1;
            }
 
            /* 2. Enable Kernel-Logging to the console Konsole */
@@ -1336,6 +1359,15 @@
 
     /* Remember the Socket for later and start the background process */
     pwd_client_fd = fd;
+
+    if (asking) {
+#ifdef DEBUG
+       warn("%s: Agent synchronized with already running prompt.", 
__FUNCTION__);
+#endif
+       epoll_addread(fd, &socket_handler);
+       return;
+    }
+
     ask_for_password();
 }
 
@@ -1422,12 +1454,17 @@
        warn("Got password request for prompt >%s<", arg);
 #endif
        if (asking) {
-           /*
-            * This should not happen as Systemd serialize password requests
-            */
-           const char *nck = ANSWER_NCK;
-           safeout(fd, nck, strlen(nck)+1, SSIZE_MAX);
-           warn("Got further password request with prompt >%s<", arg);
+           if (pwd_client_fd >= 0 && pwd_client_fd != fd) {
+               epoll_delete(pwd_client_fd);
+               close(pwd_client_fd);
+           }
+           pwd_client_fd = fd;
+
+           if (pwprompt)
+               free(pwprompt);
+           pwprompt = strdup(arg);
+
+           epoll_answer_once(fd, &epoll_socket_answer);
            goto job;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/libconsole/epoll.c 
new/showconsole-2.45/libconsole/epoll.c
--- old/showconsole-2.42/libconsole/epoll.c     2026-06-22 15:46:21.000000000 
+0200
+++ new/showconsole-2.45/libconsole/epoll.c     2026-07-02 11:25:23.000000000 
+0200
@@ -1,7 +1,8 @@
 /*
  * epoll.c
  *
- * Copyright 2000,2015 Werner Fink, 2015 SuSE Linux GmbH.
+ * Copyright 2000,2015,2026 Werner Fink, 2015 SuSE Linux GmbH.
+ * Copyright 2026 SUSE Software Solutions Germany GmbH
  *
  * This source is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -12,6 +13,8 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/epoll.h>
+#include <unistd.h>
+#include <errno.h>
 #include "listing.h"
 #include "libconsole.h"
 
@@ -37,7 +40,7 @@
 
     ev.events = flags;
 
-    if (posix_memalign((void**)&ep, sizeof(void*), alignof(struct epolls)) != 
0 || !ep)
+    if (posix_memalign((void**)&ep, sizeof(void*), ALIGNED_SIZEOF(struct 
epolls)) != 0 || !ep)
        error("memory allocation");
 
     ep->handle = (typeof(ep->handle))fptr;
@@ -71,31 +74,42 @@
 void epoll_answer_once(int fd, void *fptr)
 {
     struct epoll_event ev = {};
-    struct epolls *ep;
-    list_t *head;
+    struct epolls *ep, *target = NULL;
     int ret;
 
-    ev.events = EPOLLOUT|EPOLLONESHOT;
+    list_for_each_entry(ep, &lpolls, watch) {
+       if (ep->fd == fd) {
+           target = ep;
+           break;
+       }
+    }
 
-    if (posix_memalign((void**)&ep, sizeof(void*), alignof(struct epolls)) != 
0 || !ep)
-       error("memory allocation");
+    if (!target) {
+       list_t *head;
 
-    ep->handle = (typeof(ep->handle))fptr;
-    ep->fd = fd;
+       if (posix_memalign((void**)&ep, sizeof(void*), ALIGNED_SIZEOF(struct 
epolls)) != 0 || !ep)
+           error("memory allocation");
 
-    ev.data.ptr = (void*)ep;
+       ep->fd = fd;
+    
+       if (!epolls) {
+           head = &lpolls;
+           epolls = (struct epolls*)head;
+       } else
+           head = &epolls->watch;
+       insert(&ep->watch, head);
+       evmax++;
 
-    if (!epolls) {
-       head = &lpolls;
-       epolls = (struct epolls*)head;
-    } else
-       head = &epolls->watch;
-    insert(&ep->watch, head);
-    evmax++;
+       target = ep;
+    }
+
+    ev.events = EPOLLOUT|EPOLLONESHOT;
+    target->handle = (typeof(target->handle))fptr;
+    ev.data.ptr = (void*)target;
 
     ret = epoll_ctl(epfd, EPOLL_CTL_MOD, fd, &ev);
     if (ret < 0)
-       error("can not add %d file descriptor on epoll file descriptor", fd);
+       error("can not modify %d file descriptor on epoll file descriptor", fd);
 }
 
 void epoll_reenable(int fd)
@@ -115,7 +129,6 @@
            break;
        }
     }
-
 }
 
 void epoll_delete(int fd)
@@ -127,14 +140,15 @@
        if (ep->fd == fd) {
            delete(&ep->watch);
            free(ep);
-           break;
+           evmax--;
        }
     }
-    evmax--;
 
     ret = epoll_ctl(epfd, EPOLL_CTL_DEL, fd, NULL);
-    if (ret < 0)
-       error("can not delete %d file descriptor on epoll file descriptor", fd);
+    if (ret < 0) {
+       if (errno != ENOENT)
+           error("can not delete %d file descriptor on epoll file descriptor", 
fd);
+    }
 }
 
 void (*epoll_handle(void *ptr, int *fd))(int)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/libconsole/libconsole.h 
new/showconsole-2.45/libconsole/libconsole.h
--- old/showconsole-2.42/libconsole/libconsole.h        2026-06-22 
15:46:21.000000000 +0200
+++ new/showconsole-2.45/libconsole/libconsole.h        2026-07-02 
11:25:23.000000000 +0200
@@ -49,7 +49,7 @@
 #endif
 #include "listing.h"
 
-#define alignof(type)          ((sizeof(type)+(sizeof(void*)-1)) & 
~(sizeof(void*)-1))
+#define ALIGNED_SIZEOF(type)           ((sizeof(type)+(sizeof(void*)-1)) & 
~(sizeof(void*)-1))
 #define strsize(string)                ((strlen(string)+1)*sizeof(char))
 
 #if defined __USE_ISOC99
@@ -124,6 +124,8 @@
 
 extern sigset_t omask;
 extern int final;
+extern int console_silent;
+extern int coldboot;
 extern int epfd;
 extern int evmax;
 extern volatile sig_atomic_t signaled;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/libconsole/proc.c 
new/showconsole-2.45/libconsole/proc.c
--- old/showconsole-2.42/libconsole/proc.c      2026-06-22 15:46:21.000000000 
+0200
+++ new/showconsole-2.45/libconsole/proc.c      2026-07-02 11:25:23.000000000 
+0200
@@ -108,23 +108,29 @@
            const char *prefix = "blog.";
            const size_t plen = strlen(prefix);
 
-           if (strncmp(token, prefix , plen) == 0) {
+           if (strncmp(token, prefix, plen) == 0) {
                char *kv = token + plen;
                char *eq = strchr(kv, '=');
+               char *key, *val;
 
                if (eq) {
-                   parameter_t *pm;
-                   int exists = 0;
-
                    *eq = '\0';
-                   char *key = kv;
-                   char *val = eq + 1;
+                   key = kv;
+                   val = eq + 1;
 
-                    if (*val == '\0' || *val == ' ') {
-                        *eq = '='; /* restore token for strtok_r */
-                        token = strtok_r(NULL, " \n", &saveptr);
-                        continue;
-                    }
+                   if (*val == '\0' || *val == ' ') {
+                       *eq = '='; /* restore token for strtok_r */
+                       token = strtok_r(NULL, " \n", &saveptr);
+                       continue;
+                   }
+               } else {
+                   key = kv;
+                   val = "1"; /* default to true */
+               }
+
+               {
+                   parameter_t *pm;
+                   int exists = 0;
 
                    list_for_each_entry(pm, &lparameter, handle) {
                        if (strcmp(pm->key, key) == 0) {
@@ -134,9 +140,9 @@
                        }
                    }
                    if (!exists) {
-                       if (posix_memalign((void**)&pm, sizeof(void*), 
alignof(parameter_t)+strlen(key)+1) != 0 || !pm)
+                       if (posix_memalign((void**)&pm, sizeof(void*), 
ALIGNED_SIZEOF(parameter_t)+strlen(key)+1) != 0 || !pm)
                            error("memory allocation");
-                       pm->key = ((char*)pm)+alignof(parameter_t);
+                       pm->key = ((char*)pm)+ALIGNED_SIZEOF(parameter_t);
                        strcpy(pm->key, key);
                        pm->val = strdup(val);
 
@@ -147,7 +153,8 @@
                            head = &(parameter)->handle;
                        insert(&pm->handle, head);
                    }
-                   *eq = '='; /* restore token for strtok_r */
+                   if (eq)
+                       *eq = '='; /* restore token for strtok_r */
                }
            }
            token = strtok_r(NULL, " \n", &saveptr);
@@ -160,8 +167,8 @@
     parameter_t *pm;
     list_for_each_entry(pm, &lparameter, handle) {
        if (strcmp(pm->key, key) == 0) {
-            return pm->val;
-        }
+           return pm->val;
+       }
     }
     return (char*)0;
 }
@@ -169,9 +176,9 @@
 void free_cmdline(void) {
     parameter_t *pm, *n;
     list_for_each_entry_safe(pm, n, &lparameter, handle) {
-        free(pm->val);
-        delete(&pm->handle);
-        free(pm);
+       free(pm->val);
+       delete(&pm->handle);
+       free(pm);
     }
 }
 #ifdef DEBUG_PROC
@@ -185,15 +192,15 @@
 
     /* Check if no digits were found at all */
     if (str == endptr)
-        ret = 0;
+       ret = 0;
 
     /* Check for overflow or underflow */
     if (errno == ERANGE)
-        ret = 0;
+       ret = 0;
 
     /* Check for trailing non-numeric characters (e.g., "123abc") */
     if (*endptr != '\0')
-        ret = 0;
+       ret = 0;
 
     errno = errs;
     return ret;
@@ -204,10 +211,10 @@
     char *key;
     parse_cmdline();
     list_for_each_entry(pm, &lparameter, handle) {
-        printf("key %s = val %s\n", pm->key, pm->val);
+       printf("key %s = val %s\n", pm->key, pm->val);
     }
     key = value_cmdline("timeout");
     if (key)
-        printf("%s %d\n", key, _isinteger(key));
+       printf("%s %d\n", key, _isinteger(key));
 }
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/module-setup.sh 
new/showconsole-2.45/module-setup.sh
--- old/showconsole-2.42/module-setup.sh        2026-06-22 15:46:21.000000000 
+0200
+++ new/showconsole-2.45/module-setup.sh        2026-07-02 11:25:23.000000000 
+0200
@@ -12,19 +12,23 @@
     inst_multiple blogd blogctl
     inst_multiple -o \
        $systemdsystemunitdir/blog.service \
+       $systemdsystemunitdir/plymouth-start.service \
        $systemdsystemunitdir/blog-halt.service \
        $systemdsystemunitdir/blog-kexec.service \
        $systemdsystemunitdir/blog-poweroff.service \
        $systemdsystemunitdir/blog-reboot.service \
        $systemdsystemunitdir/blog-quit.service \
+       $systemdsystemunitdir/plymouth-quit.service \
+       $systemdsystemunitdir/plymouth-quit-wait.service \
        $systemdsystemunitdir/blog-store-messages.service \
+       $systemdsystemunitdir/plymouth-read-write.service \
        $systemdsystemunitdir/blog-switch-initramfs.service \
        $systemdsystemunitdir/blog-switch-root.service \
        $systemdsystemunitdir/blog-umount.service \
        $systemdsystemunitdir/systemd-ask-password-blog.path \
        $systemdsystemunitdir/systemd-ask-password-blog.service \
        $systemdsystemunitdir/systemd-vconsole-setup.service
-    for t in sysinit rescue shutdown emergency initrd-switch-root halt kexec 
poweroff reboot
+    for t in sysinit rescue emergency initrd-switch-root halt kexec poweroff 
reboot
     do
        test  -d "${initdir}${systemdsystemunitdir}/${t}.target.wants" && 
continue
        mkdir -p "${initdir}${systemdsystemunitdir}/${t}.target.wants"
@@ -34,7 +38,7 @@
        ln_r "${systemdsystemunitdir}/${s}" 
"${systemdsystemunitdir}/rescue.target.wants/${s}"
        ln_r "${systemdsystemunitdir}/${s}" 
"${systemdsystemunitdir}/emergency.target.wants/${s}"
     done
-    for s in blog.service blog-store-messages.service
+    for s in blog.service plymouth-start.service systemd-ask-password-blog.path
     do
        ln_r "${systemdsystemunitdir}/${s}" 
"${systemdsystemunitdir}/sysinit.target.wants/${s}"
     done
@@ -48,12 +52,12 @@
        test  -d "${initdir}${systemdsystemunitdir}/${t}.wants" && continue
        mkdir -p "${initdir}${systemdsystemunitdir}/${t}.wants"
     done
-    for s in blog.service blog-switch-root.service
-    do
-       ln_r "${systemdsystemunitdir}/${s}" 
"${systemdsystemunitdir}/initrd-switch-root.target.wants/${s}"
-    done
     for s in systemd-vconsole-setup.service
     do
        ln_r "${systemdsystemunitdir}/${s}" 
"${systemdsystemunitdir}/systemd-ask-password-blog.service.wants/${s}"
     done
+    for s in blog.service plymouth-start.service blog-switch-root.service
+    do
+       ln_r "${systemdsystemunitdir}/${s}" 
"${systemdsystemunitdir}/initrd-switch-root.target.wants/${s}"
+    done
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/plymouth-quit-wait.service 
new/showconsole-2.45/plymouth-quit-wait.service
--- old/showconsole-2.42/plymouth-quit-wait.service     1970-01-01 
01:00:00.000000000 +0100
+++ new/showconsole-2.45/plymouth-quit-wait.service     2026-07-02 
11:25:23.000000000 +0200
@@ -0,0 +1,11 @@
+[Unit]
+Description=Plymouth Quit Wait Compatibility Shim
+DefaultDependencies=no
+After=rc-local.service blog.service systemd-user-sessions.service
+Requires=blog-quit.service
+After=blog-quit.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/true
+RemainAfterExit=yes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/plymouth-quit.service 
new/showconsole-2.45/plymouth-quit.service
--- old/showconsole-2.42/plymouth-quit.service  1970-01-01 01:00:00.000000000 
+0100
+++ new/showconsole-2.45/plymouth-quit.service  2026-07-02 11:25:23.000000000 
+0200
@@ -0,0 +1,11 @@
+[Unit]
+Description=Plymouth Quit Compatibility Shim
+DefaultDependencies=no
+After=rc-local.service blog.service systemd-user-sessions.service
+Requires=blog-quit.service
+After=blog-quit.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/true
+RemainAfterExit=yes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/plymouth-read-write.service 
new/showconsole-2.45/plymouth-read-write.service
--- old/showconsole-2.42/plymouth-read-write.service    1970-01-01 
01:00:00.000000000 +0100
+++ new/showconsole-2.45/plymouth-read-write.service    2026-07-02 
11:25:23.000000000 +0200
@@ -0,0 +1,13 @@
+[Unit]
+Description=Plymouth Write Out Compatibility Shim
+DefaultDependencies=no
+After=local-fs.target
+Before=sysinit.target
+ConditionPathExists=!/etc/initrd-release
+Requires=blog-store-messages.service
+After=blog-store-messages.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/true
+RemainAfterExit=yes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/plymouth-start.service 
new/showconsole-2.45/plymouth-start.service
--- old/showconsole-2.42/plymouth-start.service 1970-01-01 01:00:00.000000000 
+0100
+++ new/showconsole-2.45/plymouth-start.service 2026-07-02 11:25:23.000000000 
+0200
@@ -0,0 +1,13 @@
+[Unit]
+Description=Plymouth Boot Screen Compatibility Shim
+DefaultDependencies=no
+ConditionKernelCommandLine=!plymouth.enable=0
+ConditionVirtualization=!container
+Requires=blog.service
+After=blog.service
+IgnoreOnIsolate=true
+
+[Service]
+Type=oneshot
+ExecStart=/bin/true
+RemainAfterExit=yes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/systemd-ask-password-blog.path 
new/showconsole-2.45/systemd-ask-password-blog.path
--- old/showconsole-2.42/systemd-ask-password-blog.path 2026-06-22 
15:46:21.000000000 +0200
+++ new/showconsole-2.45/systemd-ask-password-blog.path 2026-07-02 
11:25:23.000000000 +0200
@@ -8,14 +8,9 @@
 Before=emergency.service
 Conflicts=shutdown.target
 Before=shutdown.target
-ConditionKernelCommandLine=!blog.enable=0
-ConditionKernelCommandLine=!plymouth.enable=0
 ConditionPathExists=/run/blogd.pid
 ConditionVirtualization=!container
 
 [Path]
 DirectoryNotEmpty=/run/systemd/ask-password
 MakeDirectory=yes
-
-[Install]
-Alias=systemd-ask-password-plymouth.path
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/showconsole-2.42/systemd-ask-password-blog.service 
new/showconsole-2.45/systemd-ask-password-blog.service
--- old/showconsole-2.42/systemd-ask-password-blog.service      2026-06-22 
15:46:21.000000000 +0200
+++ new/showconsole-2.45/systemd-ask-password-blog.service      2026-07-02 
11:25:23.000000000 +0200
@@ -7,14 +7,9 @@
 Before=emergency.service
 Conflicts=shutdown.target initrd-switch-root.target
 Before=shutdown.target initrd-switch-root.target
-ConditionKernelCommandLine=!blog.enable=0
-ConditionKernelCommandLine=!plymouth.enable=0
 ConditionVirtualization=!container
 ConditionPathExists=/run/blogd.pid
 
 [Service]
 ExecStart=/usr/bin/systemd-tty-ask-password-agent --watch --plymouth
 SystemCallArchitectures=native
-
-[Install]
-Alias=systemd-ask-password-plymouth.service

Reply via email to