diff options
Diffstat (limited to 'nx-X11/programs/Xserver/os/xprintf.c')
-rw-r--r-- | nx-X11/programs/Xserver/os/xprintf.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/nx-X11/programs/Xserver/os/xprintf.c b/nx-X11/programs/Xserver/os/xprintf.c index 07eaa1f58..a1ee21300 100644 --- a/nx-X11/programs/Xserver/os/xprintf.c +++ b/nx-X11/programs/Xserver/os/xprintf.c @@ -43,6 +43,63 @@ # endif #endif +#ifdef NXAGENT_SERVER + +#define PANIC +#define WARNING +#undef TEST +#undef DEBUG + +#define START_SIZE 256 +#define END_SIZE 2048 + +char * +Xvprintf(const char *format, va_list va) +{ + char *ret; + char *newret; + int size; + int r; + + size = 0; + + for (;;) + { + if (size == 0) + { + ret = (char *)malloc(START_SIZE); + if (ret == NULL) + return NULL; + size = START_SIZE; + } + else if (size < END_SIZE && + (newret = (char *) realloc(ret, 2 * size)) != NULL) + { + ret = newret; + size = 2 * size; + } + else + { + free(ret); + return NULL; + } + + r = vsnprintf(ret, size, format, va); + + if (r == -1 || r == size || r > size || r == size - 1) + { + continue; + } + else + { + ret[r] = 0; + return ret; + } + } +} + +#else + char * Xvprintf(const char *format, va_list va) { @@ -63,6 +120,8 @@ Xvprintf(const char *format, va_list va) return ret; } +#endif + char *Xprintf(const char *format, ...) { char *ret; |