Author: ed
Date: Thu Feb 12 19:32:52 2009
New Revision: 188536
URL: http://svn.freebsd.org/changeset/base/188536

Log:
  Properly invalidate highest pts number when calling setttyent().
  
  When calling setttyent() after calling endttyent(), pts_valid will never
  be set to 1, because the readdir()-loop will likely never vind a pts
  that has a higher number than before.
  
  Simplify the code by removing pts_valid. We'll just set maxpts to -1
  when we don't have a valid count yet.

Modified:
  head/lib/libc/gen/getttyent.c

Modified: head/lib/libc/gen/getttyent.c
==============================================================================
--- head/lib/libc/gen/getttyent.c       Thu Feb 12 19:21:48 2009        
(r188535)
+++ head/lib/libc/gen/getttyent.c       Thu Feb 12 19:32:52 2009        
(r188536)
@@ -43,9 +43,8 @@ __FBSDID("$FreeBSD$");
 
 static char zapchar;
 static FILE *tf;
-static int maxpts = 0;
+static int maxpts = -1;
 static int curpts = 0;
-static int pts_valid = 0;
 static size_t lbsize;
 static char *line;
 
@@ -84,7 +83,7 @@ getttyent()
                return (NULL);
        for (;;) {
                if (!fgets(p = line, lbsize, tf)) {
-                       if (pts_valid == 1 && curpts <= maxpts) {
+                       if (curpts <= maxpts) {
                                sprintf(devpts_name, "pts/%d", curpts++);
                                tty.ty_name = devpts_name;
                                tty.ty_getty = tty.ty_type = NULL;
@@ -234,12 +233,12 @@ setttyent()
        if (devpts_dir) {
                struct dirent *dp;
 
+               maxpts = -1;
                while ((dp = readdir(devpts_dir))) {
                        if (strcmp(dp->d_name, ".") != 0 &&
                            strcmp(dp->d_name, "..") != 0) {
                                if (atoi(dp->d_name) > maxpts) {
                                        maxpts = atoi(dp->d_name);
-                                       pts_valid = 1;
                                        curpts = 0;
                                }
                        }
@@ -259,7 +258,7 @@ endttyent()
 {
        int rval;
 
-       pts_valid = 0;
+       maxpts = -1;
        /*
          * NB: Don't free `line' because getttynam()
         * may still be referencing it
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to