util.c

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

C
124
字号
#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 + =
减小字号Ctrl + -
显示快捷键?