本文整理汇总了C++中poperror函数的典型用法代码示例。如果您正苦于以下问题:C++ poperror函数的具体用法?C++ poperror怎么用?C++ poperror使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了poperror函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getaddr
static void
getaddr(char *path, uint8_t *ea)
{
Proc *up = externup();
char buf[6*2];
int n;
Chan *c;
snprint(up->genbuf, sizeof up->genbuf, "%s/addr", path);
c = namec(up->genbuf, Aopen, OREAD, 0);
if(waserror()) {
cclose(c);
nexterror();
}
n = c->dev->read(c, buf, sizeof buf, 0);
if(n != sizeof buf)
error("getaddr");
if(parseether(ea, buf) < 0)
error("parseether failure");
poperror();
cclose(c);
}
示例2: srvwrite
static int32_t
srvwrite(Chan *c, void *va, int32_t n, int64_t mm)
{
Proc *up = externup();
Srv *sp;
Chan *c1;
int fd;
char buf[32];
if(n >= sizeof buf)
error(Egreg);
memmove(buf, va, n); /* so we can NUL-terminate */
buf[n] = 0;
fd = strtoul(buf, 0, 0);
c1 = fdtochan(fd, -1, 0, 1); /* error check and inc ref */
qlock(&srvlk);
if(waserror()) {
qunlock(&srvlk);
cclose(c1);
nexterror();
}
if(c1->flag & (CCEXEC|CRCLOSE))
error("posted fd has remove-on-close or close-on-exec");
if(c1->qid.type & QTAUTH)
error("cannot post auth file in srv");
sp = srvlookup(nil, c->qid.path);
if(sp == 0)
error(Enonexist);
if(sp->chan)
error(Ebadusefd);
sp->chan = c1;
qunlock(&srvlk);
poperror();
return n;
}
示例3: init0
void
init0(void)
{
int i;
char buf[2*KNAMELEN];
up->nerrlab = 0;
spllo();
/*
* These are o.k. because rootinit is null.
* Then early kproc's will have a root and dot.
*/
up->slash = namec("#/", Atodir, 0, 0);
pathclose(up->slash->path);
up->slash->path = newpath("/");
up->dot = cclone(up->slash);
chandevinit();
if(!waserror()){
snprint(buf, sizeof(buf), "%s %s", arch->id, conffile);
ksetenv("terminal", buf, 0);
ksetenv("cputype", "386", 0);
if(cpuserver)
ksetenv("service", "cpu", 0);
else
ksetenv("service", "terminal", 0);
for(i = 0; i < nconf; i++){
if(confname[i][0] != '*')
ksetenv(confname[i], confval[i], 0);
ksetenv(confname[i], confval[i], 1);
}
poperror();
}
kproc("alarm", alarmkproc, 0);
touser(sp);
}
示例4: srvwstat
static int
srvwstat(Chan *c, uchar *dp, int n)
{
Dir *d;
SrvFile *sf, *f;
sf = c->aux;
if(strcmp(up->env->user, sf->user) != 0)
error(Eperm);
d = smalloc(sizeof(*d)+n);
if(waserror()){
free(d);
nexterror();
}
n = convM2D(dp, n, d, (char*)&d[1]);
if(n == 0)
error(Eshortstat);
if(!emptystr(d->name)){
if(sf->dir == nil)
error(Eperm);
validwstatname(d->name);
qlock(&dev.l);
for(f = sf->dir; f != nil; f = f->entry)
if(strcmp(f->name, d->name) == 0){
qunlock(&dev.l);
error(Eexist);
}
kstrdup(&sf->name, d->name);
qunlock(&dev.l);
}
if(d->mode != ~0UL)
sf->perm = d->mode & (DMEXCL|DMAPPEND|0777);
if(d->length != (vlong)-1)
sf->length = d->length;
poperror();
free(d);
return n;
}
示例5: srvopen
static Chan*
srvopen(Chan *c, int omode)
{
SrvFile *sf;
openmode(omode); /* check it */
if(c->qid.type & QTDIR){
if(omode != OREAD)
error(Eisdir);
c->mode = omode;
c->flag |= COPEN;
c->offset = 0;
return c;
}
sf = c->aux;
qlock(&dev.l);
if(waserror()){
qunlock(&dev.l);
nexterror();
}
devpermcheck(sf->user, sf->perm, omode);
if(omode&ORCLOSE && strcmp(sf->user, up->env->user) != 0)
error(Eperm);
if(sf->perm & DMEXCL && sf->opens != 0)
error(Einuse);
sf->opens++;
if(omode&ORCLOSE)
sf->flags |= SORCLOSE;
poperror();
qunlock(&dev.l);
c->offset = 0;
c->flag |= COPEN;
c->mode = openmode(omode);
return c;
}
示例6: pwait
int
pwait(Waitmsg *w)
{
int cpid;
Waitq *wq;
if(!canqlock(&up->qwaitr))
error(Einuse);
if(waserror()) {
qunlock(&up->qwaitr);
nexterror();
}
lock(&up->exl);
if(up->nchild == 0 && up->waitq == 0) {
unlock(&up->exl);
error(Enochild);
}
unlock(&up->exl);
sleep(&up->waitr, haswaitq, up);
lock(&up->exl);
wq = up->waitq;
up->waitq = wq->next;
up->nwait--;
unlock(&up->exl);
qunlock(&up->qwaitr);
poperror();
if(w)
memmove(w, &wq->w, sizeof(Waitmsg));
cpid = wq->w.pid;
free(wq);
return cpid;
}
示例7: getconfenv
/*
* Return a copy of configuration environment as a sequence of strings.
* The strings alternate between name and value. A zero length name string
* indicates the end of the list
*/
char *
getconfenv(void)
{
Egrp *eg = &confegrp;
Evalue *e;
char *p, *q;
int i, n;
rlock(eg);
if(waserror()) {
runlock(eg);
nexterror();
}
/* determine size */
n = 0;
for(i=0; i<eg->nent; i++){
e = eg->ent[i];
n += strlen(e->name) + e->len + 2;
}
p = malloc(n + 1);
if(p == nil)
error(Enomem);
q = p;
for(i=0; i<eg->nent; i++){
e = eg->ent[i];
strcpy(q, e->name);
q += strlen(q) + 1;
memmove(q, e->value, e->len);
q[e->len] = 0;
/* move up to the first null */
q += strlen(q) + 1;
}
*q = '\0';
poperror();
runlock(eg);
return p;
}
示例8: srvopen
static Chan*
srvopen(Chan *c, int omode)
{
Proc *up = externup();
Srv *sp;
if(c->qid.type == QTDIR){
if(omode & ORCLOSE)
error(Eperm);
if(omode != OREAD)
error(Eisdir);
c->mode = omode;
c->flag |= COPEN;
c->offset = 0;
return c;
}
qlock(&srvlk);
if(waserror()){
qunlock(&srvlk);
nexterror();
}
sp = srvlookup(nil, c->qid.path);
if(sp == 0 || sp->chan == 0)
error(Eshutdown);
if(omode&OTRUNC)
error("srv file already exists");
if(openmode(omode)!=sp->chan->mode && sp->chan->mode!=ORDWR)
error(Eperm);
devpermcheck(sp->owner, sp->perm, omode);
cclose(c);
incref(sp->chan);
qunlock(&srvlk);
poperror();
return sp->chan;
}
示例9: cswrite
long
cswrite(Chan *c, void *a, long n, vlong offset)
{
char *f[4];
char *s, *ns;
ulong ip;
int nf, port;
s = malloc(n+1);
if(s == nil)
error(Enomem);
if(waserror()){
free(s);
nexterror();
}
memmove(s, a, n);
s[n] = 0;
nf = getfields(s, f, nelem(f), 0, "!");
if(nf != 3)
error("can't translate");
port = lookupport(f[2]);
if(port <= 0)
error("no translation for port found");
ip = lookuphost(f[1]);
if(ip == 0)
error("no translation for host found");
ns = smprint("/net/%s/clone %I!%d", f[0], ip, port);
if(ns == nil)
error(Enomem);
free(c->aux);
c->aux = ns;
poperror();
free(s);
return n;
}
示例10: syspipe
long
syspipe(uint32 *arg)
{
int fd[2];
Chan *c[2];
Dev *d;
static char *datastr[] = {"data", "data1"};
int *ufd;
ufd = uvalidaddr(arg[0], 2*BY2WD, 1);
evenaddr(arg[0]);
d = devtab[devno('|', 0)];
c[0] = namec("#|", Atodir, 0, 0);
c[1] = 0;
fd[0] = -1;
fd[1] = -1;
if(waserror()){
cclose(c[0]);
if(c[1])
cclose(c[1]);
nexterror();
}
c[1] = cclone(c[0]);
if(walk(&c[0], datastr+0, 1, 1, nil) < 0)
error(Egreg);
if(walk(&c[1], datastr+1, 1, 1, nil) < 0)
error(Egreg);
c[0] = d->open(c[0], ORDWR);
c[1] = d->open(c[1], ORDWR);
if(newfd2(fd, c) < 0)
error(Enofd);
poperror();
ufd[0] = fd[0];
ufd[1] = fd[1];
return 0;
}
示例11: pprint
int
pprint(char *fmt, ...)
{
int n;
Chan *c;
Osenv *o;
va_list arg;
char buf[2*PRINTSIZE];
n = sprint(buf, "%s %ld: ", up->text, up->pid);
va_start(arg, fmt);
n = vseprint(buf+n, buf+sizeof(buf), fmt, arg) - buf;
va_end(arg);
o = up->env;
if(o->fgrp == 0) {
print("%s", buf);
return 0;
}
c = o->fgrp->fd[2];
if(c==0 || (c->mode!=OWRITE && c->mode!=ORDWR)) {
print("%s", buf);
return 0;
}
if(waserror()) {
print("%s", buf);
return 0;
}
devtab[c->type]->write(c, buf, n, c->offset);
poperror();
lock(c);
c->offset += n;
unlock(c);
return n;
}
示例12: ctl
long
ctl(Ether *e, void *p, long n)
{
Cmdbuf *cb;
Cmdtab *ct;
Ctlr *ctlr = e->ctlr;
Gbereg *reg = ctlr->reg;
cb = parsecmd(p, n);
if(waserror()) {
free(cb);
nexterror();
}
ct = lookupcmd(cb, ctlmsg, nelem(ctlmsg));
switch(ct->index) {
case CMjumbo:
if(strcmp(cb->f[1], "on") == 0) {
/* incoming packet queue doesn't expect jumbo frames */
error("jumbo disabled");
reg->psc0 = (reg->psc0 & ~PSC0mrumask) |
PSC0mru(PSC0mru9022);
e->maxmtu = 9022;
} else if(strcmp(cb->f[1], "off") == 0) {
reg->psc0 = (reg->psc0 & ~PSC0mrumask) |
PSC0mru(PSC0mru1522);
e->maxmtu = ETHERMAXTU;
} else
error(Ebadctl);
break;
default:
error(Ebadctl);
break;
}
free(cb);
poperror();
return n;
}
示例13: ipwstat
static int
ipwstat(Chan *c, uchar *dp, int n)
{
Dir *d;
Conv *cv;
Proto *p;
Fs *f;
f = ipfs[c->dev];
switch(TYPE(c->qid)) {
default:
error(Eperm);
break;
case Qctl:
case Qdata:
break;
}
d = smalloc(sizeof(*d)+n);
if(waserror()){
free(d);
nexterror();
}
n = convM2D(dp, n, d, (char*)&d[1]);
if(n == 0)
error(Eshortstat);
p = f->p[PROTO(c->qid)];
cv = p->conv[CONV(c->qid)];
if(!iseve() && strcmp(up->env->user, cv->owner) != 0)
error(Eperm);
if(!emptystr(d->uid))
kstrdup(&cv->owner, d->uid);
if(d->mode != ~0UL)
cv->perm = d->mode & 0777;
poperror();
free(d);
return n;
}
示例14: pipebwrite
static long
pipebwrite(Chan *c, Block *bp, ulong junk)
{
long n;
Pipe *p;
USED(junk);
if(waserror()) {
/* avoid exceptions when pipe is a mounted queue */
if((c->flag & CMSG) == 0) {
if (up->ptype == Vm_proc) {
vproc_t* r = (vproc_t*)up;
if (r->kill == nil) {
r->kill = "write on closed pipe";
}
}
}
nexterror();
}
p = c->aux;
switch(NETTYPE(c->qid.path)){
case Qdata0:
n = qbwrite(p->q[1], bp);
break;
case Qdata1:
n = qbwrite(p->q[0], bp);
break;
default:
n = 0;
panic("pipebwrite");
}
poperror();
return n;
}
示例15: eventlogread
static long
eventlogread(void *a, long n)
{
int len;
char *p, *buf;
buf = smalloc(Eventlen);
qlock(&events);
lock(&events);
p = events.rp;
len = *p;
if(len == 0){
n = 0;
unlock(&events);
} else {
if(n > len)
n = len;
/* can't move directly into pageable space with events lock held */
memmove(buf, p+1, n);
*p = 0;
events.rp = p += Eventlen;
if(p >= events.buf + sizeof events.buf)
events.rp = events.buf;
unlock(&events);
/* the concern here is page faults in memmove below */
if(waserror()){
free(buf);
qunlock(&events);
nexterror();
}
memmove(a, buf, n);
poperror();
}
free(buf);
qunlock(&events);
return n;
}