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

📄 s_alloc.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include "String.h"#define STRLEN 128extern voids_free(String *sp){	if (sp == nil)		return;	lock(sp);	if(--(sp->ref) != 0){		unlock(sp);		return;	}	unlock(sp);	if(sp->fixed == 0 && sp->base != nil)		free(sp->base);	free(sp);}/* get another reference to a string */extern String *s_incref(String *sp){	lock(sp);	sp->ref++;	unlock(sp);	return sp;}/* allocate a String head */extern String *_s_alloc(void){	String *s;	s = mallocz(sizeof *s, 1);	if(s == nil)		return s;	s->ref = 1;	s->fixed = 0;	return s;}/* create a new `short' String */extern String *s_newalloc(int len){	String *sp;	sp = _s_alloc();	if(sp == nil)		sysfatal("s_newalloc: %r");	setmalloctag(sp, getcallerpc(&len));	if(len < STRLEN)		len = STRLEN;	sp->base = sp->ptr = malloc(len);	if (sp->base == nil)		sysfatal("s_newalloc: %r");	setmalloctag(sp->base, getcallerpc(&len));	sp->end = sp->base + len;	s_terminate(sp);	return sp;}/* create a new `short' String */extern String *s_new(void){	String *sp;	sp = _s_alloc();	if(sp == nil)		sysfatal("s_new: %r");	sp->base = sp->ptr = malloc(STRLEN);	if (sp->base == nil)		sysfatal("s_new: %r");	sp->end = sp->base + STRLEN;	s_terminate(sp);	return sp;}

⌨️ 快捷键说明

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