From bbb367841a7ea6bdc420342d31d7c0f33afaa128 Mon Sep 17 00:00:00 2001 From: Masaki Muranaka Date: Sat, 23 Mar 2013 19:33:25 +0900 Subject: Add new API mrb_ptr_as_string(). --- src/string.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src') diff --git a/src/string.c b/src/string.c index 165cdbccd..15abb47d7 100644 --- a/src/string.c +++ b/src/string.c @@ -1534,6 +1534,36 @@ mrb_obj_as_string(mrb_state *mrb, mrb_value obj) return str; } +mrb_value +mrb_ptr_as_string(mrb_state *mrb, void *p) +{ + struct RString *p_str; + char *p1; + char *p2; + intptr_t n = (intptr_t)p; + + p_str = str_new(mrb, NULL, 2 + sizeof(uintptr_t) * CHAR_BIT / 4); + p1 = p_str->ptr; + *p1++ = '0'; + *p1++ = 'x'; + p2 = p1; + + do { + *p2++ = mrb_digitmap[n % 16]; + n /= 16; + } while (n > 0); + *p2 = '\0'; + p_str->len = (mrb_int)(p2 - p_str->ptr); + + while (p1 < p2) { + const char c = *p1; + *p1++ = *--p2; + *p2 = c; + } + + return mrb_obj_value(p_str); +} + mrb_value mrb_check_string_type(mrb_state *mrb, mrb_value str) { -- cgit v1.2.3