Bugzilla #1865, https://bugs.freedesktop.org/show_bug.cgi?id=1865 Added
X(NF)printf and X(NF)vprintf functions which allocate the buffer with X(NF)alloc Bugzilla #1865, https://bugs.freedesktop.org/show_bug.cgi?id=1865 extend snprintf to work on NULL.
This commit is contained in:
parent
fe2a2213d1
commit
16a683f4d1
|
@ -256,6 +256,10 @@ extern void OsInitAllocator(void);
|
|||
|
||||
extern char *Xstrdup(const char *s);
|
||||
extern char *XNFstrdup(const char *s);
|
||||
extern char *Xprintf(const char *fmt, ...);
|
||||
extern char *Xvprintf(const char *fmt, va_list va);
|
||||
extern char *XNFprintf(const char *fmt, ...);
|
||||
extern char *XNFvprintf(const char *fmt, va_list va);
|
||||
|
||||
typedef SIGVAL (*OsSigHandlerPtr)(int /* sig */);
|
||||
|
||||
|
|
64
os/xprintf.c
Normal file
64
os/xprintf.c
Normal file
|
@ -0,0 +1,64 @@
|
|||
#include "Xos.h"
|
||||
#include "os.h"
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
char *
|
||||
Xvprintf(const char *format, va_list va)
|
||||
{
|
||||
char *ret;
|
||||
int size;
|
||||
va_list va2;
|
||||
|
||||
va_copy(va2, va);
|
||||
size = vsnprintf(NULL, 0, format, va2);
|
||||
va_end(va2);
|
||||
|
||||
ret = (char *)Xalloc(size + 1);
|
||||
if (ret == NULL)
|
||||
return NULL;
|
||||
|
||||
vsnprintf(ret, size + 1, format, va);
|
||||
ret[size] = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
char *Xprintf(const char *format, ...)
|
||||
{
|
||||
char *ret;
|
||||
va_list va;
|
||||
va_start(va, format);
|
||||
ret = Xvprintf(format, va);
|
||||
va_end(va);
|
||||
return ret;
|
||||
}
|
||||
|
||||
char *
|
||||
XNFvprintf(const char *format, va_list va)
|
||||
{
|
||||
char *ret;
|
||||
int size;
|
||||
va_list va2;
|
||||
|
||||
va_copy(va2, va);
|
||||
size = vsnprintf(NULL, 0, format, va2);
|
||||
va_end(va2);
|
||||
|
||||
ret = (char *)XNFalloc(size + 1);
|
||||
if (ret == NULL)
|
||||
return NULL;
|
||||
|
||||
vsnprintf(ret, size + 1, format, va);
|
||||
ret[size] = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
char *XNFprintf(const char *format, ...)
|
||||
{
|
||||
char *ret;
|
||||
va_list va;
|
||||
va_start(va, format);
|
||||
ret = XNFvprintf(format, va);
|
||||
va_end(va);
|
||||
return ret;
|
||||
}
|
Loading…
Reference in New Issue
Block a user