示例#1
0
/* public helper routine: fmt out a null terminated string already in hand */
int
fmtstrcpy(Fmt *f, char *s)
{
	int p, i;
	if(!s)
		return _fmtcpy(f, "<nil>", 5, 5);
	/* if precision is specified, make sure we don't wander off the end */
	if(f->flags & FmtPrec){
		p = f->prec;
		for(i = 0; i < p; i++)
			if(s[i] == 0)
				break;
		return _fmtcpy(f, s, utfnlen(s, i), i);	/* BUG?: won't print a partial rune at end */
	}

	return _fmtcpy(f, s, utflen(s), strlen(s));
}
示例#2
0
文件: errfmt.c 项目: 8l/inferno
int
errfmt(Fmt *f)
{
	char buf[ERRMAX];

	rerrstr(buf, sizeof buf);
	return _fmtcpy(f, buf, utflen(buf), strlen(buf));
}
示例#3
0
文件: dofmt.c 项目: 99years/plan9
/* public helper routine: fmt out a null terminated string already in hand */
int
fmtstrcpy(Fmt *f, char *s)
{
	int i, j;
	Rune r;

	if(!s)
		return _fmtcpy(f, "<nil>", 5, 5);
	/* if precision is specified, make sure we don't wander off the end */
	if(f->flags & FmtPrec){
		i = 0;
		for(j=0; j<f->prec && s[i]; j++)
			i += chartorune(&r, s+i);
		return _fmtcpy(f, s, j, i);
	}
	return _fmtcpy(f, s, utflen(s), strlen(s));
}
示例#4
0
/* fmt out one character */
int
_charfmt(Fmt *f)
{
	char x[1];

	x[0] = va_arg(f->args, int);
	f->prec = 1;
	return _fmtcpy(f, x, 1, 1);
}
示例#5
0
文件: fltfmt.c 项目: 8l/inferno
int
_floatfmt(Fmt *fmt, double f)
{
	char s[FDIGIT+10];

	xdtoa(fmt, s, f);
	fmt->flags &= FmtWidth|FmtLeft;
	_fmtcpy(fmt, s, strlen(s), strlen(s));
	return 0;
}
示例#6
0
int
_floatfmt(Fmt *fmt, double f)
{
	char s[1+NEXP10+1+FDIGIT+1];

	/*
	 * The max length of a %f string is
	 *	'[+-]'+"max exponent"+'.'+"max precision"+'\0'
	 * which is 341 currently.
	 */	
	xdtoa(fmt, s, f);
	fmt->flags &= FmtWidth|FmtLeft;
	_fmtcpy(fmt, s, strlen(s), strlen(s));
	return 0;
}
示例#7
0
/* public helper routine: fmt out a null terminated rune string already in hand */
int
fmtrunestrcpy(Fmt *f, Rune *s)
{
	Rune *e;
	int n, p;

	if(!s)
		return _fmtcpy(f, "<nil>", 5, 5);
	/* if precision is specified, make sure we don't wander off the end */
	if(f->flags & FmtPrec){
		p = f->prec;
		for(n = 0; n < p; n++)
			if(s[n] == 0)
				break;
	}else{
		for(e = s; *e; e++)
			;
		n = e - s;
	}
	return _fmtrcpy(f, s, n);
}