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

📄 util.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "a.h"void*emalloc(uint n){	void *v;		v = mallocz(n, 1);	if(v == nil)		sysfatal("out of memory");	return v;}char*estrdup(char *s){	char *t;		t = strdup(s);	if(t == nil)		sysfatal("out of memory");	return t;}Rune*erunestrdup(Rune *s){	Rune *t;	t = emalloc(sizeof(Rune)*(runestrlen(s)+1));	if(t == nil)		sysfatal("out of memory");	runestrcpy(t, s);	return t;}void*erealloc(void *ov, uint n){	void *v;		v = realloc(ov, n);	if(v == nil)		sysfatal("out of memory");	return v;}Rune*erunesmprint(char *fmt, ...){	Rune *s;	va_list arg;		va_start(arg, fmt);	s = runevsmprint(fmt, arg);	va_end(arg);	if(s == nil)		sysfatal("out of memory");	return s;}char*esmprint(char *fmt, ...){	char *s;	va_list arg;		va_start(arg, fmt);	s = vsmprint(fmt, arg);	va_end(arg);	if(s == nil)		sysfatal("out of memory");	return s;}voidwarn(char *fmt, ...){	va_list arg;		fprint(2, "htmlroff: %L: ");	va_start(arg, fmt);	vfprint(2, fmt, arg);	va_end(arg);	fprint(2, "\n");}/* * For non-Unicode compilers, so we can say * L("asdf") and get a Rune string.  Assumes strings * are identified by their pointers, so no mutable strings! */typedef struct Lhash Lhash;struct Lhash{	char *s;	Lhash *next;	Rune r[1];};static Lhash *hash[1127];Rune*L(char *s){	Rune *p;	Lhash *l;	uint h;	h = (uintptr)s%nelem(hash);	for(l=hash[h]; l; l=l->next)		if(l->s == s)			return l->r;	l = emalloc(sizeof *l+(utflen(s)+1)*sizeof(Rune));	p = l->r;	l->s = s;	while(*s)		s += chartorune(p++, s);	*p = 0;	l->next = hash[h];	hash[h] = l;	return l->r;}

⌨️ 快捷键说明

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