| 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; | |
| } |