From: Diego Nieto Cid <[email protected]>

The daemon-wait argument sets the timeout used
to wait for the daemon to respond.

It is desirable to make this parameter configurable
to cope with slower machines which otherwise get a
broken Hurd console (due to a missing console-client
process).
---
 console-client/console.c | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/console-client/console.c b/console-client/console.c
index 3b316115..0b85d127 100644
--- a/console-client/console.c
+++ b/console-client/console.c
@@ -66,6 +66,7 @@ static char *console_node;
 
 /* If set, the client will daemonize.  */
 static int daemonize;
+static int daemon_wait = 20;
 
 /* Callbacks for input source drivers.  */
 
@@ -534,6 +535,7 @@ cons_vcons_set_mousecursor_status (vcons_t vcons, int 
status)
 
 
 #define DAEMONIZE_KEY 0x80 /* !isascii (DAEMONIZE_KEY), so no short option.  */
+#define DAEMON_WAIT_KEY 0x81 /* !isascii (DAEMON_WAIT_KEY), so no short 
option.  */
 
 /* Console-specific options.  */
 static const struct argp_option
@@ -545,6 +547,8 @@ options[] =
      "Set a translator on the node FILE (default: " DEFAULT_CONSOLE_NODE ")" },
 #if HAVE_DAEMON
     {"daemonize", DAEMONIZE_KEY, NULL, 0, "daemonize the console client"},
+    {"daemon-wait", DAEMON_WAIT_KEY, "SECS", 0,
+     "Seconds to wait for the daemon to be responsive (default 20)"},
 #endif
     {0}
   };
@@ -603,6 +607,25 @@ parse_opt (int key, char *arg, struct argp_state *state)
       daemonize = 1;
       break;
 
+    case DAEMON_WAIT_KEY:
+      {
+        char *endptr;
+        errno = 0;
+        long secs = strtol (arg, &endptr, 10);
+        if (arg == endptr || *endptr != 0)
+          {
+             argp_error (state, "deamon-wait must recive a numeric argument");
+             return EINVAL;
+          }
+        if (errno == ERANGE || secs > INT_MAX || secs < 0)
+          {
+             argp_error (state, "the number passed to deamon-wait is out of 
range");
+             return EINVAL;
+          }
+        daemon_wait = (int)secs;
+      }
+      break;
+
     case ARGP_KEY_SUCCESS:
       if (!devcount)
        {
@@ -698,9 +721,9 @@ main (int argc, char *argv[])
          /* The parent.  */
          int ret;
 
-         /* Wait for 20 seconds for the return value passed from the
+         /* Wait for `daemon_wait` seconds for the return value passed from the
             daemon process. .  */
-         if ((ret = daemon_retval_wait (20)) < 0)
+         if ((ret = daemon_retval_wait (daemon_wait)) < 0)
            error (1, errno,
                   "Could not receive return value from daemon process");
 
-- 
2.53.0


Reply via email to