summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sprintf.c33
-rw-r--r--vsnprintf.c40
2 files changed, 33 insertions, 40 deletions
diff --git a/sprintf.c b/sprintf.c
index 376285476d..9770a00008 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -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);
-}