diff options
| author | cremno <[email protected]> | 2014-08-03 21:15:48 +0200 |
|---|---|---|
| committer | cremno <[email protected]> | 2014-08-03 21:15:48 +0200 |
| commit | b6e27218ad1ffdba6d2103b85d5d9231b6380008 (patch) | |
| tree | 6b84ad30e85f50fa4eab6c7373306e741d194508 /include | |
| parent | 206f89e2090524f009fc5a87f42c15a453ebdbee (diff) | |
| download | mruby-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.h | 8 |
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> |
