runevsmprint.c

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

C
71
字号
#include <u.h>#include <libc.h>#include "fmtdef.h"static intruneFmtStrFlush(Fmt *f){	Rune *s;	int n;	if(f->start == nil)		return 0;	n = (int)(uintptr)f->farg;	n *= 2;	s = 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*)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*)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;	f.args = args;	n = dofmt(&f, fmt);	if(f.start == nil)		return nil;	if(n < 0){		free(f.start);		return nil;	}	*(Rune*)f.to = '\0';	return f.start;}

⌨️ 快捷键说明

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