summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2009-02-12 19:32:52 +0000
committered <ed@FreeBSD.org>2009-02-12 19:32:52 +0000
commitf732706463fed6ee50046be45509c5b023e9a0e8 (patch)
treead48fd8d4d81bd558899c9dc222aca897f67c38d /lib
parent262e123f42bd9a67863895a67632ef5eff7d883c (diff)
downloadFreeBSD-src-f732706463fed6ee50046be45509c5b023e9a0e8.zip
FreeBSD-src-f732706463fed6ee50046be45509c5b023e9a0e8.tar.gz
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.
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/gen/getttyent.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/lib/libc/gen/getttyent.c b/lib/libc/gen/getttyent.c
index efc4c9b..9152626 100644
--- a/lib/libc/gen/getttyent.c
+++ b/lib/libc/gen/getttyent.c
@@ -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
OpenPOWER on IntegriCloud