File plymouth-log-on-default.patch of Package plymouth

diff -Nura plymouth-0.9.5~git20210406.e554475/src/libply/ply-buffer.c plymouth-0.9.5~git20210406.e554475_new/src/libply/ply-buffer.c
--- plymouth-0.9.5~git20210406.e554475/src/libply/ply-buffer.c	2021-04-06 19:53:40.000000000 +0800
+++ plymouth-0.9.5~git20210406.e554475_new/src/libply/ply-buffer.c	2023-04-11 00:33:27.798240743 +0800
@@ -46,6 +46,10 @@
 #define PLY_BUFFER_MAX_BUFFER_CAPACITY (255 * 4096)
 #endif
 
+#ifndef PLY_BUFFER_MAX_LOG_BUFFER_CAPACITY
+#define PLY_BUFFER_MAX_LOG_BUFFER_CAPACITY (1024 * 4096)
+#endif
+
 struct _ply_buffer
 {
         char  *data;
@@ -67,6 +71,20 @@
         return true;
 }
 
+static bool
+ply_buffer_increase_log_capacity (ply_buffer_t *buffer)
+{
+        assert (buffer != NULL);
+
+        if ((buffer->capacity * 2) > PLY_BUFFER_MAX_LOG_BUFFER_CAPACITY)
+                return false;
+
+        buffer->capacity *= 2;
+
+        buffer->data = realloc (buffer->data, buffer->capacity);
+        return true;
+}
+
 void
 ply_buffer_remove_bytes (ply_buffer_t *buffer,
                          size_t        bytes_to_remove)
@@ -205,6 +223,38 @@
 }
 
 void
+ply_buffer_append_log_bytes (ply_buffer_t *buffer,
+                             const void   *bytes_in,
+                             size_t        length)
+{
+    assert (buffer != NULL);
+    assert (bytes_in != NULL);
+    assert (length != 0);
+
+    const uint8_t *bytes = bytes_in;
+
+    if (length > PLY_BUFFER_MAX_BUFFER_CAPACITY)
+    {
+        bytes += length - (PLY_BUFFER_MAX_BUFFER_CAPACITY - 1);
+        length = (PLY_BUFFER_MAX_BUFFER_CAPACITY - 1);
+    }
+
+    while ((buffer->size + length) >= buffer->capacity)
+    {
+        if (!ply_buffer_increase_log_capacity (buffer))
+            ply_buffer_remove_bytes (buffer, length);
+    }
+
+    assert (buffer->size + length < buffer->capacity);
+
+    memcpy (buffer->data + buffer->size,
+            bytes, length);
+
+    buffer->size += length;
+    buffer->data[buffer->size] = '\0';
+}
+
+void
 ply_buffer_append_from_fd (ply_buffer_t *buffer,
                            int           fd)
 {
diff -Nura plymouth-0.9.5~git20210406.e554475/src/libply/ply-buffer.h plymouth-0.9.5~git20210406.e554475_new/src/libply/ply-buffer.h
--- plymouth-0.9.5~git20210406.e554475/src/libply/ply-buffer.h	2021-04-06 19:53:40.000000000 +0800
+++ plymouth-0.9.5~git20210406.e554475_new/src/libply/ply-buffer.h	2023-04-11 00:34:56.334241797 +0800
@@ -35,6 +35,10 @@
                               const void   *bytes,
                               size_t        number_of_bytes);
 
+void ply_buffer_append_log_bytes (ply_buffer_t *buffer,
+                              const void   *bytes,
+                              size_t        length);
+
 void ply_buffer_append_from_fd (ply_buffer_t *buffer,
                                 int           fd);
 #define ply_buffer_append(buffer, format, args ...)                             \
diff -Nura plymouth-0.9.5~git20210406.e554475/src/main.c plymouth-0.9.5~git20210406.e554475_new/src/main.c
--- plymouth-0.9.5~git20210406.e554475/src/main.c	2021-04-06 19:53:40.000000000 +0800
+++ plymouth-0.9.5~git20210406.e554475_new/src/main.c	2023-04-11 19:59:56.033909167 +0800
@@ -1222,9 +1222,7 @@
                 ply_terminal_close (state->local_console_terminal);
         }
 
-        /* do not let any tty opened where we could write after deactivate */
-        if (ply_kernel_command_line_has_argument ("plymouth.debug"))
-                ply_logger_close_file (ply_logger_get_error_default ());
+	ply_logger_close_file (ply_logger_get_error_default ());
 
 }
 
@@ -1824,77 +1822,42 @@
         state->is_attached = false;
 }
 
-static void
-check_verbosity (state_t *state)
+static void initialize_debug (state_t *state)
 {
-        char *stream;
-
-        ply_trace ("checking if tracing should be enabled");
-
-        if (!debug_buffer_path)
-                debug_buffer_path = ply_kernel_command_line_get_key_value ("plymouth.debug=file:");
-
-        stream = ply_kernel_command_line_get_key_value ("plymouth.debug=stream:");
-        if (stream != NULL || debug_buffer_path != NULL ||
-            ply_kernel_command_line_has_argument ("plymouth.debug")) {
-                int fd;
-
-                ply_trace ("tracing should be enabled!");
-                if (!ply_is_tracing ())
-                        ply_toggle_tracing ();
-
-                if (debug_buffer == NULL)
-                        debug_buffer = ply_buffer_new ();
-
-                if (stream != NULL) {
-                        ply_trace ("streaming debug output to %s instead of screen", stream);
-                        fd = open (stream, O_RDWR | O_NOCTTY | O_CREAT, 0600);
-
-                        if (fd < 0)
-                                ply_trace ("could not stream output to %s: %m", stream);
-                        else
-                                ply_logger_set_output_fd (ply_logger_get_error_default (), fd);
-                        free (stream);
-                } else {
-                        const char *device;
-                        char *file;
-
-                        device = state->default_tty;
-
-                        ply_trace ("redirecting debug output to %s", device);
-
-                        if (strncmp (device, "/dev/", strlen ("/dev/")) == 0)
-                                file = strdup (device);
-                        else
-                                asprintf (&file, "/dev/%s", device);
+    if (!ply_is_tracing ())
+        ply_toggle_tracing ();
 
-                        fd = open (file, O_RDWR | O_APPEND);
+    if (debug_buffer == NULL)
+        debug_buffer = ply_buffer_new ();
 
-                        if (fd < 0)
-                                ply_trace ("could not redirected debug output to %s: %m", device);
-                        else
-                                ply_logger_set_output_fd (ply_logger_get_error_default (), fd);
-
-                        free (file);
-                }
-        } else {
-                ply_trace ("tracing shouldn't be enabled!");
-        }
-
-        if (debug_buffer != NULL) {
-                if (debug_buffer_path == NULL) {
-                        if (state->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN ||
-                            state->mode == PLY_BOOT_SPLASH_MODE_REBOOT)
-                                debug_buffer_path = strdup (PLYMOUTH_LOG_DIRECTORY "/plymouth-shutdown-debug.log");
-                        else
-                                debug_buffer_path = strdup (PLYMOUTH_LOG_DIRECTORY "/plymouth-debug.log");
-                }
+    char *stream = ply_kernel_command_line_get_key_value ("plymouth.debug=stream:");
+    if (stream != NULL)
+    {
+        int fd = open (stream, O_RDWR | O_NOCTTY | O_CREAT, 0600);
+        if (fd < 0)
+            ply_trace ("could not stream output to %s: %m", stream);
+        else
+            ply_logger_set_output_fd (ply_logger_get_error_default (), fd);
+        free (stream);
+    }
+
+    if (!debug_buffer_path)
+        debug_buffer_path = ply_kernel_command_line_get_key_value ("plymouth.debug=file:");
+
+    if (debug_buffer_path == NULL)
+    {
+        if (state->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN || state->mode == PLY_BOOT_SPLASH_MODE_REBOOT)
+            debug_buffer_path = strdup (PLYMOUTH_LOG_DIRECTORY "/plymouth-shutdown-debug.log");
+        else
+            debug_buffer_path = strdup (PLYMOUTH_LOG_DIRECTORY "/plymouth-debug.log");
+    }
 
-                ply_logger_add_filter (ply_logger_get_error_default (),
-                                       (ply_logger_filter_handler_t)
-                                       on_error_message,
-                                       debug_buffer);
-        }
+    if (debug_buffer != NULL)
+    {
+          ply_logger_add_filter (ply_logger_get_error_default (),
+                                 (ply_logger_filter_handler_t) on_error_message,
+                                 debug_buffer);
+    }
 }
 
 static void
@@ -1978,7 +1941,7 @@
                 }
         }
 
-        check_verbosity (state);
+	initialize_debug (state);
         check_logging (state);
 
         ply_trace ("source built on %s", __DATE__);
@@ -2004,7 +1967,7 @@
                   const void   *bytes,
                   size_t        number_of_bytes)
 {
-        ply_buffer_append_bytes (debug_buffer, bytes, number_of_bytes);
+	ply_buffer_append_log_bytes (debug_buffer, bytes, number_of_bytes);
 }
 
 static void
@@ -2127,7 +2090,7 @@
         bool should_help = false;
         bool no_boot_log = false;
         bool no_daemon = false;
-        bool debug = false;
+        bool debug = true;
         bool attach_to_session;
         ply_daemon_handle_t *daemon_handle = NULL;
         char *mode_string = NULL;
openSUSE Build Service is sponsored by