summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-08-07 15:40:44 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-08-07 15:52:10 +0900
commit98fc887cb3d9458313cc275c4176d16e95c7c0c2 (patch)
tree8b849e34d9684e3d0e3e72a132ac8d59ee45cb47 /src
parentb8a87bd1115bc7f89e2e6caadb70d868d59b3a81 (diff)
downloadmruby-98fc887cb3d9458313cc275c4176d16e95c7c0c2.tar.gz
mruby-98fc887cb3d9458313cc275c4176d16e95c7c0c2.zip
Reorganize `mrb_string_value_cstr` and related functions.
`mrb_string_value_cstr` and `mrb_string_value_len`: obsolete `mrb_string_cstr`: new function to retrieve NULL terminated C string `RSTRING_CSTR`: wrapper macro of `mrb_string_cstr`
Diffstat (limited to 'src')
-rw-r--r--src/class.c2
-rw-r--r--src/string.c28
2 files changed, 20 insertions, 10 deletions
diff --git a/src/class.c b/src/class.c
index ff55de0e6..5b190d28b 100644
--- a/src/class.c
+++ b/src/class.c
@@ -770,7 +770,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
}
if (i < argc) {
ss = to_str(mrb, ARGV[arg_i++]);
- *ps = mrb_string_value_cstr(mrb, &ss);
+ *ps = RSTRING_CSTR(mrb, ss);
i++;
}
}
diff --git a/src/string.c b/src/string.c
index 71c6e126e..50c283593 100644
--- a/src/string.c
+++ b/src/string.c
@@ -1060,6 +1060,7 @@ mrb_str_to_str(mrb_state *mrb, mrb_value str)
}
}
+/* obslete: use RSTRING_PTR() */
MRB_API const char*
mrb_string_value_ptr(mrb_state *mrb, mrb_value str)
{
@@ -1067,6 +1068,7 @@ mrb_string_value_ptr(mrb_state *mrb, mrb_value str)
return RSTRING_PTR(str);
}
+/* obslete: use RSTRING_LEN() */
MRB_API mrb_int
mrb_string_value_len(mrb_state *mrb, mrb_value ptr)
{
@@ -2352,6 +2354,7 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, mrb_int base, mrb_bool badchec
return mrb_str_len_to_inum(mrb, str, strlen(str), base, badcheck);
}
+/* obslete: use RSTRING_CSTR() or mrb_string_cstr() */
MRB_API const char*
mrb_string_value_cstr(mrb_state *mrb, mrb_value *ptr)
{
@@ -2366,16 +2369,23 @@ mrb_string_value_cstr(mrb_state *mrb, mrb_value *ptr)
if (p[len] == '\0') {
return p;
}
+ if (MRB_FROZEN_P(ps) || RSTR_CAPA(ps) == len) {
+ ps = str_new(mrb, NULL, len+1);
+ memcpy(RSTR_PTR(ps), p, len);
+ RSTR_SET_LEN(ps, len);
+ *ptr = mrb_obj_value(ps);
+ }
else {
- if (MRB_FROZEN_P(ps)) {
- ps = str_new(mrb, p, len);
- *ptr = mrb_obj_value(ps);
- }
- else {
- mrb_str_modify(mrb, ps);
- }
- return RSTR_PTR(ps);
+ mrb_str_modify(mrb, ps);
}
+ RSTR_PTR(ps)[len] = '\0';
+ return RSTR_PTR(ps);
+}
+
+MRB_API const char*
+mrb_string_cstr(mrb_state *mrb, mrb_value str)
+{
+ return mrb_string_value_cstr(mrb, &str);
}
MRB_API mrb_value
@@ -2489,7 +2499,7 @@ bad:
MRB_API double
mrb_str_to_dbl(mrb_state *mrb, mrb_value str, mrb_bool badcheck)
{
- return mrb_cstr_to_dbl(mrb, mrb_string_value_cstr(mrb, &str), badcheck);
+ return mrb_cstr_to_dbl(mrb, RSTRING_CSTR(mrb, str), badcheck);
}
/* 15.2.10.5.39 */