summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorcremno <[email protected]>2014-08-03 21:15:48 +0200
committercremno <[email protected]>2014-08-03 21:15:48 +0200
commitb6e27218ad1ffdba6d2103b85d5d9231b6380008 (patch)
tree6b84ad30e85f50fa4eab6c7373306e741d194508 /include
parent206f89e2090524f009fc5a87f42c15a453ebdbee (diff)
downloadmruby-b6e27218ad1ffdba6d2103b85d5d9231b6380008.tar.gz
mruby-b6e27218ad1ffdba6d2103b85d5d9231b6380008.zip
MSVC: add simple (v)snprintf implementation
_snprintf is not C99's snprintf! This simple implementation, unlike _snprintf, always null-terminates and returns the expected return value (in most cases). Other C99 behaviors (like format specifiers) require adding a complete snprintf implementation. Do we want or need that? The same applies to vsnprintf (aka _vsnprintf).
Diffstat (limited to 'include')
-rw-r--r--include/mruby/value.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/include/mruby/value.h b/include/mruby/value.h
index e2c9223e9..30c39c5f2 100644
--- a/include/mruby/value.h
+++ b/include/mruby/value.h
@@ -31,7 +31,7 @@ struct mrb_state;
# define MRB_INT_MIN (INT32_MIN>>MRB_FIXNUM_SHIFT)
# define MRB_INT_MAX (INT32_MAX>>MRB_FIXNUM_SHIFT)
#endif
-
+
#ifdef MRB_USE_FLOAT
typedef float mrb_float;
# define mrb_float_to_str(buf, i) sprintf(buf, "%.7e", i)
@@ -47,7 +47,11 @@ struct mrb_state;
# define inline __inline
# endif
# if _MSC_VER < 1900
-# define snprintf _snprintf
+# include <stdarg.h>
+MRB_API int mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list arg);
+MRB_API int mrb_msvc_snprintf(char *s, size_t n, const char *format, ...);
+# define vsnprintf(s, n, format, arg) mrb_msvc_vsnprintf(s, n, format, arg)
+# define snprintf(s, n, format, ...) mrb_msvc_snprintf(s, n, format, __VA_ARGS__)
# endif
# if _MSC_VER < 1800
# include <float.h>