summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMasaki Muranaka <[email protected]>2012-06-15 12:27:44 +0900
committerMasaki Muranaka <[email protected]>2012-06-15 12:27:44 +0900
commitccec3da35bb2a6fff9fb58c30645b02692996f8b (patch)
treeef6c657fc3bbe86ca56fb971ecf595716f59eaae
parent9983e1d77378dd55d0b0380df848a307d4669bff (diff)
downloadmruby-ccec3da35bb2a6fff9fb58c30645b02692996f8b.tar.gz
mruby-ccec3da35bb2a6fff9fb58c30645b02692996f8b.zip
Use return value of vsnprintf() for the string length. It is redundant using strlen().
-rw-r--r--src/error.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/error.c b/src/error.c
index d50c596cc..548527f07 100644
--- a/src/error.c
+++ b/src/error.c
@@ -177,11 +177,15 @@ mrb_raise(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
{
va_list args;
char buf[256];
+ int n;
va_start(args, fmt);
- vsnprintf(buf, 256, fmt, args);
+ n = vsnprintf(buf, 256, fmt, args);
va_end(args);
- mrb_exc_raise(mrb, mrb_exc_new(mrb, c, buf, strlen(buf)));
+ if (n < 0) {
+ n = 0;
+ }
+ mrb_exc_raise(mrb, mrb_exc_new(mrb, c, buf, n));
}
void
@@ -190,12 +194,15 @@ mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...)
mrb_value exc, argv[2];
va_list args;
char buf[256];
+ int n;
va_start(args, fmt);
- //argv[0] = mrb_vsprintf(fmt, args);
- vsnprintf(buf, 256, fmt, args);
- argv[0] = mrb_str_new(mrb, buf, strlen(buf));
+ n = vsnprintf(buf, 256, fmt, args);
va_end(args);
+ if (n < 0) {
+ n = 0;
+ }
+ argv[0] = mrb_str_new(mrb, buf, n);
argv[1] = mrb_str_new_cstr(mrb, mrb_sym2name(mrb, id));
exc = mrb_class_new_instance(mrb, 2, argv, E_NAME_ERROR);
@@ -207,11 +214,15 @@ mrb_sprintf(mrb_state *mrb, const char *fmt, ...)
{
va_list args;
char buf[256];
+ int n;
va_start(args, fmt);
- vsnprintf(buf, 256, fmt, args);
+ n = vsnprintf(buf, 256, fmt, args);
va_end(args);
- return mrb_str_new(mrb, buf, strlen(buf));
+ if (n < 0) {
+ n = 0;
+ }
+ return mrb_str_new(mrb, buf, n);
}
void