⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prog.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <thread.h>#include <sunrpc.h>SunStatussunCallPack(SunProg *prog, uchar *a, uchar *ea, uchar **pa, SunCall *c){	uchar *x;	int (*pack)(uchar*, uchar*, uchar**, SunCall*);	if(pa == nil)		pa = &x;	if(c->type < 0 || c->type >= prog->nproc || (pack=prog->proc[c->type].pack) == nil)		return SunProcUnavail;	if((*pack)(a, ea, pa, c) < 0)		return SunGarbageArgs;	return SunSuccess;}SunStatussunCallUnpack(SunProg *prog, uchar *a, uchar *ea, uchar **pa, SunCall *c){	uchar *x;	int (*unpack)(uchar*, uchar*, uchar**, SunCall*);	if(pa == nil)		pa = &x;	if(c->type < 0 || c->type >= prog->nproc || (unpack=prog->proc[c->type].unpack) == nil)		return SunProcUnavail;	if((*unpack)(a, ea, pa, c) < 0){		fprint(2, "in: %.*H unpack failed\n", (int)(ea-a), a);		return SunGarbageArgs;	}	return SunSuccess;}SunStatussunCallUnpackAlloc(SunProg *prog, SunCallType type, uchar *a, uchar *ea, uchar **pa, SunCall **pc){	uchar *x;	uint size;	int (*unpack)(uchar*, uchar*, uchar**, SunCall*);	SunCall *c;	if(pa == nil)		pa = &x;	if(type < 0 || type >= prog->nproc || (unpack=prog->proc[type].unpack) == nil)		return SunProcUnavail;	size = prog->proc[type].sizeoftype;	if(size == 0)		return SunProcUnavail;	c = mallocz(size, 1);	if(c == nil)		return SunSystemErr;	c->type = type;	if((*unpack)(a, ea, pa, c) < 0){		fprint(2, "in: %.*H unpack failed\n", (int)(ea-a), a);		free(c);		return SunGarbageArgs;	}	*pc = c;	return SunSuccess;}uintsunCallSize(SunProg *prog, SunCall *c){	uint (*size)(SunCall*);	if(c->type < 0 || c->type >= prog->nproc || (size=prog->proc[c->type].size) == nil)		return ~0;	return (*size)(c);}

⌨️ 快捷键说明

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