Index: programs/Xserver/include/os.h =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/include/os.h,v retrieving revision 1.2 diff -u -r1.2 os.h --- programs/Xserver/include/os.h 23 Apr 2004 19:54:23 -0000 1.2 +++ programs/Xserver/include/os.h 25 Nov 2004 13:55:03 -0000 @@ -256,6 +256,10 @@ 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 */); Index: programs/Xserver/os/Imakefile =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/os/Imakefile,v retrieving revision 1.6 diff -u -r1.6 Imakefile --- programs/Xserver/os/Imakefile 19 Oct 2004 13:50:10 -0000 1.6 +++ programs/Xserver/os/Imakefile 25 Nov 2004 13:55:03 -0000 @@ -97,12 +97,12 @@ osinit.c utils.c log.c auth.c mitauth.c secauth.c \ $(XDMAUTHSRCS) $(RPCSRCS) $(KRB5SRCS) xdmcp.c OtherSources \ transport.c $(SNPRINTF_SRCS) $(STRLCAT_SRCS) \ - $(MALLOC_SRCS) $(LBX_SRCS) + $(MALLOC_SRCS) $(LBX_SRCS) xprintf.c OBJS = WaitFor.o access.o connection.o io.o $(COLOR_OBJS) \ osinit.o utils.o log.o auth.o mitauth.o secauth.o \ $(XDMAUTHOBJS) $(RPCOBJS) $(KRB5OBJS) xdmcp.o OtherObjects \ transport.o $(SNPRINTF_OBJS) $(STRLCAT_OBJS) \ - $(MALLOC_OBJS) $(LBX_OBJS) + $(MALLOC_OBJS) $(LBX_OBJS) xprintf.o #if SpecialMalloc MEM_DEFINES = -DSPECIAL_MALLOC Index: programs/Xserver/os/xprintf.c =================================================================== RCS file: programs/Xserver/os/xprintf.c diff -N programs/Xserver/os/xprintf.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ programs/Xserver/os/xprintf.c 25 Nov 2004 13:55:03 -0000 @@ -0,0 +1,64 @@ +#include "Xos.h" +#include "os.h" +#include +#include + +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; +}