7 keylookup(char *fmt, ...)
15 a = parseattrfmtv(fmt, arg);
18 for(i=0; i<ring.nkey; i++){
20 if(matchattr(a, k->attr, k->privattr)){
27 werrstr("no key found");
32 keyfetch(Conv *c, char *fmt, ...)
40 a = parseattrfmtv(fmt, arg);
45 for(i=0; i<ring.nkey; i++){
49 if(matchattr(a, k->attr, k->privattr)){
51 if(strfindattr(k->attr, "confirm") && confirmkey(c, k) != 1){
63 for(i=0; i<ring.nkey; i++){
67 if(matchattr(a, k->attr, k->privattr)){
69 if(strfindattr(k->attr, "confirm") && confirmkey(c, k) != 1){
78 werrstr("no key found");
91 for(i=0; i<ring.nkey; i++){
92 if(matchattr(k->attr, ring.key[i]->attr, nil)
93 && matchattr(ring.key[i]->attr, k->attr, nil)){
94 keyclose(ring.key[i]);
100 ring.key = erealloc(ring.key, (ring.nkey+1)*sizeof(ring.key[0]));
101 ring.key[ring.nkey++] = k;
113 if(k->proto->closekey)
114 (*k->proto->closekey)(k);
117 freeattr(k->privattr);
122 keyreplace(Conv *c, Key *k, char *fmt, ...)
130 msg = vsmprint(fmt, arg);
132 sysfatal("out of memory");
135 /* replace prompted values with prompts */
136 a = copyattr(k->attr);
137 bp = parseattr(k->proto->keyprompt);
138 for(b=bp; b; b=b->next){
139 a = delattr(a, b->name);
140 a = addattr(a, "%q?", b->name);
144 if(badkey(c, k, msg, a) < 0)
145 convbadkey(c, k, msg, a);
146 kk = keylookup("%A", a);
155 if(strfindattr(kk->attr, "confirm")){
156 if(confirmkey(c, kk) != 1){
157 werrstr("key use not confirmed");
166 keyevict(Conv *c, Key *k, char *fmt, ...)
173 msg = vsmprint(fmt, arg);
175 sysfatal("out of memory");
178 /* replace prompted values with prompts */
179 a = copyattr(k->attr);
180 bp = parseattr(k->proto->keyprompt);
181 for(b=bp; b; b=b->next){
182 a = delattr(a, b->name);
183 a = addattr(a, "%q?", b->name);
187 if(badkey(c, k, msg, nil) < 0)
188 convbadkey(c, k, msg, nil);