summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-08-04 16:28:02 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-08-04 16:28:02 +0900
commitea80e8285247992fc4308621571eed9a0e215184 (patch)
tree4fb483d7d65372558052cdc4baf378ac104e4116
parentdb7b01c0b360b2909b14dbd399ee5a3eb2fce0c5 (diff)
parent0fa3668e917c45409acd56ba624db24d95699895 (diff)
downloadmruby-ea80e8285247992fc4308621571eed9a0e215184.tar.gz
mruby-ea80e8285247992fc4308621571eed9a0e215184.zip
Merge branch 'master' of github.com:mruby/mruby
-rw-r--r--include/mruby/value.h8
-rw-r--r--src/etc.c37
-rw-r--r--src/gc.c8
-rw-r--r--src/load.c4
-rw-r--r--src/string.c2
5 files changed, 48 insertions, 11 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>
diff --git a/src/etc.c b/src/etc.c
index 41f6b5609..68b26b024 100644
--- a/src/etc.c
+++ b/src/etc.c
@@ -183,3 +183,40 @@ mrb_regexp_p(mrb_state *mrb, mrb_value v)
{
return mrb_class_defined(mrb, REGEXP_CLASS) && mrb_obj_is_kind_of(mrb, v, mrb_class_get(mrb, REGEXP_CLASS));
}
+
+#if defined _MSC_VER && _MSC_VER < 1900
+
+#ifndef va_copy
+static void
+mrb_msvc_va_copy(va_list *dest, va_list src)
+{
+ *dest = src;
+}
+#define va_copy(dest, src) msvc_va_copy(&(dest), src)
+#endif
+
+MRB_API int
+mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list arg)
+{
+ int cnt;
+ va_list argcp;
+ va_copy(argcp, arg);
+ if (n == 0 || (cnt = _vsnprintf_s(s, n, _TRUNCATE, format, argcp)) < 0) {
+ cnt = _vscprintf(format, arg);
+ }
+ va_end(argcp);
+ return cnt;
+}
+
+MRB_API int
+mrb_msvc_snprintf(char *s, size_t n, const char *format, ...)
+{
+ va_list arg;
+ int ret;
+ va_start(arg, format);
+ ret = mrb_msvc_vsnprintf(s, n, format, arg);
+ va_end(arg);
+ return ret;
+}
+
+#endif /* defined _MSC_VER && _MSC_VER < 1900 */
diff --git a/src/gc.c b/src/gc.c
index 248c519cd..c8e7a4646 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -949,7 +949,7 @@ static void
incremental_gc_until(mrb_state *mrb, enum gc_state to_state)
{
do {
- incremental_gc(mrb, ~0);
+ incremental_gc(mrb, SIZE_MAX);
} while (mrb->gc_state != to_state);
}
@@ -1162,7 +1162,7 @@ gc_start(mrb_state *mrb, mrb_value obj)
static mrb_value
gc_enable(mrb_state *mrb, mrb_value obj)
{
- int old = mrb->gc_disabled;
+ mrb_bool old = mrb->gc_disabled;
mrb->gc_disabled = FALSE;
@@ -1184,7 +1184,7 @@ gc_enable(mrb_state *mrb, mrb_value obj)
static mrb_value
gc_disable(mrb_state *mrb, mrb_value obj)
{
- int old = mrb->gc_disabled;
+ mrb_bool old = mrb->gc_disabled;
mrb->gc_disabled = TRUE;
@@ -1258,7 +1258,7 @@ gc_step_ratio_set(mrb_state *mrb, mrb_value obj)
}
static void
-change_gen_gc_mode(mrb_state *mrb, mrb_int enable)
+change_gen_gc_mode(mrb_state *mrb, mrb_bool enable)
{
if (is_generational(mrb) && !enable) {
clear_all_old(mrb);
diff --git a/src/load.c b/src/load.c
index f5bd34b41..062f8ba5b 100644
--- a/src/load.c
+++ b/src/load.c
@@ -22,10 +22,6 @@
# define SIZE_ERROR(x) (0)
#endif
-#if CHAR_BIT != 8
-# error This code assumes CHAR_BIT == 8
-#endif
-
#if UINT32_MAX > SIZE_MAX
# error This code cannot be built on your environment.
#endif
diff --git a/src/string.c b/src/string.c
index 26dcfea99..8ac5a436a 100644
--- a/src/string.c
+++ b/src/string.c
@@ -445,7 +445,7 @@ mrb_str_bytesize(mrb_state *mrb, mrb_value self)
*
* Returns a new string object containing a copy of <i>str</i>.
*/
-MRB_API mrb_value
+static mrb_value
mrb_str_size(mrb_state *mrb, mrb_value self)
{
struct RString *s = mrb_str_ptr(self);