2006-01-17 16:22:03 +03:00
|
|
|
#include <u.h>
|
|
|
|
#include <libc.h>
|
2006-01-17 15:37:52 +03:00
|
|
|
#include "fmtdef.h"
|
2005-08-08 16:50:13 +04:00
|
|
|
|
|
|
|
int
|
|
|
|
sprint(char *buf, char *fmt, ...)
|
|
|
|
{
|
|
|
|
int n;
|
2006-01-17 15:37:52 +03:00
|
|
|
uint len;
|
2005-08-08 16:50:13 +04:00
|
|
|
va_list args;
|
|
|
|
|
2006-01-17 15:37:52 +03:00
|
|
|
len = 1<<30; /* big number, but sprint is deprecated anyway */
|
|
|
|
/*
|
|
|
|
* on PowerPC, the stack is near the top of memory, so
|
|
|
|
* we must be sure not to overflow a 32-bit pointer.
|
|
|
|
*/
|
2008-12-09 19:47:22 +03:00
|
|
|
if((uintptr)buf+len < (uintptr)buf)
|
2006-01-17 15:37:52 +03:00
|
|
|
len = -(uintptr)buf-1;
|
|
|
|
|
2005-08-08 16:50:13 +04:00
|
|
|
va_start(args, fmt);
|
2006-01-17 15:37:52 +03:00
|
|
|
n = vsnprint(buf, len, fmt, args);
|
2005-08-08 16:50:13 +04:00
|
|
|
va_end(args);
|
|
|
|
return n;
|
|
|
|
}
|