tfactotum: update for new nbrecvul return value - plan9port - [fork] Plan 9 from user space
(HTM) git clone git://src.adamsgaard.dk/plan9port
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit e75dbb6af8fbea53c62efb7176ed2d25a47557c9
(DIR) parent 2c3c82126b2e59d7951596adb863514eff45cf29
(HTM) Author: Russ Cox <rsc@swtch.com>
Date: Wed, 15 Jan 2020 10:48:20 -0500
factotum: update for new nbrecvul return value
Unclear whether the old semantics were the right ones,
but at least this preserves what they've been for the past
however many years.
Diffstat:
M src/cmd/auth/factotum/confirm.c | 32 +++++++++++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
---
(DIR) diff --git a/src/cmd/auth/factotum/confirm.c b/src/cmd/auth/factotum/confirm.c
t@@ -128,17 +128,33 @@ needkeywrite(char *s)
int
needkey(Conv *c, Attr *a)
{
+ ulong u;
+
if(c == nil || *needkeyinuse == 0)
return -1;
lbappend(&needkeybuf, "needkey tag=%lud %A", c->tag, a);
flog("needkey %A", a);
- return nbrecvul(c->keywait);
+
+ // Note: This code used to "return nbrecvul(c->keywait)."
+ // In Jan 2020 we changed nbrecvul to match Plan 9 and
+ // the man page and return 0 on "no data available" instead
+ // of -1. This new code with an explicit nbrecv preserves the
+ // code's old semantics, distinguishing a sent 0 from "no data".
+ // That said, this code seems to return -1 unconditionally:
+ // the c->keywait channel is unbuffered, and the only sending
+ // to it is done with an nbsendul, which won't block waiting for
+ // a receiver. So there is no sender for nbrecv to find here.
+ if(nbrecv(c->keywait, &u) < 0)
+ return -1;
+ return u;
}
int
badkey(Conv *c, Key *k, char *msg, Attr *a)
{
+ ulong u;
+
if(c == nil || *needkeyinuse == 0)
return -1;
t@@ -146,5 +162,17 @@ badkey(Conv *c, Key *k, char *msg, Attr *a)
c->tag, k->attr, k->privattr, msg, a);
flog("badkey %A / %N / %s / %A",
k->attr, k->privattr, msg, a);
- return nbrecvul(c->keywait);
+
+ // Note: This code used to "return nbrecvul(c->keywait)."
+ // In Jan 2020 we changed nbrecvul to match Plan 9 and
+ // the man page and return 0 on "no data available" instead
+ // of -1. This new code with an explicit nbrecv preserves the
+ // code's old semantics, distinguishing a sent 0 from "no data".
+ // That said, this code seems to return -1 unconditionally:
+ // the c->keywait channel is unbuffered, and the only sending
+ // to it is done with an nbsendul, which won't block waiting for
+ // a receiver. So there is no sender for nbrecv to find here.
+ if(nbrecv(c->keywait, &u) < 0)
+ return -1;
+ return u;
}