LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File Add-bootsplash-handling-for-password-dialogs.patch of Package systemd (Project Base:System)

From: Stefan Seyfried <seife+obs@b1-systems.com>
Date: Thu, 16 Dec 2010 11:30:17 +0100
Subject: Add bootsplash handling for password dialogs

openSUSE uses bootsplash.org, so add a crude handling for setting the
splash screen to verbose when a password is asked...
---
 src/shared/ask-password-api.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c
index 4557155..3750f64 100644
--- a/src/shared/ask-password-api.c
+++ b/src/shared/ask-password-api.c
@@ -63,6 +63,9 @@ int ask_password_tty(
         bool reset_tty = false;
         bool silent_mode = false;
         bool dirty = false;
+        bool splash_silent = false;
+        FILE *procsplash = NULL;
+        char *line = NULL;
         enum {
                 POLL_TTY,
                 POLL_INOTIFY
@@ -106,6 +109,19 @@ int ask_password_tty(
                 }
 
                 reset_tty = true;
+                procsplash = fopen("/proc/splash", "r+");
+                if (procsplash) {
+                        getline(&line, &p, procsplash);
+                        p = 0; /* reset, just to make sure */
+                        if (line &&
+                            (strstr(line, "on\n") == line + strlen(line) - 3) &&
+                            (strstr(line, "silent") != NULL)) {
+                                splash_silent = true;
+                                rewind(procsplash);
+                                fprintf(procsplash, "verbose\n");
+                                fflush(procsplash);
+                        }
+                }
         }
 
         zero(pollfd);
@@ -239,6 +255,12 @@ finish:
                 close_nointr_nofail(ttyfd);
         }
 
+        if (splash_silent) { /* only set if procsplash != NULL */
+                rewind(procsplash);
+                fprintf(procsplash, "silent\n");
+                fclose(procsplash);
+        }
+
         return r;
 }