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

📄 runevsmprint.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include "fmtdef.h"static intruneFmtStrFlush(Fmt *f){	Rune *s;	int n;	if(f->start == nil)		return 0;	n = (uintptr)f->farg;	n *= 2;	s = (Rune*)f->start;	f->start = realloc(s, sizeof(Rune)*n);	if(f->start == nil){		f->farg = nil;		f->to = nil;		f->stop = nil;		free(s);		return 0;	}	f->farg = (void*)(uintptr)n;	f->to = (Rune*)f->start + ((Rune*)f->to - s);	f->stop = (Rune*)f->start + n - 1;	return 1;}intrunefmtstrinit(Fmt *f){	int n;	memset(f, 0, sizeof *f);	f->runes = 1;	n = 32;	f->start = malloc(sizeof(Rune)*n);	if(f->start == nil)		return -1;	f->to = f->start;	f->stop = (Rune*)f->start + n - 1;	f->flush = runeFmtStrFlush;	f->farg = (void*)(uintptr)n;	f->nfmt = 0;	return 0;}/* * print into an allocated string buffer */Rune*runevsmprint(char *fmt, va_list args){	Fmt f;	int n;	if(runefmtstrinit(&f) < 0)		return nil;	VA_COPY(f.args,args);	n = dofmt(&f, fmt);	VA_END(f.args);	if(f.start == nil)		return nil;	if(n < 0){		free(f.start);		return nil;	}	*(Rune*)f.to = '\0';	return (Rune*)f.start;}

⌨️ 快捷键说明

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