Tnode* stringnode(char *fmt, ...) { va_list arg; Tnode *t; t = mallocz(sizeof(Tnode), 1); va_start(arg, fmt); t->str = vsmprint(fmt, arg); va_end(arg); t->nkid = -1; return t; }
UserPasswd* auth_getuserpasswd(AuthGetkey *getkey, char *fmt, ...) { AuthRpc *rpc; char *f[3], *p, *params; int fd; va_list arg; UserPasswd *up; up = nil; rpc = nil; params = nil; fd = open("/mnt/factotum/rpc", ORDWR); if(fd < 0) goto out; rpc = auth_allocrpc(fd); if(rpc == nil) goto out; quotefmtinstall(); /* just in case */ va_start(arg, fmt); params = vsmprint(fmt, arg); va_end(arg); if(params == nil) goto out; if(dorpc(rpc, "start", params, strlen(params), getkey) != ARok || dorpc(rpc, "read", nil, 0, getkey) != ARok) goto out; rpc->arg[rpc->narg] = '\0'; if(tokenize(rpc->arg, f, 2) != 2){ werrstr("bad answer from factotum"); goto out; } up = malloc(sizeof(*up)+rpc->narg+1); if(up == nil) goto out; p = (char*)&up[1]; strcpy(p, f[0]); up->user = p; p += strlen(p)+1; strcpy(p, f[1]); up->passwd = p; out: free(params); auth_freerpc(rpc); close(fd); return up; }
char* esmprint(char *fmt, ...) { va_list args; char *p; va_start(args, fmt); p = vsmprint(fmt, args); va_end(args); if (p == nil) sysfatal("esmprint: out of memory: %r"); setmalloctag(p, getcallerpc()); return p; }
void editerror(char *fmt, ...) { va_list arg; char *s; va_start(arg, fmt); s = vsmprint(fmt, arg); va_end(arg); freecmd(); allwindows(allelogterm, nil); /* truncate the edit logs */ sendp(editerrc, s); threadexits(nil); }
void conflict(char *name, char *f, ...) { char *s; va_list arg; va_start(arg, f); s = vsmprint(f, arg); va_end(arg); fprint(2, "! %s: %s\n", name, s); free(s); nconf++; }
void lbvappend(Logbuf *lb, char *fmt, va_list arg) { char *s; s = vsmprint(fmt, arg); if(s == nil) sysfatal("out of memory"); if(lb->msg[lb->wp]) free(lb->msg[lb->wp]); lb->msg[lb->wp] = s; if(++lb->wp == nelem(lb->msg)) lb->wp = 0; lbkick(lb); }
int auth_respond(void *chal, uint nchal, char *user, uint nuser, void *resp, uint nresp, AuthGetkey *getkey, char *fmt, ...) { char *p, *s; va_list arg; int afd; AuthRpc *rpc; Attr *a; if((afd = open("/mnt/factotum/rpc", ORDWR)) < 0) return -1; if((rpc = auth_allocrpc(afd)) == nil){ close(afd); return -1; } quotefmtinstall(); /* just in case */ va_start(arg, fmt); p = vsmprint(fmt, arg); va_end(arg); if(p==nil || dorpc(rpc, "start", p, strlen(p), getkey) != ARok || dorpc(rpc, "write", chal, nchal, getkey) != ARok || dorpc(rpc, "read", nil, 0, getkey) != ARok){ free(p); close(afd); auth_freerpc(rpc); return -1; } free(p); if(rpc->narg < nresp) nresp = rpc->narg; memmove(resp, rpc->arg, nresp); if((a = auth_attr(rpc)) != nil && (s = _strfindattr(a, "user")) != nil && strlen(s) < nuser) strcpy(user, s); else if(nuser > 0) user[0] = '\0'; _freeattr(a); close(afd); auth_freerpc(rpc); return nresp; }
/* print to the conversation */ int convprint(Conv *c, char *fmt, ...) { char *s; va_list arg; int ret; va_start(arg, fmt); s = vsmprint(fmt, arg); va_end(arg); if(s == nil) return -1; ret = convwrite(c, s, strlen(s)); free(s); return ret; }
static char* logit(int severity, char *fmt, va_list args) { char *s; s = vsmprint(fmt, args); if(s == nil) return nil; if(severity != EOk){ if(argv0 == nil) fprint(2, "%T %s: err %d: %s\n", argv0, severity, s); else fprint(2, "%T err %d: %s\n", severity, s); } return s; }
char* estrappend(char *s, char *fmt, ...) { char *t; int l; va_list arg; va_start(arg, fmt); t = vsmprint(fmt, arg); if(t == nil) sysfatal("out of memory"); va_end(arg); l = s ? strlen(s) : 0; s = erealloc(s, l+strlen(t)+1); strcpy(s+l, t); free(t); return s; }
int print2(int fd, int ofd, char *fmt, ...) { int m, n; char *s; va_list arg; va_start(arg, fmt); s = vsmprint(fmt, arg); va_end(arg); if(s == nil) return -1; m = strlen(s); n = write(fd, s, m); if(ofd > 0) write(ofd, s, m); return n; }
char* vtSetError(char* fmt, ...) { Thread *p; char *s; va_list args; p = threadLookup(); va_start(args, fmt); s = vsmprint(fmt, args); vtMemFree(p->error); p->error = s; va_end(args); if(ERROR) fprint(2, "vtSetError: %s\n", p->error); werrstr("%s", p->error); return p->error; }
/* * make factotum add wep keys to an 802.11 device */ int auth_wep(char *dev, char *fmt, ...) { AuthRpc *rpc; char *params, *p; int fd; va_list arg; int rv; rv = -1; if(dev == nil){ werrstr("no device specified"); return rv; } fd = open("/mnt/factotum/rpc", ORDWR); if(fd < 0) return rv; rpc = auth_allocrpc(fd); if(rpc != nil){ quotefmtinstall(); /* just in case */ va_start(arg, fmt); params = vsmprint(fmt, arg); va_end(arg); if(params != nil){ p = smprint("proto=wep %s", params); if(p != nil){ if(auth_rpc(rpc, "start", p, strlen(p)) == ARok && auth_rpc(rpc, "write", dev, strlen(dev)) == ARok) rv = 0; free(p); } free(params); } auth_freerpc(rpc); } close(fd); return rv; }
/* * based on libthread's threadsetname, but drags in less library code. * actually just sets the arguments displayed. */ void procsetname(char *fmt, ...) { int fd; char *cmdname; char buf[128]; va_list arg; va_start(arg, fmt); cmdname = vsmprint(fmt, arg); va_end(arg); if (cmdname == nil) return; snprint(buf, sizeof buf, "#p/%d/args", getpid()); if((fd = open(buf, OWRITE)) >= 0){ write(fd, cmdname, strlen(cmdname)+1); close(fd); } free(cmdname); }
Chalstate* auth_challenge(char *fmt, ...) { char *p; va_list arg; Chalstate *c; quotefmtinstall(); /* just in case */ va_start(arg, fmt); p = vsmprint(fmt, arg); va_end(arg); if(p == nil) return nil; c = mallocz(sizeof(*c), 1); if(c == nil){ free(p); return nil; } if((c->afd = open("/mnt/factotum/rpc", ORDWR)) < 0){ Error: auth_freechal(c); free(p); return nil; } if((c->rpc=auth_allocrpc(c->afd)) == nil || auth_rpc(c->rpc, "start", p, strlen(p)) != ARok || auth_rpc(c->rpc, "read", nil, 0) != ARok) goto Error; if(c->rpc->narg > sizeof(c->chal)-1){ werrstr("buffer too small for challenge"); goto Error; } memmove(c->chal, c->rpc->arg, c->rpc->narg); c->nchal = c->rpc->narg; free(p); return c; }
/* * based on libthread's threadsetname, but drags in less library code. * actually just sets the arguments displayed. */ static void procsetname(char *fmt, ...) { /* someday ... */ #if 0 int fd; char *cmdname; char buf[128]; va_list arg; va_start(arg, fmt); cmdname = vsmprint(fmt, arg); va_end(arg); if (cmdname == NULL) return; snprintf(buf, sizeof(buf), "#proc/%d/args", getpid()); fd = open(buf, OWRITE); if (fd >= 0) { write(fd, cmdname, strlen(cmdname)+1); close(fd); } free(cmdname); #endif }
AuthInfo* fsauth_proxy(CFid *fid, AuthGetkey *getkey, char *fmt, ...) { char *p; va_list arg; AuthInfo *ai; AuthRpc *rpc; quotefmtinstall(); /* just in case */ va_start(arg, fmt); p = vsmprint(fmt, arg); va_end(arg); rpc = auth_allocrpc(); if(rpc == nil){ free(p); return nil; } ai = fsfauth_proxy(fid, rpc, getkey, p); free(p); auth_freerpc(rpc); return ai; }
void threadsetname(char *fmt, ...) { int fd; char buf[128]; va_list arg; Proc *p; Thread *t; p = _threadgetproc(); t = p->thread; if (t->cmdname) free(t->cmdname); va_start(arg, fmt); t->cmdname = vsmprint(fmt, arg); va_end(arg); if(t->cmdname && p->nthreads == 1){ snprint(buf, sizeof buf, "#p/%lu/args", _tos->pid); //getpid()); if((fd = open(buf, OWRITE)) >= 0){ write(fd, t->cmdname, strlen(t->cmdname)+1); close(fd); } } }