当前位置: 首页>>代码示例>>C++>>正文


C++ devwalk函数代码示例

本文整理汇总了C++中devwalk函数的典型用法代码示例。如果您正苦于以下问题:C++ devwalk函数的具体用法?C++ devwalk怎么用?C++ devwalk使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了devwalk函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: devwalk

static struct walkqid *pipewalk(struct chan *c, struct chan *nc, char **name,
								int nname)
{
	struct walkqid *wq;
	Pipe *p;

	p = c->aux;
	wq = devwalk(c, nc, name, nname, p->pipedir, ARRAY_SIZE(pipedir), pipegen);
	if (wq != NULL && wq->clone != NULL && wq->clone != c) {
		qlock(&p->qlock);
		kref_get(&p->ref, 1);
		if (c->flag & COPEN) {
			switch (NETTYPE(c->qid.path)) {
				case Qdata0:
					p->qref[0]++;
					break;
				case Qdata1:
					p->qref[1]++;
					break;
			}
		}
		qunlock(&p->qlock);
	}
	return wq;
}
开发者ID:GanShun,项目名称:akaros,代码行数:25,代码来源:pipe.c

示例2: devlogfswalk

static Walkqid*
devlogfswalk(Chan *c, Chan *nc, char **name, int nname)
{
	int instance, qid, qt, clone;
	Walkqid *wq;

#ifdef CALLTRACE
	print("devlogfswalk(c = 0x%.8lux, nc = 0x%.8lux, name = 0x%.8lux, nname = %d) - start\n",
		(ulong)c, (ulong)nc, (ulong)name, nname);
#endif
	clone = 0;
	if(nc == nil){
		nc = devclone(c);
		nc->type = 0;
		SPLITPATH(c->qid.path, c->qid.type, instance, qid, qt);
		if(DATAQID(qid, qt))
			nc->aux = devlogfsget(instance);
		clone = 1;
	}
	wq = devwalk(c, nc, name, nname, 0, 0, devlogfsgen);
	if (wq == nil || wq->nqid < nname) {
		if(clone)
			cclose(nc);
	}
	else if (clone) {
		wq->clone = nc;
		nc->type = c->type;
	}
#ifdef CALLTRACE
	print("devlogfswalk(c = 0x%.8lux, nc = 0x%.8lux, name = 0x%.8lux, nname = %d) - return\n",
		(ulong)c, (ulong)nc, (ulong)name, nname);
#endif
	return wq;
}
开发者ID:8l,项目名称:inferno,代码行数:34,代码来源:devlogfs.c

示例3: pipewalk

static Walkqid*
pipewalk(Chan *c, Chan *nc, char **name, int nname)
{
	Walkqid *wq;
	Pipe *p;

	wq = devwalk(c, nc, name, nname, pipedir, NPIPEDIR, pipegen);
	if(wq != nil && wq->clone != nil && wq->clone != c){
		p = c->aux;
		qlock(p);
		p->ref++;
		if(c->flag & COPEN){
			print("channel open in pipewalk\n");
			switch(NETTYPE(c->qid.path)){
			case Qdata0:
				p->qref[0]++;
				break;
			case Qdata1:
				p->qref[1]++;
				break;
			}
		}
		qunlock(p);
	}
	return wq;
}
开发者ID:Nurb432,项目名称:plan9front,代码行数:26,代码来源:devpipe.c

示例4: srvwalk

static Walkqid*
srvwalk(Chan *c, Chan *nc, char **name, int nname)
{
	SrvFile *d, *pd;
	Walkqid *w;

	pd = c->aux;
	qlock(&dev.l);
	if(waserror()){
		qunlock(&dev.l);
		nexterror();
	}

	w = devwalk(c, nc, name, nname, nil, 0, srvgen);
	if(w != nil && w->clone != nil){
		if(nname != 0){
			for(d = pd->entry; d != nil; d = d->entry)
				if(d->qid.path == w->clone->qid.path)
					break;
			if(d == nil)
				panic("srvwalk");
			if(w->clone == c)
				pd->ref--;
		}else
			d = pd;
		w->clone->aux = d;
		d->ref++;
	}

	poperror();
	qunlock(&dev.l);
	return w;
}
开发者ID:8l,项目名称:inferno,代码行数:33,代码来源:devsrv.c

示例5: pipewalk

static Walkqid*
pipewalk(Chan *c, Chan *nc, char **name, int nname)
{
	Walkqid *wq;
	Pipe *p;

	p = c->aux;
	wq = devwalk(c, nc, name, nname, p->pipedir, nelem(pipedir), pipegen);
	if(wq != nil && wq->clone != nil && wq->clone != c){
		qlock(&p->l);
		p->ref++;
		if(c->flag & COPEN){
			switch(NETTYPE(c->qid.path)){
			case Qdata0:
				p->qref[0]++;
				break;
			case Qdata1:
				p->qref[1]++;
				break;
			}
		}
		qunlock(&p->l);
	}
	return wq;
}
开发者ID:AndreasBriese,项目名称:node9,代码行数:25,代码来源:devpipe.c

示例6: corebootwalk

static Walkqid*
corebootwalk(Chan *c, Chan *nc, char **name, int nname)
{
	Walkqid *wq;

	wq = devwalk(c, nc, name, nname, corebootdir, nelem(corebootdir), devgen);
	/* todo: cover any cases that need locking. There are none yet. */
	return wq;
}
开发者ID:dancrossnyc,项目名称:harvey,代码行数:9,代码来源:devcoreboot.c

示例7: rootwalk

static Walkqid*
rootwalk(Chan *c, Chan *nc, char **name, int nname)
{
	ulong p;

	p = c->qid.path;
	if(nname == 0)
		p = rootdata[p].dotdot;
	return devwalk(c, nc, name, nname, rootdata[p].ptr, rootdata[p].size, rootgen);
}
开发者ID:8l,项目名称:inferno,代码行数:10,代码来源:devroot.c

示例8: srvwalk

static Walkqid*
srvwalk(Chan *c, Chan *nc, char **name, int nname)
{
	Walkqid *wqid;

	qlock(&srvlk);
	wqid = devwalk(c, nc, name, nname, 0, 0, srvgen);
	qunlock(&srvlk);
	return wqid;
}
开发者ID:qioixiy,项目名称:harvey,代码行数:10,代码来源:devsrv.c

示例9: pointerwalk

static Walkqid*
pointerwalk(Chan *c, Chan *nc, char **name, int nname)
{
	Walkqid *wq;

	wq = devwalk(c, nc, name, nname, pointertab, nelem(pointertab), devgen);
	if(wq != nil && wq->clone != c && wq->clone != nil && (ulong)c->qid.path == Qpointer)
		incref(&mouse.ref);	/* can this happen? */
	return wq;
}
开发者ID:8l,项目名称:inferno,代码行数:10,代码来源:devpointer.c

示例10: ipwalk

static Walkqid*
ipwalk(Chan* c, Chan *nc, char **name, int nname)
{
	IPaux *a = c->aux;
	Walkqid* w;

	w = devwalk(c, nc, name, nname, nil, 0, ipgen);
	if(w != nil && w->clone != nil)
		w->clone->aux = newipaux(a->owner, a->tag);
	return w;
}
开发者ID:99years,项目名称:plan9,代码行数:11,代码来源:devip.c

示例11: mousewalk

static Walkqid*
mousewalk(Chan *c, Chan *nc, char **name, int nname)
{
	Walkqid *wq;

	/*
	 * We use devgen() and not mousedevgen() here
	 * see "Ugly problem" in dev.c/devwalk()
	 */
	wq = devwalk(c, nc, name, nname, mousedir, nelem(mousedir), devgen);
	if(wq != nil && wq->clone != c && wq->clone != nil && (wq->clone->qid.type&QTDIR)==0)
		incref(&mouse.ref);
	return wq;
}
开发者ID:0intro,项目名称:vx32,代码行数:14,代码来源:devmouse.c

示例12: printk

static struct walkqid *rootwalk(struct chan *c, struct chan *nc, char **name,
								int nname)
{
	uint32_t p;
	if (0){
		printk("rootwalk: c %p. :", c);
		if (nname){
			int i;
			for (i = 0; i < nname - 1; i++)
				printk("%s/", name[i]);
			printk("%s:\n", name[i]);
		}
	}
	p = c->qid.path;
	printd("Start from #%d at %p\n", p, &roottab[p]);
	return devwalk(c, nc, name, nname, &roottab[p], rootdata[p].size, rootgen);
}
开发者ID:anandab,项目名称:akaros,代码行数:17,代码来源:root.c

示例13: loopbackwalk

static Walkqid*
loopbackwalk(Chan *c, Chan *nc, char **name, int nname)
{
	Walkqid *wq;
	Loop *lb;

	wq = devwalk(c, nc, name, nname, nil, 0, loopbackgen);
	if(wq != nil && wq->clone != nil && wq->clone != c){
		lb = c->aux;
		qlock(lb);
		lb->ref++;
		if((c->flag & COPEN) && TYPE(c->qid.path) == Qdata)
			lb->link[ID(c->qid.path)].ref++;
		qunlock(lb);
	}
	return wq;
}
开发者ID:Nurb432,项目名称:plan9front,代码行数:17,代码来源:devloopback.c

示例14: audiowalk

static Walkqid*
audiowalk(Chan *c, Chan *nc, char **name, int nname)
{
	Audiochan *ac;
	Audio *adev;
	Walkqid *wq;

	ac = c->aux;
	adev = ac->adev;
	wq = devwalk(c, nc, name, nname, audiodir, nelem(audiodir), devgen);
	if(wq && wq->clone){
		if(audioclone(wq->clone, adev) == nil){
			free(wq);
			wq = nil;
		}
	}
	return wq;
}
开发者ID:vrthra,项目名称:9front-tmp,代码行数:18,代码来源:devaudio.c

示例15: cerfwalk

static Walkqid*
cerfwalk(Chan *c, Chan *nc, char **name, int nname)
{
	return devwalk(c, nc, name, nname, cerftab, nelem(cerftab), devgen);
}
开发者ID:8l,项目名称:inferno,代码行数:5,代码来源:devcerf.c


注:本文中的devwalk函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。