summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authordearblue <[email protected]>2019-06-22 16:30:36 +0900
committerdearblue <[email protected]>2019-06-22 22:36:58 +0900
commit7c6d6effaea6ec3cbac01cffc4f094744d53d8b9 (patch)
tree45bef029245c22a88cd7c3c03379b5cd70dead05 /src
parentf94551ad40c12370770c8e743ba8b39abc430547 (diff)
downloadmruby-7c6d6effaea6ec3cbac01cffc4f094744d53d8b9.tar.gz
mruby-7c6d6effaea6ec3cbac01cffc4f094744d53d8b9.zip
Replacement to function for string reversing
Diffstat (limited to 'src')
-rw-r--r--src/string.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/string.c b/src/string.c
index bfe73b359..282f8d776 100644
--- a/src/string.c
+++ b/src/string.c
@@ -1671,6 +1671,18 @@ mrb_ptr_to_str(mrb_state *mrb, void *p)
return mrb_obj_value(p_str);
}
+static inline void
+str_reverse(char *p, char *e)
+{
+ char c;
+
+ while (p < e) {
+ c = *p;
+ *p++ = *e;
+ *e-- = c;
+ }
+}
+
/* 15.2.10.5.30 */
/*
* call-seq:
@@ -1714,17 +1726,12 @@ mrb_str_reverse_bang(mrb_state *mrb, mrb_value str)
{
struct RString *s = mrb_str_ptr(str);
char *p, *e;
- char c;
mrb_str_modify(mrb, s);
if (RSTR_LEN(s) > 1) {
p = RSTR_PTR(s);
e = p + RSTR_LEN(s) - 1;
- while (p < e) {
- c = *p;
- *p++ = *e;
- *e-- = c;
- }
+ str_reverse(p, e);
}
return str;
}