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:
Alexander Gottwald 2004-12-03 11:57:42 +00:00
parent fe2a2213d1
commit 16a683f4d1
2 changed files with 68 additions and 0 deletions

View File

@ -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
View 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;
}