diff options
author | sabetts <sabetts> | 2001-12-21 11:58:56 +0000 |
---|---|---|
committer | sabetts <sabetts> | 2001-12-21 11:58:56 +0000 |
commit | b411861a7c307f2f2e520f7c9d51958fc003f0df (patch) | |
tree | e73d98b5877d39754260ed163242935ffba76951 /src/main.c | |
parent | 8337770d09d8041ba4c6b676d1fbb5bc7fd6c6a2 (diff) | |
download | ratpoison-b411861a7c307f2f2e520f7c9d51958fc003f0df.zip |
* src/sbuf.h (sbuf_printf_concat): new prototype
(sbuf_printf): likewise
* src/sbuf.c (sbuf_printf_concat): new function
(sbuf_printf): likewise
* src/ratpoison.h: include stdarg.h
(xvsprintf): new prototype
(xsprintf): likewise
* src/main.c (xvsprintf): new function
(xsprintf): likewise
* src/bar.c: remove include of stdarg.h
(marked_message_printf): call xvsprintf.
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 48 |
1 files changed, 48 insertions, 0 deletions
@@ -124,6 +124,54 @@ xstrdup (char *s) return value; } +/* Return a new string based on fmt. */ +char * +xvsprintf (char *fmt, va_list ap) +{ + int size, nchars; + char *buffer; + + /* A resonable starting value. */ + size = strlen (fmt) + 1; + buffer = (char *)xmalloc (size); + + nchars = vsnprintf (buffer, size, fmt, ap); + + /* From the GNU Libc manual: In versions of the GNU C library prior + to 2.1 the return value is the number of characters stored, not + including the terminating null; unless there was not enough space + in S to store the result in which case `-1' is returned. */ + if (nchars == -1) + { + do + { + size *= 2; + buffer = (char *)xrealloc (buffer, size); + } while (vsnprintf (buffer, size, fmt, ap) == -1); + } + else if (nchars >= size) + { + buffer = (char *)xrealloc (buffer, nchars + 1); + vsnprintf (buffer, nchars + 1, fmt, ap); + } + + return buffer; +} + +/* Return a new string based on fmt. */ +char * +xsprintf (char *fmt, ...) +{ + char *buffer; + va_list ap; + + va_start (ap, fmt); + buffer = xvsprintf (fmt, ap); + va_end (ap); + + return buffer; +} + void sighandler (int signum) { |