Introduction
Introduction Statistics Contact Development Disclaimer Help
tfactotum: update for new nbrecvul return value - plan9port - [fork] Plan 9 fro…
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit e75dbb6af8fbea53c62efb7176ed2d25a47557c9
parent 2c3c82126b2e59d7951596adb863514eff45cf29
Author: Russ Cox <[email protected]>
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(-)
---
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;
}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.