ndbsubstitute.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 47 行

C
47
字号
#include <u.h>#include <libc.h>#include <bio.h>#include <ndb.h>/* replace a in t with b, the line structure in b is lost, c'est la vie */Ndbtuple*ndbsubstitute(Ndbtuple *t, Ndbtuple *a, Ndbtuple *b){	Ndbtuple *nt;	if(a == b){		ndbsetmalloctag(t, getcallerpc(&t));		return t;	}	if(b == nil){		t = ndbdiscard(t, a);		ndbsetmalloctag(t, getcallerpc(&t));		return t;	}	/* all pointers to a become pointers to b */	for(nt = t; nt != nil; nt = nt->entry){		if(nt->line == a)			nt->line = b;		if(nt->entry == a)			nt->entry = b;	}	/* end of b chain points to a's successors */	for(nt = b; nt->entry; nt = nt->entry)		nt->line = nt->entry;	nt->line = a->line;	nt->entry = a->entry;	a->entry = nil;	ndbfree(a);	if(a == t){		ndbsetmalloctag(b, getcallerpc(&t));		return b;	}else{		ndbsetmalloctag(t, getcallerpc(&t));		return t;	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?