]> granicus.if.org Git - sudo/commitdiff
now deals with timeout <= 0
authorTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 8 Jul 1996 13:55:43 +0000 (13:55 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 8 Jul 1996 13:55:43 +0000 (13:55 +0000)
tgetpass.c

index 1f5cb99b72f9a8efb85b176f4e7fb5783b9dab11..65bdb2af1bb951a34c47ec227b005e0c621cfd29 100644 (file)
@@ -165,29 +165,41 @@ char * tgetpass(prompt, timeout)
        (void) rewind(output);
     }
 
-    /* setup for select(2) */
-    FD_ZERO(&readfds);
-    FD_SET(fileno(input), &readfds);
+    /*
+     * Timeout of <= 0 means no timeout
+     */
+    if (timeout > 0) {
+       /* setup for select(2) */
+       FD_ZERO(&readfds);
+       FD_SET(fileno(input), &readfds);
 
-    /* set timeout for select */
-    tv.tv_sec = timeout;
-    tv.tv_usec = 0;
+       /* set timeout for select */
+       tv.tv_sec = timeout;
+       tv.tv_usec = 0;
 
-    /* how many file descriptors may we have? */
+       /* how many file descriptors may we have? */
 #ifdef HAVE_SYSCONF
-    n = sysconf(_SC_OPEN_MAX);
+       n = sysconf(_SC_OPEN_MAX);
 #else
-    n = getdtablesize();
+       n = getdtablesize();
 #endif /* HAVE_SYSCONF */
 
-    /*
-     * get password or return empty string if nothing to read by timeout
-     */
-    buf[0] = '\0';
-    if (select(n, &readfds, 0, 0, &tv) > 0 && fgets(buf, sizeof(buf), input)) {
-       n = strlen(buf);
-       if (buf[n - 1] == '\n')
-           buf[n - 1] = '\0';
+       /*
+        * get password or return empty string if nothing to read by timeout
+        */
+       buf[0] = '\0';
+       if (select(n, &readfds, 0, 0, &tv) > 0 && fgets(buf, sizeof(buf), input)) {
+           n = strlen(buf);
+           if (buf[n - 1] == '\n')
+               buf[n - 1] = '\0';
+       }
+    } else {
+       buf[0] = '\0';
+       if (fgets(buf, sizeof(buf), input)) {
+           n = strlen(buf);
+           if (buf[n - 1] == '\n')
+               buf[n - 1] = '\0';
+       }
     }
 
      /* turn on echo */