diff options
-rw-r--r-- | sprintf.c | 33 | ||||
-rw-r--r-- | vsnprintf.c | 40 |
2 files changed, 33 insertions, 40 deletions
@@ -1256,6 +1256,39 @@ fmt_setup(char *buf, size_t size, int c, int flags, int width, int prec) #define upper_hexdigits (ruby_hexdigits+16) #include "vsnprintf.c" +int +ruby_vsnprintf(char *str, size_t n, const char *fmt, va_list ap) +{ + int ret; + rb_printf_buffer f; + + if ((int)n < 1) + return (EOF); + f._flags = __SWR | __SSTR; + f._bf._base = f._p = (unsigned char *)str; + f._bf._size = f._w = n - 1; + f.vwrite = BSD__sfvwrite; + f.vextra = 0; + ret = (int)BSD_vfprintf(&f, fmt, ap); + *f._p = 0; + return ret; +} + +int +ruby_snprintf(char *str, size_t n, char const *fmt, ...) +{ + int ret; + va_list ap; + + if ((int)n < 1) + return (EOF); + + va_start(ap, fmt); + ret = ruby_vsnprintf(str, n, fmt, ap); + va_end(ap); + return ret; +} + typedef struct { rb_printf_buffer base; volatile VALUE value; diff --git a/vsnprintf.c b/vsnprintf.c index 76178fed5e..49431d1640 100644 --- a/vsnprintf.c +++ b/vsnprintf.c @@ -1311,43 +1311,3 @@ exponent(char *p0, int exp, int fmtch) return (int)(p - p0); } #endif /* FLOATING_POINT */ - -int -ruby_vsnprintf(char *str, size_t n, const char *fmt, va_list ap) -{ - int ret; - FILE f; - - if ((int)n < 1) - return (EOF); - f._flags = __SWR | __SSTR; - f._bf._base = f._p = (unsigned char *)str; - f._bf._size = f._w = n - 1; - f.vwrite = BSD__sfvwrite; - f.vextra = 0; - ret = (int)BSD_vfprintf(&f, fmt, ap); - *f._p = 0; - return (ret); -} - -int -ruby_snprintf(char *str, size_t n, char const *fmt, ...) -{ - int ret; - va_list ap; - FILE f; - - if ((int)n < 1) - return (EOF); - - va_start(ap, fmt); - f._flags = __SWR | __SSTR; - f._bf._base = f._p = (unsigned char *)str; - f._bf._size = f._w = n - 1; - f.vwrite = BSD__sfvwrite; - f.vextra = 0; - ret = (int)BSD_vfprintf(&f, fmt, ap); - *f._p = 0; - va_end(ap); - return (ret); -} |